0xgasless SDK Docs
  • Introduction
    • 0xGasless AA SDK
    • Ethereum's EIP-4337 Account Abstraction
      • How Account Abstraction Works
      • Benefits of EIP-4337 Account Abstraction
  • Getting Started
    • Installation
    • Intialization
    • Using social login
    • Setting up paymasters
  • Telegram Module setup
  • Sending Transactions
    • Sending Transaction (non-telegram)
    • Sending Batch Transaction (non-telegram)
    • Sending Transaction (using telegram)
    • Sending Batch Transaction (using telegram)
  • Getting Transaction Receipt
  • 0xGasless Custom Paymaster
    • Document
Powered by GitBook
On this page
  1. Sending Transactions

Sending Batch Transaction (non-telegram)

Last updated 1 year ago

CtrlK

Step 1: Creating the Batch Transactions

After initializing the SDK, you can create an array of batch transactions using the BatchUserOperationCallData interface. This array represents the transactions you want to send. Here's an example:

In this code:

  • We import the UserOperationCallData

interface to define the structure of the transaction object.
  • transactions is an object that contains the transactions with target (recipient's Ethereum address), data (transaction data in hexadecimal format), and an optional value field for the transaction amount in wei.

  • Step 2: Send the Batch Transactions using sendUserOpsBatch

    Now that you have the transactions array, you can send it as a user operation using the sendUserOpsBatch method provided by the SDK. This method returns the user operation hash (userOpHash)

    In this code:

    • The await client.sendUserOpsBatch(transactions) call sends the multiple transactions as a user operation and returns an object containing the userOpHash.

    • The userOpHash is the hash of the user operation.

    With these steps, you can successfully send a transaction and capture user operation hash using the 0xGasless AA SDK.

    import { BatchUserOperationCallData, UserOperationCallData, sendUserOp } from '@0xgasless/0xgasless-aa-sdk';
    import { ethers } from 'ethers';
    
    // Replace with the contract address and ABI of the smart contract you want to interact with
    const contractAddress = '0xContractAddress'; // Replace with the contract address
    const contractABI = [
        // Define the ABI of the contract, including function definitions
        // Example: { "constant": false, "inputs": [...], "name": "functionName", "outputs": [...], "type": "function" }
    ];
    
    // Create an instance of the contract
    const contract = new ethers.Contract(contractAddress, contractABI);
    
    // Specify the function you want to call and its parameters
    const functionName = 'functionName'; // Replace with the name of the function you want to call
    const functionParams = ['param1', 'param2']; // Replace with the function's parameters
    
    // Encode the function call data
    const functionInterface = new ethers.utils.Interface(contractABI);
    const data = functionInterface.encodeFunctionData(functionName, functionParams);
    
    // Create a transaction object
    const transaction1: UserOperationCallData = {
        target: '0xRecipientAddress', // Replace with the recipient's Ethereum address
        data: data, // Replace with the transaction data in hexadecimal format
        value: BigInt('1000000000000000000'), // Optional: Replace with the amount in wei (e.g., 1 ETH)
    };
    
    const transaction2: UserOperationCallData = {
        target: '0xRecipientAddress', // Replace with the recipient's Ethereum address
        data: data, // Replace with the transaction data in hexadecimal format
    };
    
    const transactions = [transaction1, transaction2]
    
    try {
        const { userOpHash } = await client.sendUserOpsBatch(transactions);
        console.log('UserOp Hash:', userOpHash);
        console.log('Transaction sent successfully');
    } catch (error) {
        console.error('Transaction failed:', error);
    }