Skip to content
Alchemy Logo

buildUserOperationFromTx

function buildUserOperationFromTx<
  TChain,
  TAccount,
  TChainOverride,
  TContext,
  TEntryPointVersion,
>(
  client_,
  args,
  overrides?,
  context?,
): Promise<UserOperationStruct<TEntryPointVersion>>;

Defined in: aa-sdk/core/src/actions/smartAccount/buildUserOperationFromTx.ts:62

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 type { RpcTransactionRequest } from "viem";
import { smartAccountClient } from "./smartAccountClient";
// [!code focus:99]
// 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 });

Type ParameterDefault type

TChain extends undefined | Chain

undefined | Chain

TAccount extends | undefined | SmartContractAccount

| undefined | SmartContractAccount

TChainOverride extends undefined | Chain

undefined | Chain

TContext extends | undefined | UserOperationContext

| undefined | UserOperationContext

TEntryPointVersion extends keyof EntryPointRegistryBase<unknown>

GetEntryPointFromAccount<TAccount>

ParameterTypeDescription

client_

Client<Transport, TChain, TAccount>

the smart account client to use for RPC requests

args

SendTransactionParameters<TChain, TAccount, TChainOverride>

the send tx parameters

overrides?

UserOperationOverrides<TEntryPointVersion>

optional overrides to use for any of the fields

context?

TContext

if the smart account client requires additinoal context for building UOs

Promise<UserOperationStruct<TEntryPointVersion>>

a Promise containing the built user operation

Was this page helpful?