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