/** * UserOp Builder — ERC-4337 v0.7 packed UserOp construction * * Pattern from: cross-chain-atomic-routing/scripts/base-volume-loop-gasless-v2.ts:462 * * Builds the packed UserOp format for ERC-4337 v0.7: * - accountGasLimits = bytes32(verificationGasLimit(16) | callGasLimit(16)) * - gasFees = bytes32(maxPriorityFeePerGas(16) | maxFeePerGas(16)) * - paymasterAndData = paymaster(20) + pmVerificationGas(16) + pmPostOpGas(16) + timeEncoding + signature */ export declare const GAS_LIMITS: { /** Gas for the main execution (approve + swap via AA) */ readonly CALL_GAS_LIMIT: 1500000n; /** Gas for signature verification */ readonly VERIFICATION_GAS_LIMIT: 500000n; /** Pre-verification gas (covers calldata cost) */ readonly PRE_VERIFICATION_GAS: 150000n; /** Paymaster verification gas */ readonly PM_VERIFICATION_GAS_LIMIT: 300000n; /** Paymaster post-op gas */ readonly PM_POST_OP_GAS_LIMIT: 150000n; }; export interface PackedUserOp { sender: string; nonce: bigint; initCode: string; callData: string; accountGasLimits: string; preVerificationGas: bigint; gasFees: string; paymasterAndData: string; signature: string; } export interface BuildUserOpParams { sender: string; nonce: bigint; initCode: string; callData: string; maxFeePerGas?: bigint; maxPriorityFeePerGas?: bigint; } /** * Build a packed UserOp (ERC-4337 v0.7 format). * * Gas limits use proven defaults from the volume loop. * paymasterAndData and signature are empty — fill with signPaymaster() and owner sign. */ export declare function buildUserOp(params: BuildUserOpParams): PackedUserOp; /** * Compute the UserOp hash per ERC-4337 v0.7 packed format. * * hash = keccak256(abi.encode( * keccak256(packedUserOp), * entryPoint, * chainId * )) */ export declare function computeUserOpHash(userOp: PackedUserOp, chainId: number): string; /** * Sign UserOp with the VerifyingPaymaster. * * Produces paymasterAndData with layout: * [0:20] paymaster address * [20:36] pmVerificationGasLimit (uint128) * [36:52] pmPostOpGasLimit (uint128) * [52:116] abi.encode(validUntil, validAfter) (64 bytes) * [116:181] ECDSA signature (65 bytes) */ export declare function signPaymaster(userOp: PackedUserOp, paymasterSignerKey: string, chainId: number): { paymasterAndData: string; };