Skip to content

buildUserOperationFromTx

Performs buildUserOperationFromTx in batch and builds into a single, yet to be signed UserOperation (UO) struct. The output user operation struct will be filled with all gas fields (and paymaster data if a paymaster is used) based on the transactions data (to, data, value, maxFeePerGas, maxPriorityFeePerGas) computed using the configured ClientMiddlewares on the SmartAccountClient

Import

import { buildUserOperationFromTx } from "@aa-sdk/core";

Usage

import type { RpcTransactionRequest } from "viem";
import { smartAccountClient } from "./smartAccountClient";

// buildUserOperationFromTx converts a traditional Ethereum transaction and returns
// the unsigned user operation struct after constructing the user operation struct
// through the middleware pipeline
const tx: RpcTransactionRequest = {
from, // ignored
to,
data: encodeFunctionData({
abi: ContractABI.abi,
functionName: "func",
args: [arg1, arg2, ...],
}),
};
const uoStruct = await smartAccountClient.buildUserOperationFromTx(tx);
 
// signUserOperation signs the above unsigned user operation struct built
// using the account connected to the smart account client
const request = await smartAccountClient.signUserOperation({ uoStruct });
 
// You can use the BundlerAction `sendRawUserOperation` (packages/core/src/actions/bundler/sendRawUserOperation.ts)
// to send the signed user operation request to the bundler, requesting the bundler to send the signed uo to the
// EntryPoint contract pointed at by the entryPoint address parameter
const entryPointAddress = client.account.getEntryPoint().address;
const uoHash = await smartAccountClient.sendRawUserOperation({ request, entryPoint: entryPointAddress });

Parameters

client

Client<Transport, TChain, TAccount> the smart account client to use for RPC requests

args

SendTransactionParameters the send tx parameters

overrides

UserOperationOverrides optional overrides to use for any of the fields

context

TContext if the smart account client requires additinoal context for building UOs

Returns

Promise<UserOperationStruct<TEntryPointVersion>> a Promise containing the built user operation