export const DelegateAndRevert = {
    inputs: [
        { internalType: "bool", name: "success", type: "bool" },
        { internalType: "bytes", name: "ret", type: "bytes" },
    ],
    name: "DelegateAndRevert",
    type: "error",
} as const;
export const FailedOp = {
    inputs: [
        { internalType: "uint256", name: "opIndex", type: "uint256" },
        { internalType: "string", name: "reason", type: "string" },
    ],
    name: "FailedOp",
    type: "error",
} as const;
export const FailedOpWithRevert = {
    inputs: [
        { internalType: "uint256", name: "opIndex", type: "uint256" },
        { internalType: "string", name: "reason", type: "string" },
        { internalType: "bytes", name: "inner", type: "bytes" },
    ],
    name: "FailedOpWithRevert",
    type: "error",
} as const;
export const PostOpReverted = {
    inputs: [{ internalType: "bytes", name: "returnData", type: "bytes" }],
    name: "PostOpReverted",
    type: "error",
} as const;
export const SenderAddressResult = {
    inputs: [{ internalType: "address", name: "sender", type: "address" }],
    name: "SenderAddressResult",
    type: "error",
} as const;
export const SignatureValidationFailed = {
    inputs: [{ internalType: "address", name: "aggregator", type: "address" }],
    name: "SignatureValidationFailed",
    type: "error",
} as const;
export const AccountDeployed = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "bytes32", name: "userOpHash", type: "bytes32" },
        { indexed: true, internalType: "address", name: "sender", type: "address" },
        { indexed: false, internalType: "address", name: "factory", type: "address" },
        { indexed: false, internalType: "address", name: "paymaster", type: "address" },
    ],
    name: "AccountDeployed",
    type: "event",
} as const;
export const BeforeExecution = { anonymous: false, inputs: [], name: "BeforeExecution", type: "event" } as const;
export const Deposited = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "address", name: "account", type: "address" },
        { indexed: false, internalType: "uint256", name: "totalDeposit", type: "uint256" },
    ],
    name: "Deposited",
    type: "event",
} as const;
export const PostOpRevertReason = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "bytes32", name: "userOpHash", type: "bytes32" },
        { indexed: true, internalType: "address", name: "sender", type: "address" },
        { indexed: false, internalType: "uint256", name: "nonce", type: "uint256" },
        { indexed: false, internalType: "bytes", name: "revertReason", type: "bytes" },
    ],
    name: "PostOpRevertReason",
    type: "event",
} as const;
export const SignatureAggregatorChanged = {
    anonymous: false,
    inputs: [{ indexed: true, internalType: "address", name: "aggregator", type: "address" }],
    name: "SignatureAggregatorChanged",
    type: "event",
} as const;
export const StakeLocked = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "address", name: "account", type: "address" },
        { indexed: false, internalType: "uint256", name: "totalStaked", type: "uint256" },
        { indexed: false, internalType: "uint256", name: "unstakeDelaySec", type: "uint256" },
    ],
    name: "StakeLocked",
    type: "event",
} as const;
export const StakeUnlocked = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "address", name: "account", type: "address" },
        { indexed: false, internalType: "uint256", name: "withdrawTime", type: "uint256" },
    ],
    name: "StakeUnlocked",
    type: "event",
} as const;
export const StakeWithdrawn = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "address", name: "account", type: "address" },
        { indexed: false, internalType: "address", name: "withdrawAddress", type: "address" },
        { indexed: false, internalType: "uint256", name: "amount", type: "uint256" },
    ],
    name: "StakeWithdrawn",
    type: "event",
} as const;
export const UserOperationEvent = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "bytes32", name: "userOpHash", type: "bytes32" },
        { indexed: true, internalType: "address", name: "sender", type: "address" },
        { indexed: true, internalType: "address", name: "paymaster", type: "address" },
        { indexed: false, internalType: "uint256", name: "nonce", type: "uint256" },
        { indexed: false, internalType: "bool", name: "success", type: "bool" },
        { indexed: false, internalType: "uint256", name: "actualGasCost", type: "uint256" },
        { indexed: false, internalType: "uint256", name: "actualGasUsed", type: "uint256" },
    ],
    name: "UserOperationEvent",
    type: "event",
} as const;
export const UserOperationPrefundTooLow = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "bytes32", name: "userOpHash", type: "bytes32" },
        { indexed: true, internalType: "address", name: "sender", type: "address" },
        { indexed: false, internalType: "uint256", name: "nonce", type: "uint256" },
    ],
    name: "UserOperationPrefundTooLow",
    type: "event",
} as const;
export const UserOperationRevertReason = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "bytes32", name: "userOpHash", type: "bytes32" },
        { indexed: true, internalType: "address", name: "sender", type: "address" },
        { indexed: false, internalType: "uint256", name: "nonce", type: "uint256" },
        { indexed: false, internalType: "bytes", name: "revertReason", type: "bytes" },
    ],
    name: "UserOperationRevertReason",
    type: "event",
} as const;
export const Withdrawn = {
    anonymous: false,
    inputs: [
        { indexed: true, internalType: "address", name: "account", type: "address" },
        { indexed: false, internalType: "address", name: "withdrawAddress", type: "address" },
        { indexed: false, internalType: "uint256", name: "amount", type: "uint256" },
    ],
    name: "Withdrawn",
    type: "event",
} as const;
export const addStake = {
    inputs: [{ internalType: "uint32", name: "_unstakeDelaySec", type: "uint32" }],
    name: "addStake",
    outputs: [],
    stateMutability: "payable",
    type: "function",
} as const;
export const balanceOf = {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "balanceOf",
    outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
    stateMutability: "view",
    type: "function",
} as const;
export const delegateAndRevert = {
    inputs: [
        { internalType: "address", name: "target", type: "address" },
        { internalType: "bytes", name: "data", type: "bytes" },
    ],
    name: "delegateAndRevert",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const depositTo = {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "depositTo",
    outputs: [],
    stateMutability: "payable",
    type: "function",
} as const;
export const getDepositInfo = {
    inputs: [{ internalType: "address", name: "account", type: "address" }],
    name: "getDepositInfo",
    outputs: [
        {
            components: [
                { internalType: "uint256", name: "deposit", type: "uint256" },
                { internalType: "bool", name: "staked", type: "bool" },
                { internalType: "uint112", name: "stake", type: "uint112" },
                { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" },
                { internalType: "uint48", name: "withdrawTime", type: "uint48" },
            ],
            internalType: "struct IStakeManager.DepositInfo",
            name: "info",
            type: "tuple",
        },
    ],
    stateMutability: "view",
    type: "function",
} as const;
export const getNonce = {
    inputs: [
        { internalType: "address", name: "sender", type: "address" },
        { internalType: "uint192", name: "key", type: "uint192" },
    ],
    name: "getNonce",
    outputs: [{ internalType: "uint256", name: "nonce", type: "uint256" }],
    stateMutability: "view",
    type: "function",
} as const;
export const getSenderAddress = {
    inputs: [{ internalType: "bytes", name: "initCode", type: "bytes" }],
    name: "getSenderAddress",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const getUserOpHash = {
    inputs: [
        {
            components: [
                { internalType: "address", name: "sender", type: "address" },
                { internalType: "uint256", name: "nonce", type: "uint256" },
                { internalType: "bytes", name: "initCode", type: "bytes" },
                { internalType: "bytes", name: "callData", type: "bytes" },
                { internalType: "bytes32", name: "accountGasLimits", type: "bytes32" },
                { internalType: "uint256", name: "preVerificationGas", type: "uint256" },
                { internalType: "bytes32", name: "gasFees", type: "bytes32" },
                { internalType: "bytes", name: "paymasterAndData", type: "bytes" },
                { internalType: "bytes", name: "signature", type: "bytes" },
            ],
            internalType: "struct PackedUserOperation",
            name: "userOp",
            type: "tuple",
        },
    ],
    name: "getUserOpHash",
    outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }],
    stateMutability: "view",
    type: "function",
} as const;
export const handleAggregatedOps = {
    inputs: [
        {
            components: [
                {
                    components: [
                        { internalType: "address", name: "sender", type: "address" },
                        { internalType: "uint256", name: "nonce", type: "uint256" },
                        { internalType: "bytes", name: "initCode", type: "bytes" },
                        { internalType: "bytes", name: "callData", type: "bytes" },
                        { internalType: "bytes32", name: "accountGasLimits", type: "bytes32" },
                        { internalType: "uint256", name: "preVerificationGas", type: "uint256" },
                        { internalType: "bytes32", name: "gasFees", type: "bytes32" },
                        { internalType: "bytes", name: "paymasterAndData", type: "bytes" },
                        { internalType: "bytes", name: "signature", type: "bytes" },
                    ],
                    internalType: "struct PackedUserOperation[]",
                    name: "userOps",
                    type: "tuple[]",
                },
                { internalType: "contract IAggregator", name: "aggregator", type: "address" },
                { internalType: "bytes", name: "signature", type: "bytes" },
            ],
            internalType: "struct IEntryPoint.UserOpsPerAggregator[]",
            name: "opsPerAggregator",
            type: "tuple[]",
        },
        { internalType: "address payable", name: "beneficiary", type: "address" },
    ],
    name: "handleAggregatedOps",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const handleOps = {
    inputs: [
        {
            components: [
                { internalType: "address", name: "sender", type: "address" },
                { internalType: "uint256", name: "nonce", type: "uint256" },
                { internalType: "bytes", name: "initCode", type: "bytes" },
                { internalType: "bytes", name: "callData", type: "bytes" },
                { internalType: "bytes32", name: "accountGasLimits", type: "bytes32" },
                { internalType: "uint256", name: "preVerificationGas", type: "uint256" },
                { internalType: "bytes32", name: "gasFees", type: "bytes32" },
                { internalType: "bytes", name: "paymasterAndData", type: "bytes" },
                { internalType: "bytes", name: "signature", type: "bytes" },
            ],
            internalType: "struct PackedUserOperation[]",
            name: "ops",
            type: "tuple[]",
        },
        { internalType: "address payable", name: "beneficiary", type: "address" },
    ],
    name: "handleOps",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const incrementNonce = {
    inputs: [{ internalType: "uint192", name: "key", type: "uint192" }],
    name: "incrementNonce",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const unlockStake = {
    inputs: [],
    name: "unlockStake",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const withdrawStake = {
    inputs: [{ internalType: "address payable", name: "withdrawAddress", type: "address" }],
    name: "withdrawStake",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const withdrawTo = {
    inputs: [
        { internalType: "address payable", name: "withdrawAddress", type: "address" },
        { internalType: "uint256", name: "withdrawAmount", type: "uint256" },
    ],
    name: "withdrawTo",
    outputs: [],
    stateMutability: "nonpayable",
    type: "function",
} as const;
export const functions = [
    addStake,
    balanceOf,
    delegateAndRevert,
    depositTo,
    getDepositInfo,
    getNonce,
    getSenderAddress,
    getUserOpHash,
    handleAggregatedOps,
    handleOps,
    incrementNonce,
    unlockStake,
    withdrawStake,
    withdrawTo,
] as const;
export const events = [
    AccountDeployed,
    BeforeExecution,
    Deposited,
    PostOpRevertReason,
    SignatureAggregatorChanged,
    StakeLocked,
    StakeUnlocked,
    StakeWithdrawn,
    UserOperationEvent,
    UserOperationPrefundTooLow,
    UserOperationRevertReason,
    Withdrawn,
] as const;
export const errors = [
    DelegateAndRevert,
    FailedOp,
    FailedOpWithRevert,
    PostOpReverted,
    SenderAddressResult,
    SignatureValidationFailed,
] as const;
export const abi = [...functions, ...events, ...errors] as const;

export const IEntryPoint = {
    abi,
};
