Epoch Protocol Docs
  • Epoch Protocol - Overview
  • What is Epoch Protocol - An Introduction
  • 📄Litepaper
  • Blog
  • Links
  • Account Abstraction
    • ERC 4337
      • Operations
    • Benefits
    • Use-cases
      • Examples
    • More Readings
  • Use Epoch Protocol Automation dApp
    • How to use Epoch Protocol for Intent Automation
    • Onboarding
    • Connect to Dapp
    • Record a transaction
    • Bonus Add NFT Action
    • Execute Transaction right now
    • Time-Based triggers
    • Token Received Trigger
    • Reporting a bug and common fixes
  • Use Epoch SDK
    • Getting Started
    • Intent Automation Module
      • Epoch Bundler
      • Epoch SDK
      • Triggers
      • Examples
        • How to Initialise the Epoch SDK
        • How to Get User's SC Wallet Address
        • Check If User's SC Wallet is Deployed or Not
        • Deploy User's SC Wallet if not Deployed
        • Schedule Token Payment
        • Schedule ETH Transfer on Event Trigger
    • Contracts
Powered by GitBook
On this page

Was this helpful?

  1. Use Epoch SDK
  2. Intent Automation Module
  3. Examples

Schedule ETH Transfer on Event Trigger

Initialise the Bundler Instance and Account API Instance.

Make sure you have the ETH you want to schedule in your SC Wallet Address.

Transferring ETH if Proposal statusCode is equal to 2 in the example below.

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);
PreviousSchedule Token PaymentNextContracts

Last updated 1 year ago

Was this helpful?