import type { Address, Hash } from "viem";
export type Hex = `0x${string}`;
export type EmptyHex = `0x`;
export type PromiseOrValue<T> = T | Promise<T>;
export type BigNumberish = string | bigint | number;
export type BytesLike = Uint8Array | string;
export interface UserOperationCallData {
    target: Address;
    data: Hex;
    value?: bigint;
}
export interface UserOperationRequest {
    sender: string;
    nonce: Hex;
    initCode: Hex | EmptyHex;
    callData: Hex;
    callGasLimit: Hex;
    verificationGasLimit: Hex;
    preVerificationGas: Hex;
    maxFeePerGas: Hex;
    maxPriorityFeePerGas: Hex;
    paymasterAndData: Hex | EmptyHex;
    signature: Hex;
}
export interface UserOperationEstimateGasResponse {
    preVerificationGas: BigNumberish;
    verificationGasLimit: BigNumberish;
    callGasLimit: BigNumberish;
}
export interface UserOperationResponse extends UserOperationRequest {
    entryPoint: Address;
    blockNumber: BigNumberish;
    blockHash: Hash;
    transactionHash: Hash;
}
export interface UserOperationReceiptLog {
    blockHash: Hash;
    blockNumber: BigNumberish;
    transactionIndex: BigNumberish;
    address: Address;
    logIndex: BigNumberish;
    data: Hex;
    removed: boolean;
    topics: string[];
    transactionHash: Hash;
}
export interface UserOperationReceiptObject {
    blockHash: Hash;
    blockNumber: BigNumberish;
    transactionIndex: BigNumberish;
    transactionHash: Hash;
    from: Address;
    to: Address;
    cumulativeGasUsed: BigNumberish;
    gasUsed: BigNumberish;
    contractAddress: Address;
    logs: UserOperationReceiptLog[];
    logsBloom: Hex;
    root: Hex;
    status: number;
    effectiveGasPrice: BigNumberish;
    type: string;
}
export interface UserOperationReceipt {
    userOpHash: Hash;
    entryPoint: Address;
    sender: Address;
    nonce: BigNumberish;
    paymaster?: Address;
    actualGasCost: BigNumberish;
    actualGasUsed: BigNumberish;
    success: boolean;
    reason?: string;
    logs: string[];
    receipt: UserOperationReceiptObject;
}
export interface UserOperationStruct {
    sender: PromiseOrValue<string>;
    nonce: PromiseOrValue<BigNumberish>;
    initCode: PromiseOrValue<BytesLike | "0x">;
    callData: PromiseOrValue<BytesLike>;
    callGasLimit?: PromiseOrValue<BigNumberish>;
    verificationGasLimit?: PromiseOrValue<BigNumberish>;
    preVerificationGas?: PromiseOrValue<BigNumberish>;
    maxFeePerGas?: PromiseOrValue<BigNumberish>;
    maxPriorityFeePerGas?: PromiseOrValue<BigNumberish>;
    paymasterAndData: PromiseOrValue<BytesLike | "0x">;
    signature: PromiseOrValue<BytesLike>;
}
export interface UserOperationTxData {
    request: UserOperationRequest;
    opHash: Hex;
}
export interface GasEstimatorLimits {
    callGasLimit?: number;
    preVerificationGas?: number;
    verificationGasLimit?: number;
}
export interface GasEstimatorMax {
    maxFeePerGas?: number;
    maxPriorityFeePerGas?: number;
}
export type BatchUserOperationCallData = UserOperationCallData[];
export type UserOperationOverrides = Pick<UserOperationStruct, "maxFeePerGas" | "maxPriorityFeePerGas">;
