Sending Transaction (using telegram)

Note: Before using this module, set up the Telegram module for your application.

Step 1: Creating the Transaction

After initializing the SDK, you can create a transaction object using the UserOperationCallData interface. This object represents the transaction you want to send. Here's an example:

import { 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 transaction: 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)
};

In this code:

  • We import the UserOperationCallData interface to define the structure of the transaction object.

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

Step 2: Prepare UserOperation and Send OTP on User's Telegram

Now that you have the transaction object, to send userOp there are 2 steps.

  1. Prepare UserOp and send OTP on telegram to user:

First, call prepareUserOp function on SDK with transaction as an argument to it. It will return with OTP sent success: true/false and requestId.

User will receive OTP on telegram which has to be sent in next step. Implement functionality to get the OTP from user as per your choice.

const { requestId, otpSent } = await sdk.prepareUserOp(trx);
console.log("prepareUserOp",requestId,otpSent);
  1. Send the Transaction using sendUserOp by passing requestId and OTP

try {
    const requestId = <requestId>;
    const otp = <otp>;
    const { userOpHash, transactionHash } = await client.sendUserOp(requestId, otp);
    console.log('UserOp Hash:', userOpHash);
    console.log('Transaction Hash:', txHash);
    console.log('Transaction sent successfully');
} catch (error) {
    console.error('Transaction failed:', error);
}

In this code:

  • sendUserOp takes 2 arguments: requestId and OTP.

  • The await client.sendUserOp(requestId, otp) call sends the requestId and OTP and returns an object containing both the userOpHash and transactionHash.

  • The userOpHash is the hash of the user operation, and transactionHash is the hash of the underlying transaction.

  • Both hashes are logged to the console for your reference.

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

Last updated