UNPKG

@owlprotocol/contracts-account-abstraction

Version:

ERC4337 Account Abstraction support for deploying relevant smart contracts and interacting with UserOps.

85 lines (84 loc) 2.95 kB
import { Address, Hash, Hex } from "viem"; import { UserOperation } from "viem/account-abstraction"; /** * PackedUserOp suitable for call to EntryPoint contract * //TODO: Move to `PackedUserOperation.ts` */ export interface PackedUserOperation { sender: Address; nonce: bigint; initCode: Hex; callData: Hex; accountGasLimits: Hash; preVerificationGas: bigint; gasFees: Hash; paymasterAndData: Hex; signature: Hex; } /** * Convert `UserOperationWithBigIntAsHex` to `PackedUserOperation` * @param userOp * @returns packedUserOperation */ export declare function toPackedUserOperation(userOp: UserOperation<"0.7", Hex>): PackedUserOperation; /** * Convert `PackedUserOperation` to `UserOperationWithBigIntAsHex` * @param userOp * @returns packedUserOperation */ export declare function toUserOperationEncoded(packedUserOperation: PackedUserOperation): UserOperation<"0.7", Hex>; /** * Return `PackedUserOperation` with random data for better gas estimation * @param packedUserOperation * @returns */ export declare function packedUserOperationToRandomDataUserOp(packedUserOperation: PackedUserOperation): PackedUserOperation; /** * //TODO: Bit weird to have this random data logic inside hear as obfuscates logic * Pack `PackedUserOperation` as bytes and add random user data for gas estimation * @param packedUserOperation * @returns */ export declare function packUserOperation(packedUserOperation: PackedUserOperation): Hex; export declare function packAccountGasLimits(verificationGasLimit: Hex, callGasLimit: Hex): Hex; export declare function unpackInitCode(initCode: Hex): { factory: null; factoryData: null; } | { factory: `0x${string}`; factoryData: `0x${string}`; }; export declare function unpackGasLimits(gasLimits: Hex): { maxPriorityFeePerGas: bigint; maxFeePerGas: bigint; }; export declare function unpackPaymasterAndData(paymasterAndData: Hex): { paymaster: null; paymasterVerificationGasLimit: null; paymasterPostOpGasLimit: null; paymasterData: null; } | { paymaster: `0x${string}`; paymasterVerificationGasLimit: bigint; paymasterPostOpGasLimit: bigint; paymasterData: `0x${string}`; }; /** * * paymasterAndData[:20] : address(this) * paymasterAndData[20:36] : paymasterVerificationGasLimit * paymasterAndData[36:52] : postOpGasLimit * paymasterAndData[52:] : paymasterData (custom data) * paymasterAndData[52:116] : abi.encode(validUntil, validAfter) * paymasterAndData[116:] : signature (64-65 bytex) * @param paymaster * @param paymasterVerificationGasLimit * @param postOpGasLimit * @param paymasterData * @returns */ export declare function packPaymasterData(paymaster: Address, paymasterVerificationGasLimit: Hex, postOpGasLimit: Hex, paymasterData: Hex): Hex; export declare function unpackAccountGasLimits(accountGasLimits: string): { verificationGasLimit: number; callGasLimit: number; };