Schedule ETH Transfer on Event Trigger
import { BigNumber } from "ethers";
import { encodeFunctionData, parseUnits } from "viem";
const unsignedUserOp = await walletAPI.createUnsignedUserOp({
target: recipientAddressForETH,
data: "0x",
maxFeePerGas: BigNumber.from("90000000000"), // average value for the token transfer
maxPriorityFeePerGas: BigNumber.from("1500000000"), // average value for the token transfer
gasLimit: BigNumber.from("2000320"), // average value for the token transfer
value: 1000000n, // Transfering ETH to recipient
});
const newUserOp: any = {
sender: await unsignedUserOp.sender,
nonce: await unsignedUserOp.nonce,
initCode: await unsignedUserOp.initCode,
callData: await unsignedUserOp.callData,
callGasLimit: await unsignedUserOp.callGasLimit,
verificationGasLimit: await unsignedUserOp.verificationGasLimit,
preVerificationGas: await unsignedUserOp.preVerificationGas,
maxFeePerGas: await unsignedUserOp.maxFeePerGas,
maxPriorityFeePerGas: await unsignedUserOp.maxPriorityFeePerGas,
paymasterAndData: await unsignedUserOp.paymasterAndData,
signature: await unsignedUserOp.signature,
};
const key = await bundler.getValidNonceKey(newUserOp);
const nonce = await walletAPI.getNonce(key);
newUserOp.nonce = nonce;
const signedUserOp = await walletAPI.signUserOp(newUserOp);
const advancedOp = {
...signedUserOp,
advancedUserOperation: {
triggerEvent: {
contractAddress: propsalContractAddress,
eventSignature: "event ProposalResult(address indexed recipient, uint statusCode);",
evaluationStatement: ":statusCode: == 2",
},
},
};
const userOpHash = await bundler.sendUserOpToBundler(advancedOp);Last updated