import { type Chain, type Client, type Transport } from "viem"; import type { GetEntryPointFromAccount, SmartContractAccount } from "../../account/smartContractAccount"; import type { BuildTransactionParameters, BuildUserOperationFromTransactionsResult, UserOperationContext } from "./types"; /** * 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. * * @example * ```ts * import type { RpcTransactionRequest } from "viem"; * import { smartAccountClient } from "./smartAccountClient"; * * const requests: RpcTransactionRequest[] = [ * { * from, // ignored * to, * data: encodeFunctionData({ * abi: ContractABI.abi, * functionName: "func", * args: [arg1, arg2, ...], * }), * }, * { * from, // ignored * to, * data: encodeFunctionData({ * abi: ContractABI.abi, * functionName: "func", * args: [arg1, arg2, ...], * }), * }, * ]; * const uoStruct = await smartAccountClient.buildUserOperationFromTxs({ * requests, * }); * * // 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, * }); * ``` * * @param {Client} client_ the smart account client to use to make RPC calls * @param {BuildTransactionParameters} args an object containing the requests to build as well as, the account if not hoisted, the context, the overrides, and optionally a flag to enable signing of the UO via the underlying middleware * @returns {Promise>} a Promise containing the built user operation */ export declare function buildUserOperationFromTxs = GetEntryPointFromAccount, TContext extends UserOperationContext | undefined = UserOperationContext | undefined>(client_: Client, args: BuildTransactionParameters): Promise>;