viem
Version:
110 lines • 8.23 kB
TypeScript
import type { Address, Narrow } from 'abitype';
import { type ParseAccountErrorType } from '../../../accounts/utils/parseAccount.js';
import { type EstimateFeesPerGasErrorType } from '../../../actions/public/estimateFeesPerGas.js';
import type { Client } from '../../../clients/createClient.js';
import type { Transport } from '../../../clients/transports/createTransport.js';
import type { ErrorType } from '../../../errors/utils.js';
import type { Calls } from '../../../types/calls.js';
import type { Chain } from '../../../types/chain.js';
import type { Hex } from '../../../types/misc.js';
import type { StateOverride } from '../../../types/stateOverride.js';
import type { Assign, OneOf, Prettify, UnionOmit } from '../../../types/utils.js';
import { type EncodeFunctionDataErrorType } from '../../../utils/abi/encodeFunctionData.js';
import { type ConcatErrorType } from '../../../utils/data/concat.js';
import type { SmartAccount } from '../../accounts/types.js';
import type { PaymasterActions } from '../../clients/decorators/paymaster.js';
import type { DeriveSmartAccount, GetSmartAccountParameter } from '../../types/account.js';
import type { DeriveEntryPointVersion, EntryPointVersion } from '../../types/entryPointVersion.js';
import type { UserOperation, UserOperationRequest } from '../../types/userOperation.js';
import { type GetPaymasterDataErrorType } from '../paymaster/getPaymasterData.js';
import { type GetPaymasterStubDataErrorType } from '../paymaster/getPaymasterStubData.js';
declare const defaultParameters: readonly ["factory", "fees", "gas", "paymaster", "nonce", "signature"];
export type PrepareUserOperationParameterType = 'factory' | 'fees' | 'gas' | 'paymaster' | 'nonce' | 'signature';
type FactoryProperties<entryPointVersion extends EntryPointVersion = EntryPointVersion> = (entryPointVersion extends '0.7' ? {
factory: UserOperation['factory'];
factoryData: UserOperation['factoryData'];
} : never) | (entryPointVersion extends '0.6' ? {
initCode: UserOperation['initCode'];
} : never);
type GasProperties<entryPointVersion extends EntryPointVersion = EntryPointVersion> = (entryPointVersion extends '0.7' ? {
callGasLimit: UserOperation['callGasLimit'];
preVerificationGas: UserOperation['preVerificationGas'];
verificationGasLimit: UserOperation['verificationGasLimit'];
paymasterPostOpGasLimit: UserOperation['paymasterPostOpGasLimit'];
paymasterVerificationGasLimit: UserOperation['paymasterVerificationGasLimit'];
} : never) | (entryPointVersion extends '0.6' ? {
callGasLimit: UserOperation['callGasLimit'];
preVerificationGas: UserOperation['preVerificationGas'];
verificationGasLimit: UserOperation['verificationGasLimit'];
} : never);
type FeeProperties = {
maxFeePerGas: UserOperation['maxFeePerGas'];
maxPriorityFeePerGas: UserOperation['maxPriorityFeePerGas'];
};
type NonceProperties = {
nonce: UserOperation['nonce'];
};
type PaymasterProperties<entryPointVersion extends EntryPointVersion = EntryPointVersion> = (entryPointVersion extends '0.7' ? {
paymaster: UserOperation['paymaster'];
paymasterData: UserOperation['paymasterData'];
paymasterPostOpGasLimit: UserOperation['paymasterPostOpGasLimit'];
paymasterVerificationGasLimit: UserOperation['paymasterVerificationGasLimit'];
} : never) | (entryPointVersion extends '0.6' ? {
paymasterAndData: UserOperation['paymasterAndData'];
} : never);
type SignatureProperties = {
signature: UserOperation['signature'];
};
export type PrepareUserOperationRequest<account extends SmartAccount | undefined = SmartAccount | undefined, accountOverride extends SmartAccount | undefined = SmartAccount | undefined, calls extends readonly unknown[] = readonly unknown[], _derivedAccount extends SmartAccount | undefined = DeriveSmartAccount<account, accountOverride>, _derivedVersion extends EntryPointVersion = DeriveEntryPointVersion<_derivedAccount>> = Assign<UserOperationRequest<_derivedVersion>, OneOf<{
calls: Calls<Narrow<calls>>;
} | {
callData: Hex;
}> & {
parameters?: readonly PrepareUserOperationParameterType[] | undefined;
paymaster?: Address | true | {
/** Retrieves paymaster-related User Operation properties to be used for sending the User Operation. */
getPaymasterData?: PaymasterActions['getPaymasterData'] | undefined;
/** Retrieves paymaster-related User Operation properties to be used for gas estimation. */
getPaymasterStubData?: PaymasterActions['getPaymasterStubData'] | undefined;
} | undefined;
/** Paymaster context to pass to `getPaymasterData` and `getPaymasterStubData` calls. */
paymasterContext?: unknown | undefined;
/** State overrides for the User Operation call. */
stateOverride?: StateOverride | undefined;
}>;
export type PrepareUserOperationParameters<account extends SmartAccount | undefined = SmartAccount | undefined, accountOverride extends SmartAccount | undefined = SmartAccount | undefined, calls extends readonly unknown[] = readonly unknown[], request extends PrepareUserOperationRequest<account, accountOverride, calls> = PrepareUserOperationRequest<account, accountOverride, calls>> = request & GetSmartAccountParameter<account, accountOverride>;
export type PrepareUserOperationReturnType<account extends SmartAccount | undefined = SmartAccount | undefined, accountOverride extends SmartAccount | undefined = SmartAccount | undefined, calls extends readonly unknown[] = readonly unknown[], request extends PrepareUserOperationRequest<account, accountOverride, calls> = PrepareUserOperationRequest<account, accountOverride, calls>, _parameters extends PrepareUserOperationParameterType = request['parameters'] extends readonly PrepareUserOperationParameterType[] ? request['parameters'][number] : (typeof defaultParameters)[number], _derivedAccount extends SmartAccount | undefined = DeriveSmartAccount<account, accountOverride>, _derivedVersion extends EntryPointVersion = DeriveEntryPointVersion<_derivedAccount>> = Prettify<UnionOmit<request, 'calls' | 'parameters'> & {
callData: Hex;
paymasterAndData: _derivedVersion extends '0.6' ? Hex : undefined;
sender: UserOperation['sender'];
} & (Extract<_parameters, 'factory'> extends never ? {} : FactoryProperties<_derivedVersion>) & (Extract<_parameters, 'nonce'> extends never ? {} : NonceProperties) & (Extract<_parameters, 'fees'> extends never ? {} : FeeProperties) & (Extract<_parameters, 'gas'> extends never ? {} : GasProperties<_derivedVersion>) & (Extract<_parameters, 'paymaster'> extends never ? {} : PaymasterProperties<_derivedVersion>) & (Extract<_parameters, 'signature'> extends never ? {} : SignatureProperties)>;
export type PrepareUserOperationErrorType = ParseAccountErrorType | GetPaymasterStubDataErrorType | GetPaymasterDataErrorType | EncodeFunctionDataErrorType | ConcatErrorType | EstimateFeesPerGasErrorType | ErrorType;
/**
* Prepares a User Operation and fills in missing properties.
*
* - Docs: https://viem.sh/actions/bundler/prepareUserOperation
*
* @param args - {@link PrepareUserOperationParameters}
* @returns The User Operation. {@link PrepareUserOperationReturnType}
*
* @example
* import { createBundlerClient, http } from 'viem'
* import { toSmartAccount } from 'viem/accounts'
* import { mainnet } from 'viem/chains'
* import { prepareUserOperation } from 'viem/actions'
*
* const account = await toSmartAccount({ ... })
*
* const client = createBundlerClient({
* chain: mainnet,
* transport: http(),
* })
*
* const request = await prepareUserOperation(client, {
* account,
* calls: [{ to: '0x...', value: parseEther('1') }],
* })
*/
export declare function prepareUserOperation<account extends SmartAccount | undefined, const calls extends readonly unknown[], const request extends PrepareUserOperationRequest<account, accountOverride, calls>, accountOverride extends SmartAccount | undefined = undefined>(client: Client<Transport, Chain | undefined, account>, parameters_: PrepareUserOperationParameters<account, accountOverride, calls, request>): Promise<PrepareUserOperationReturnType<account, accountOverride, calls, request>>;
export {};
//# sourceMappingURL=prepareUserOperation.d.ts.map