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