Skip to content

prepareUserOperationRequest

Prepares a user operation request for signing by populating a sender, nonce, initCode, gas price values, gas limit values, and optionally requesting sponsorship from a paymaster.

Usage

example.ts
import { smartAccountClient, simpleSmartAccount } from "./smartAccountClient"
import { pimlicoBundlerClient } from "./bundlerClient"
import { parseAbiItem, encodeFunctionData } from "viem"
 
const callData = await simpleSmartAccount.encodeCallData({
    to: "0x0488bEE1Ec682db0F0E74AB52faFdDdEf10Af123",
    data: encodeFunctionData({
        abi: [parseAbiItem('function mint()')]
    }),
    value: 0n
})
 
// only if using pimlico
const gasPrices = await pimlicoBundlerClient.getUserOperationGasPrice()
 
const userOperation = await smartAccountClient.prepareUserOperationRequest({
    userOperation: {
        callData, // callData is the only required field in the partial user operation
        maxFeePerGas: gasPrices.fast.maxFeePerGas,
        maxPriorityFeePerGas: gasPrices.fast.maxPriorityFeePerGas
    }
})

Returns

  • Type: UserOperation

The UserOperation with the remaining fields (except the signature) filled.

Parameters

userOperation

  • Type: Partial<UserOperation>

The partial user operation. Only the callData field is required.

sponsorUserOperation (optional)

  • Type: (args: { userOperation: UserOperation, entryPoint: Address }) => Promise<UserOperation>

The paymaster middleware function (if one is used).

account (optional)

  • Type: SmartAccount

The smart account that will be used to fetch the nonce, initCode, sender, and the gas price values if they are not already filled.