@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
TypeScript
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;
};