Skip to main content

Send a batch of transactions

Overview

This tutorial demonstrates how to send a batch of transactions using ethers.js/web3.js and the AbstraXn Smart Account with the @abstraxn/account SDK.

Prerequisites

  • Node.js installed on your machine
  • A Bundler url
  • An rpc url
  • An address to send the transaction to (replace 0xaddress)

Step 1: Generate the config and Create AbstraXn Smart Account


import { createSmartAccountClient } from "@abstraxn/account";

// Your configuration with private key and AbstraXn API key
const config = {
privateKey: "your-private-key",
bundlerUrl: "",
};

// Generate EOA from private key using ethers.js
const account = privateKeyToAccount("0x" + config.privateKey);
const client = createWalletClient({
account,
chain: polygonMumbai,
transport: http(),
});

// Create AbstraXn Smart Account instance
const abstraxnSmartAccount = await AbstraxnSmartAccount.create({
chainId: ChainId.POLYGON_AMOY, // you can use multiple chains available in chainId object
activeValidationModule: ownerShipModule,
defaultValidationModule: ownerShipModule,
bundler: bundler, // instance of bundler
});

const saAddress = await abstraxnSmartAccount.getAccountAddress();
console.log("SA Address", saAddress);

Get your signer from either ethers.js or web3.js and create a AbstraXn Smart Account instance.

Step 2: Generate Transaction Data

const toAddress = "0xaddress"; // Replace with the recipient's address
const transactionData = "0x123"; // Replace with the actual transaction data

// Build the transactions
const tx = {
to: toAddress,
data: transactionData,
};
const txs = [tx, tx]; // Send the tx twice

Specify the recipient's address and transaction data to build the simple transaction. For this example we simply copy and paste the same dummy tx but the tx's here can be different.

Step 3: Send the Transaction and wait for the Transaction Hash

// Send the transaction and get the transaction hash
const userOpResponse = await smartWallet.sendTransaction(txs);
const { transactionHash } = await userOpResponse.waitForTxHash();
console.log("Transaction Hash", transactionHash);
const userOpReceipt = await userOpResponse.wait();
if(userOpReceipt.success == 'true') {
console.log("UserOp receipt", userOpReceipt)
console.log("Transaction receipt", userOpReceipt.receipt)
}

Send the transaction and get the transaction hash. The transaction will be built into a User Operation and then sent to the Bundler.

That's it! You've successfully sent a simple transaction using ethers.js/web3.js and the AbstraXn Smart Account. Feel free to customize this example based on your specific use case.