UNPKG

viem

Version:

TypeScript Interface for Ethereum

8,324 lines • 264 kB
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.all = exports.zone = exports.earn = exports.core = exports.zoneVerifier = exports.zoneMessenger = exports.zoneOutbox = exports.earnRouterCallbackData = exports.vedaEngine = exports.erc4626EngineFactory = exports.erc4626Engine = exports.earnVault = exports.earnRouter = exports.earnMerkleRewardDistributor = exports.earnFees = exports.earnFactory = exports.earnEngineInKindDeposit = exports.earnEngineAsyncRedeem = exports.earnEngine = exports.earnContributionController = exports.zonePortal = exports.zoneFactory = exports.validatorConfig = exports.validatorConfigV2 = exports.tip403Registry = exports.tip20 = exports.tip20Factory = exports.tip20ChannelReserve = exports.feeAmm = exports.feeManager = exports.storageCredits = exports.stablecoinDex = exports.signatureVerifier = exports.receivePolicyGuard = exports.nonce = exports.currentCommittee = exports.nativeMultisig = exports.addressRegistry = exports.accountKeychain = void 0;
exports.accountKeychain = [
    {
        name: 'authorizeKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'uint8', name: 'signatureType' },
            { type: 'uint64', name: 'expiry' },
            { type: 'bool', name: 'enforceLimits' },
            {
                type: 'tuple[]',
                name: 'limits',
                components: [
                    { type: 'address', name: 'token' },
                    { type: 'uint256', name: 'amount' },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'authorizeKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'uint8', name: 'signatureType' },
            {
                type: 'tuple',
                name: 'config',
                components: [
                    { type: 'uint64', name: 'expiry' },
                    { type: 'bool', name: 'enforceLimits' },
                    {
                        type: 'tuple[]',
                        name: 'limits',
                        components: [
                            { type: 'address', name: 'token' },
                            { type: 'uint256', name: 'amount' },
                            { type: 'uint64', name: 'period' },
                        ],
                    },
                    { type: 'bool', name: 'allowAnyCalls' },
                    {
                        type: 'tuple[]',
                        name: 'allowedCalls',
                        components: [
                            { type: 'address', name: 'target' },
                            {
                                type: 'tuple[]',
                                name: 'selectorRules',
                                components: [
                                    { type: 'bytes4', name: 'selector' },
                                    { type: 'address[]', name: 'recipients' },
                                ],
                            },
                        ],
                    },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'authorizeKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'uint8', name: 'signatureType' },
            {
                type: 'tuple',
                name: 'config',
                components: [
                    { type: 'uint64', name: 'expiry' },
                    { type: 'bool', name: 'enforceLimits' },
                    {
                        type: 'tuple[]',
                        name: 'limits',
                        components: [
                            { type: 'address', name: 'token' },
                            { type: 'uint256', name: 'amount' },
                            { type: 'uint64', name: 'period' },
                        ],
                    },
                    { type: 'bool', name: 'allowAnyCalls' },
                    {
                        type: 'tuple[]',
                        name: 'allowedCalls',
                        components: [
                            { type: 'address', name: 'target' },
                            {
                                type: 'tuple[]',
                                name: 'selectorRules',
                                components: [
                                    { type: 'bytes4', name: 'selector' },
                                    { type: 'address[]', name: 'recipients' },
                                ],
                            },
                        ],
                    },
                ],
            },
            { type: 'bytes32', name: 'witness' },
        ],
        outputs: [],
    },
    {
        name: 'authorizeAdminKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'uint8', name: 'signatureType' },
            { type: 'bytes32', name: 'witness' },
        ],
        outputs: [],
    },
    {
        name: 'burnKeyAuthorizationWitness',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bytes32', name: 'witness' }],
        outputs: [],
    },
    {
        name: 'revokeKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'keyId' }],
        outputs: [],
    },
    {
        name: 'updateSpendingLimit',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'address', name: 'token' },
            { type: 'uint256', name: 'newLimit' },
        ],
        outputs: [],
    },
    {
        name: 'setAllowedCalls',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            {
                type: 'tuple[]',
                name: 'scopes',
                components: [
                    { type: 'address', name: 'target' },
                    {
                        type: 'tuple[]',
                        name: 'selectorRules',
                        components: [
                            { type: 'bytes4', name: 'selector' },
                            { type: 'address[]', name: 'recipients' },
                        ],
                    },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'removeAllowedCalls',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'keyId' },
            { type: 'address', name: 'target' },
        ],
        outputs: [],
    },
    {
        name: 'getKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'address', name: 'keyId' },
        ],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'uint8', name: 'signatureType' },
                    { type: 'address', name: 'keyId' },
                    { type: 'uint64', name: 'expiry' },
                    { type: 'bool', name: 'enforceLimits' },
                    { type: 'bool', name: 'isRevoked' },
                ],
            },
        ],
    },
    {
        name: 'getRemainingLimit',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'address', name: 'keyId' },
            { type: 'address', name: 'token' },
        ],
        outputs: [{ type: 'uint256', name: 'remaining' }],
    },
    {
        name: 'getRemainingLimitWithPeriod',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'address', name: 'keyId' },
            { type: 'address', name: 'token' },
        ],
        outputs: [
            { type: 'uint256', name: 'remaining' },
            { type: 'uint64', name: 'periodEnd' },
        ],
    },
    {
        name: 'getAllowedCalls',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'address', name: 'keyId' },
        ],
        outputs: [
            { type: 'bool', name: 'isScoped' },
            {
                type: 'tuple[]',
                name: 'scopes',
                components: [
                    { type: 'address', name: 'target' },
                    {
                        type: 'tuple[]',
                        name: 'selectorRules',
                        components: [
                            { type: 'bytes4', name: 'selector' },
                            { type: 'address[]', name: 'recipients' },
                        ],
                    },
                ],
            },
        ],
    },
    {
        name: 'isKeyAuthorizationWitnessBurned',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bytes32', name: 'witness' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'isAdminKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'address', name: 'keyId' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'getTransactionKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'KeyAuthorized',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'publicKey', indexed: true },
            { type: 'uint8', name: 'signatureType' },
            { type: 'uint64', name: 'expiry' },
        ],
    },
    {
        name: 'AdminKeyAuthorized',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'publicKey', indexed: true },
        ],
    },
    {
        name: 'KeyRevoked',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'publicKey', indexed: true },
        ],
    },
    {
        name: 'SpendingLimitUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'publicKey', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint256', name: 'newLimit' },
        ],
    },
    {
        name: 'AccessKeySpend',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'publicKey', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint256', name: 'amount' },
            { type: 'uint256', name: 'remainingLimit' },
        ],
    },
    {
        name: 'KeyAuthorizationWitness',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'bytes32', name: 'witness', indexed: true },
        ],
    },
    {
        name: 'KeyAuthorizationWitnessBurned',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'bytes32', name: 'witness', indexed: true },
        ],
    },
    { name: 'UnauthorizedCaller', type: 'error', inputs: [] },
    { name: 'KeyAlreadyExists', type: 'error', inputs: [] },
    { name: 'KeyNotFound', type: 'error', inputs: [] },
    { name: 'KeyExpired', type: 'error', inputs: [] },
    { name: 'SpendingLimitExceeded', type: 'error', inputs: [] },
    { name: 'InvalidSpendingLimit', type: 'error', inputs: [] },
    { name: 'InvalidSignatureType', type: 'error', inputs: [] },
    { name: 'ZeroPublicKey', type: 'error', inputs: [] },
    { name: 'ExpiryInPast', type: 'error', inputs: [] },
    { name: 'KeyAlreadyRevoked', type: 'error', inputs: [] },
    {
        name: 'SignatureTypeMismatch',
        type: 'error',
        inputs: [
            { type: 'uint8', name: 'expected' },
            { type: 'uint8', name: 'actual' },
        ],
    },
    { name: 'CallNotAllowed', type: 'error', inputs: [] },
    { name: 'InvalidCallScope', type: 'error', inputs: [] },
    { name: 'InvalidKeyId', type: 'error', inputs: [] },
    { name: 'InvalidKeyAuthorizationWitness', type: 'error', inputs: [] },
    { name: 'KeyAuthorizationWitnessAlreadyBurned', type: 'error', inputs: [] },
    {
        name: 'LegacyAuthorizeKeySelectorChanged',
        type: 'error',
        inputs: [{ type: 'bytes4', name: 'newSelector' }],
    },
];
exports.addressRegistry = [
    {
        name: 'registerVirtualMaster',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bytes32', name: 'salt' }],
        outputs: [{ type: 'bytes4', name: 'masterId' }],
    },
    {
        name: 'getMaster',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes4', name: 'masterId' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'resolveRecipient',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'to' }],
        outputs: [{ type: 'address', name: 'effectiveRecipient' }],
    },
    {
        name: 'resolveVirtualAddress',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'virtualAddr' }],
        outputs: [{ type: 'address', name: 'master' }],
    },
    {
        name: 'isVirtualAddress',
        type: 'function',
        stateMutability: 'pure',
        inputs: [{ type: 'address', name: 'addr' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'decodeVirtualAddress',
        type: 'function',
        stateMutability: 'pure',
        inputs: [{ type: 'address', name: 'addr' }],
        outputs: [
            { type: 'bool', name: 'isVirtual' },
            { type: 'bytes4', name: 'masterId' },
            { type: 'bytes6', name: 'userTag' },
        ],
    },
    {
        name: 'isImplicitlyApproved',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'addr' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'MasterRegistered',
        type: 'event',
        inputs: [
            { type: 'bytes4', name: 'masterId', indexed: true },
            { type: 'address', name: 'masterAddress', indexed: true },
        ],
    },
    {
        name: 'MasterIdCollision',
        type: 'error',
        inputs: [{ type: 'address', name: 'master' }],
    },
    { name: 'InvalidMasterAddress', type: 'error', inputs: [] },
    { name: 'ProofOfWorkFailed', type: 'error', inputs: [] },
    { name: 'VirtualAddressUnregistered', type: 'error', inputs: [] },
];
exports.nativeMultisig = [
    {
        name: 'deriveAccount',
        type: 'function',
        stateMutability: 'pure',
        inputs: [
            { type: 'bytes32', name: 'salt' },
            { type: 'uint8', name: 'threshold' },
            {
                type: 'tuple[]',
                name: 'owners',
                components: [
                    { type: 'address', name: 'owner' },
                    { type: 'uint8', name: 'weight' },
                ],
            },
        ],
        outputs: [{ type: 'address', name: 'account' }],
    },
    {
        name: 'getConfigCommitment',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'bytes32', name: 'commitment' }],
    },
    {
        name: 'updateConfig',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'current',
                components: [
                    { type: 'bytes32', name: 'salt' },
                    { type: 'uint64', name: 'version' },
                    { type: 'uint8', name: 'threshold' },
                    {
                        type: 'tuple[]',
                        name: 'owners',
                        components: [
                            { type: 'address', name: 'owner' },
                            { type: 'uint8', name: 'weight' },
                        ],
                    },
                ],
            },
            { type: 'uint8', name: 'threshold' },
            {
                type: 'tuple[]',
                name: 'owners',
                components: [
                    { type: 'address', name: 'owner' },
                    { type: 'uint8', name: 'weight' },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'MultisigConfigUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'bytes32', name: 'salt' },
            { type: 'uint64', name: 'version' },
            { type: 'uint8', name: 'threshold' },
            {
                type: 'tuple[]',
                name: 'owners',
                components: [
                    { type: 'address', name: 'owner' },
                    { type: 'uint8', name: 'weight' },
                ],
            },
        ],
    },
    { name: 'InvalidAccount', type: 'error', inputs: [] },
    { name: 'InvalidConfig', type: 'error', inputs: [] },
    { name: 'InvalidThreshold', type: 'error', inputs: [] },
    { name: 'InvalidMultisigOwner', type: 'error', inputs: [] },
    { name: 'InvalidWeight', type: 'error', inputs: [] },
    { name: 'TooManyOwners', type: 'error', inputs: [] },
    { name: 'DuplicateOwner', type: 'error', inputs: [] },
    { name: 'InvalidOwnerOrder', type: 'error', inputs: [] },
    { name: 'UnauthorizedMultisigCaller', type: 'error', inputs: [] },
];
exports.currentCommittee = [
    {
        name: 'getCommitteeMembers',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            { type: 'uint64', name: 'epoch' },
            { type: 'bytes32[]', name: 'publicKeys' },
        ],
    },
    {
        name: 'setCommitteeMembers',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'epoch' },
            { type: 'bytes32[]', name: 'publicKeys' },
        ],
        outputs: [],
    },
    { name: 'Unauthorized', type: 'error', inputs: [] },
];
exports.nonce = [
    {
        name: 'getNonce',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'uint256', name: 'nonceKey' },
        ],
        outputs: [{ type: 'uint64', name: 'nonce' }],
    },
    {
        name: 'NonceIncremented',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'uint256', name: 'nonceKey', indexed: true },
            { type: 'uint64', name: 'newNonce' },
        ],
    },
    { name: 'ProtocolNonceNotSupported', type: 'error', inputs: [] },
    { name: 'InvalidNonceKey', type: 'error', inputs: [] },
    { name: 'NonceOverflow', type: 'error', inputs: [] },
    { name: 'ExpiringNonceReplay', type: 'error', inputs: [] },
    { name: 'ExpiringNonceSetFull', type: 'error', inputs: [] },
    { name: 'InvalidExpiringNonceExpiry', type: 'error', inputs: [] },
];
exports.receivePolicyGuard = [
    {
        name: 'balanceOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes', name: 'receipt' }],
        outputs: [{ type: 'uint256', name: 'amount' }],
    },
    {
        name: 'claim',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'bytes', name: 'receipt' },
        ],
        outputs: [],
    },
    {
        name: 'burnBlockedReceipt',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bytes', name: 'receipt' }],
        outputs: [],
    },
    {
        name: 'TransferBlocked',
        type: 'event',
        inputs: [
            { type: 'address', name: 'token', indexed: true },
            { type: 'address', name: 'receiver', indexed: true },
            { type: 'uint64', name: 'blockedNonce', indexed: true },
            { type: 'uint256', name: 'amount' },
            { type: 'uint8', name: 'receiptVersion' },
            { type: 'bytes', name: 'receipt' },
        ],
    },
    {
        name: 'ReceiptClaimed',
        type: 'event',
        inputs: [
            { type: 'address', name: 'token', indexed: true },
            { type: 'address', name: 'receiver', indexed: true },
            { type: 'uint64', name: 'blockedNonce', indexed: true },
            { type: 'uint64', name: 'blockedAt' },
            { type: 'uint8', name: 'receiptVersion' },
            { type: 'address', name: 'originator' },
            { type: 'address', name: 'recipient' },
            { type: 'address', name: 'recoveryAuthority' },
            { type: 'address', name: 'caller' },
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'ReceiptBurned',
        type: 'event',
        inputs: [
            { type: 'address', name: 'token', indexed: true },
            { type: 'address', name: 'receiver', indexed: true },
            { type: 'uint64', name: 'blockedNonce', indexed: true },
            { type: 'uint64', name: 'blockedAt' },
            { type: 'uint8', name: 'receiptVersion' },
            { type: 'address', name: 'originator' },
            { type: 'address', name: 'recipient' },
            { type: 'address', name: 'recoveryAuthority' },
            { type: 'address', name: 'caller' },
            { type: 'uint256', name: 'amount' },
        ],
    },
    { name: 'InvalidReceipt', type: 'error', inputs: [] },
    { name: 'InvalidClaimAddress', type: 'error', inputs: [] },
    { name: 'UnauthorizedClaimer', type: 'error', inputs: [] },
    { name: 'AddressReserved', type: 'error', inputs: [] },
];
exports.signatureVerifier = [
    {
        name: 'recover',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'bytes32', name: 'hash' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [{ type: 'address', name: 'signer' }],
    },
    {
        name: 'verify',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'signer' },
            { type: 'bytes32', name: 'hash' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'verifyKeychain',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bytes32', name: 'hash' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'verifyKeychainAdmin',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bytes32', name: 'hash' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [{ type: 'bool' }],
    },
    { name: 'InvalidFormat', type: 'error', inputs: [] },
    { name: 'InvalidSignature', type: 'error', inputs: [] },
];
exports.stablecoinDex = [
    {
        name: 'createPair',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'base' }],
        outputs: [{ type: 'bytes32', name: 'key' }],
    },
    {
        name: 'place',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'bool', name: 'isBid' },
            { type: 'int16', name: 'tick' },
        ],
        outputs: [{ type: 'uint128', name: 'orderId' }],
    },
    {
        name: 'placeFlip',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'bool', name: 'isBid' },
            { type: 'int16', name: 'tick' },
            { type: 'int16', name: 'flipTick' },
        ],
        outputs: [{ type: 'uint128', name: 'orderId' }],
    },
    {
        name: 'cancel',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint128', name: 'orderId' }],
        outputs: [],
    },
    {
        name: 'cancelStaleOrder',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint128', name: 'orderId' }],
        outputs: [],
    },
    {
        name: 'swapExactAmountIn',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'tokenIn' },
            { type: 'address', name: 'tokenOut' },
            { type: 'uint128', name: 'amountIn' },
            { type: 'uint128', name: 'minAmountOut' },
        ],
        outputs: [{ type: 'uint128', name: 'amountOut' }],
    },
    {
        name: 'swapExactAmountOut',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'tokenIn' },
            { type: 'address', name: 'tokenOut' },
            { type: 'uint128', name: 'amountOut' },
            { type: 'uint128', name: 'maxAmountIn' },
        ],
        outputs: [{ type: 'uint128', name: 'amountIn' }],
    },
    {
        name: 'quoteSwapExactAmountIn',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'tokenIn' },
            { type: 'address', name: 'tokenOut' },
            { type: 'uint128', name: 'amountIn' },
        ],
        outputs: [{ type: 'uint128', name: 'amountOut' }],
    },
    {
        name: 'quoteSwapExactAmountOut',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'tokenIn' },
            { type: 'address', name: 'tokenOut' },
            { type: 'uint128', name: 'amountOut' },
        ],
        outputs: [{ type: 'uint128', name: 'amountIn' }],
    },
    {
        name: 'balanceOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'user' },
            { type: 'address', name: 'token' },
        ],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'withdraw',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
        ],
        outputs: [],
    },
    {
        name: 'getOrder',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint128', name: 'orderId' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'uint128', name: 'orderId' },
                    { type: 'address', name: 'maker' },
                    { type: 'bytes32', name: 'bookKey' },
                    { type: 'bool', name: 'isBid' },
                    { type: 'int16', name: 'tick' },
                    { type: 'uint128', name: 'amount' },
                    { type: 'uint128', name: 'remaining' },
                    { type: 'uint128', name: 'prev' },
                    { type: 'uint128', name: 'next' },
                    { type: 'bool', name: 'isFlip' },
                    { type: 'int16', name: 'flipTick' },
                ],
            },
        ],
    },
    {
        name: 'getTickLevel',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'base' },
            { type: 'int16', name: 'tick' },
            { type: 'bool', name: 'isBid' },
        ],
        outputs: [
            { type: 'uint128', name: 'head' },
            { type: 'uint128', name: 'tail' },
            { type: 'uint128', name: 'totalLiquidity' },
        ],
    },
    {
        name: 'pairKey',
        type: 'function',
        stateMutability: 'pure',
        inputs: [
            { type: 'address', name: 'tokenA' },
            { type: 'address', name: 'tokenB' },
        ],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'nextOrderId',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'books',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'pairKey' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'address', name: 'base' },
                    { type: 'address', name: 'quote' },
                    { type: 'int16', name: 'bestBidTick' },
                    { type: 'int16', name: 'bestAskTick' },
                ],
            },
        ],
    },
    {
        name: 'bookIndexForKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'bookKey' }],
        outputs: [
            { type: 'bool', name: 'set' },
            { type: 'uint32', name: 'index' },
        ],
    },
    {
        name: 'bookKeyForIndex',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint32', name: 'index' }],
        outputs: [{ type: 'bytes32', name: 'bookKey' }],
    },
    {
        name: 'setBookIndex',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint32', name: 'index' }],
        outputs: [],
    },
    {
        name: 'storageCredits',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'user' }],
        outputs: [{ type: 'uint64', name: 'credits' }],
    },
    {
        name: 'MIN_TICK',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'int16' }],
    },
    {
        name: 'MAX_TICK',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'int16' }],
    },
    {
        name: 'TICK_SPACING',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'int16' }],
    },
    {
        name: 'PRICE_SCALE',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'MIN_ORDER_AMOUNT',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'MIN_PRICE',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'MAX_PRICE',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'tickToPrice',
        type: 'function',
        stateMutability: 'pure',
        inputs: [{ type: 'int16', name: 'tick' }],
        outputs: [{ type: 'uint32', name: 'price' }],
    },
    {
        name: 'priceToTick',
        type: 'function',
        stateMutability: 'pure',
        inputs: [{ type: 'uint32', name: 'price' }],
        outputs: [{ type: 'int16', name: 'tick' }],
    },
    {
        name: 'PairCreated',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'key', indexed: true },
            { type: 'address', name: 'base', indexed: true },
            { type: 'address', name: 'quote', indexed: true },
        ],
    },
    {
        name: 'OrderPlaced',
        type: 'event',
        inputs: [
            { type: 'uint128', name: 'orderId', indexed: true },
            { type: 'address', name: 'maker', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint128', name: 'amount' },
            { type: 'bool', name: 'isBid' },
            { type: 'int16', name: 'tick' },
            { type: 'bool', name: 'isFlipOrder' },
            { type: 'int16', name: 'flipTick' },
        ],
    },
    {
        name: 'OrderFilled',
        type: 'event',
        inputs: [
            { type: 'uint128', name: 'orderId', indexed: true },
            { type: 'address', name: 'maker', indexed: true },
            { type: 'address', name: 'taker', indexed: true },
            { type: 'uint128', name: 'amountFilled' },
            { type: 'bool', name: 'partialFill' },
        ],
    },
    {
        name: 'OrderFlipped',
        type: 'event',
        inputs: [
            { type: 'uint128', name: 'orderId', indexed: true },
            { type: 'address', name: 'maker', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint128', name: 'amount' },
            { type: 'bool', name: 'isBid' },
            { type: 'int16', name: 'tick' },
            { type: 'int16', name: 'flipTick' },
        ],
    },
    {
        name: 'FlipFailed',
        type: 'event',
        inputs: [
            { type: 'uint128', name: 'orderId', indexed: true },
            { type: 'address', name: 'maker', indexed: true },
            { type: 'bytes4', name: 'reason' },
        ],
    },
    {
        name: 'OrderCancelled',
        type: 'event',
        inputs: [{ type: 'uint128', name: 'orderId', indexed: true }],
    },
    { name: 'Unauthorized', type: 'error', inputs: [] },
    { name: 'PairDoesNotExist', type: 'error', inputs: [] },
    { name: 'PairAlreadyExists', type: 'error', inputs: [] },
    { name: 'OrderDoesNotExist', type: 'error', inputs: [] },
    { name: 'IdenticalTokens', type: 'error', inputs: [] },
    { name: 'InvalidToken', type: 'error', inputs: [] },
    {
        name: 'TickOutOfBounds',
        type: 'error',
        inputs: [{ type: 'int16', name: 'tick' }],
    },
    { name: 'InvalidTick', type: 'error', inputs: [] },
    { name: 'InvalidFlipTick', type: 'error', inputs: [] },
    { name: 'InsufficientBalance', type: 'error', inputs: [] },
    { name: 'InsufficientLiquidity', type: 'error', inputs: [] },
    { name: 'InsufficientOutput', type: 'error', inputs: [] },
    { name: 'MaxInputExceeded', type: 'error', inputs: [] },
    {
        name: 'BelowMinimumOrderSize',
        type: 'error',
        inputs: [{ type: 'uint128', name: 'amount' }],
    },
    { name: 'InvalidBaseToken', type: 'error', inputs: [] },
    { name: 'OrderNotStale', type: 'error', inputs: [] },
    { name: 'IndexAlreadySet', type: 'error', inputs: [] },
];
exports.storageCredits = [
    {
        name: 'balanceOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'modeOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'uint8' }],
    },
    {
        name: 'budgetOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'setMode',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint8', name: 'newMode' }],
        outputs: [],
    },
    {
        name: 'setBudget',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'credits' }],
        outputs: [],
    },
    { name: 'InvalidMode', type: 'error', inputs: [] },
    { name: 'OnlyDirectCall', type: 'error', inputs: [] },
];
exports.feeManager = [
    {
        name: 'userTokens',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'user' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'validatorTokens',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'validator' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'setUserToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [],
    },
    {
        name: 'setValidatorToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [],
    },
    {
        name: 'distributeFees',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'validator' },
            { type: 'address', name: 'token' },
        ],
        outputs: [],
    },
    {
        name: 'collectedFees',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'validator' },
            { type: 'address', name: 'token' },
        ],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'UserTokenSet',
        type: 'event',
        inputs: [
            { type: 'address', name: 'user', indexed: true },
            { type: 'address', name: 'token', indexed: true },
        ],
    },
    {
        name: 'ValidatorTokenSet',
        type: 'event',
        inputs: [
            { type: 'address', name: 'validator', indexed: true },
            { type: 'address', name: 'token', indexed: true },
        ],
    },
    {
        name: 'FeesDistributed',
        type: 'event',
        inputs: [
            { type: 'address', name: 'validator', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    { name: 'InvalidToken', type: 'error', inputs: [] },
    { name: 'InsufficientFeeTokenBalance', type: 'error', inputs: [] },
    { name: 'CannotChangeWithinBlock', type: 'error', inputs: [] },
];
exports.feeAmm = [
    {
        name: 'M',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'N',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'SCALE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'MIN_LIQUIDITY',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'getPoolId',
        type: 'function',
        stateMutability: 'pure',
        inputs: [
            { type: 'address', name: 'userToken' },
            { type: 'address', name: 'validatorToken' },
        ],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'getPool',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'userToken' },
            { type: 'address', name: 'validatorToken' },
        ],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'uint128', name: 'reserveUserToken' },
                    { type: 'uint128', name: 'reserveValidatorToken' },
                ],
            },
        ],
    },
    {
        name: 'pools',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'poolId' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'uint128', name: 'reserveUserToken' },
                    { type: 'uint128', name: 'reserveValidatorToken' },
                ],
            },
        ],
    },
    {
        name: 'mint',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'userToken' },
            { type: 'address', name: 'validatorToken' },
            { type: 'uint256', name: 'amountValidatorToken' },
            { type: 'address', name: 'to' },
        ],
        outputs: [{ type: 'uint256', name: 'liquidity' }],
    },
    {
        name: 'burn',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'userToken' },
            { type: 'address', name: 'validatorToken' },
            { type: 'uint256', name: 'liquidity' },
            { type: 'address', name: 'to' },
        ],
        outputs: [
            { type: 'uint256', name: 'amountUserToken' },
            { type: 'uint256', name: 'amountValidatorToken' },
        ],
    },
    {
        name: 'totalSupply',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'poolId' }],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'liquidityBalances',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'bytes32', name: 'poolId' },
            { type: 'address', name: 'user' },
        ],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'rebalanceSwap',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'userToken' },
            { type: 'address', name: 'validatorToken' },
            { type: 'uint256', name: 'amountOut' },
            { type: 'address', name: 'to' },
        ],
        outputs: [{ type: 'uint256', name: 'amountIn' }],
    },
    {
        name: 'Mint',
        type: 'event',
        inputs: [
            { type: 'address', name: 'sender' },
            { type: 'address', name: 'to', indexed: true },
            { type: 'address', name: 'userToken', indexed: true },
            { type: 'address', name: 'validatorToken', indexed: true },
            { type: 'uint256', name: 'amountValidatorToken' },
            { type: 'uint256', name: 'liquidity' },
        ],
    },
    {
        name: 'Burn',
        type: 'event',
        inputs: [
            { type: 'address', name: 'sender', indexed: true },
            { type: 'address', name: 'userToken', indexed: true },
            { type: 'address', name: 'validatorToken', indexed: true },
            { type: 'uint256', name: 'amountUserToken' },
            { type: 'uint256', name: 'amountValidatorToken' },
            { type: 'uint256', name: 'liquidity' },
            { type: 'address', name: 'to' },
        ],
    },
    {
        name: 'RebalanceSwap',
        type: 'event',
        inputs: [
            { type: 'address', name: 'userToken', indexed: true },
            { type: 'address', name: 'validatorToken', indexed: true },
            { type: 'address', name: 'swapper', indexed: true },
            { type: 'uint256', name: 'amountIn' },
            { type: 'uint256', name: 'amountOut' },
        ],
    },
    { name: 'IdenticalAddresses', type: 'error', inputs: [] },
    { name: 'InvalidToken', type: 'error', inputs: [] },
    { name: 'InsufficientLiquidity', type: 'error', inputs: [] },
    { name: 'InsufficientReserves', type: 'error', inputs: [] },
    { name: 'InvalidAmount', type: 'error', inputs: [] },
    { name: 'DivisionByZero', type: 'error', inputs: [] },
    { name: 'InvalidSwapCalculation', type: 'error', inputs: [] },
];
exports.tip20ChannelReserve = [
    {
        name: 'CLOSE_GRACE_PERIOD',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'VOUCHER_TYPEHASH',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'open',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'payee' },
            { type: 'address', name: 'operator' },
            { type: 'address', name: 'token' },
            { type: 'uint96', name: 'deposit' },
            { type: 'bytes32', name: 'salt' },
            { type: 'address', name: 'authorizedSigner' },
        ],
        outputs: [{ type: 'bytes32', name: 'channelId' }],
    },
    {
        name: 'settle',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
            { type: 'uint96', name: 'cumulativeAmount' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [],
    },
    {
        name: 'topUp',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
            { type: 'uint96', name: 'additionalDeposit' },
        ],
        outputs: [],
    },
    {
        name: 'close',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
            { type: 'uint96', name: 'cumulativeAmount' },
            { type: 'uint96', name: 'captureAmount' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [],
    },
    {
        name: 'requestClose',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'withdraw',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
        ],
        outputs: [],
    },
    {
        name: 'getChannel',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            {
                type: 'tuple',
                name: 'descriptor',
                components: [
                    { type: 'address', name: 'payer' },
                    { type: 'address', name: 'payee' },
                    { type: 'address', name: 'operator' },
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'salt' },
                    { type: 'address', name: 'authorizedSigner' },
                    { type: 'bytes32', name: 'expiringNonceHash' },
                ],
            },
        ],
        outputs: [
            {
                type: 'tuple',
                components: [
                    {
                        type: 'tuple',
                        name: 'descriptor',
                        components: [
                            { type: 'address', name: 'payer' },
                            { type: 'address', name: 'payee' },
                            { type: 'address', name: 'operator' },
                            { type: 'address', name: 'token' },
                            { type: 'bytes32', name: 'salt' },
                            { type: 'address', name: 'authorizedSigner' },
                            { type: 'bytes32', name: 'expiringNonceHash' },
                        ],
                    },
                    {
                        type: 'tuple',
                        name: 'state',
                        components: [
                            { type: 'uint96', name: 'settled' },
                            { type: 'uint96', name: 'deposit' },
                            { type: 'uint32', name: 'closeRequestedAt' },
                        ],
                    },
                ],
            },
        ],
    },
    {
        name: 'getChannelState',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'channelId' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'uint96', name: 'settled' },
                    { type: 'uint96', name: 'deposit' },
                    { type: 'uint32', name: 'closeRequestedAt' },
                ],
            },
        ],
    },
    {
        name: 'getChannelStatesBatch',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32[]', name: 'channelIds' }],
        outputs: [
            {
                type: 'tuple[]',
                components: [
                    { type: 'uint96', name: 'settled' },
                    { type: 'uint96', name: 'deposit' },
                    { type: 'uint32', name: 'closeRequestedAt' },
                ],
            },
        ],
    },
    {
        name: 'computeChannelId',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'payer' },
            { type: 'address', name: 'payee' },
            { type: 'address', name: 'operator' },
            { type: 'address', name: 'token' },
            { type: 'bytes32', name: 'salt' },
            { type: 'address', name: 'authorizedSigner' },
            { type: 'bytes32', name: 'expiringNonceHash' },
        ],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'getVoucherDigest',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'bytes32', name: 'channelId' },
            { type: 'uint96', name: 'cumulativeAmount' },
        ],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'domainSeparator',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'storageCredits',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'payer' }],
        outputs: [{ type: 'uint64', name: 'credits' }],
    },
    {
        name: 'ChannelOpened',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
            { type: 'address', name: 'operator' },
            { type: 'address', name: 'token' },
            { type: 'address', name: 'authorizedSigner' },
            { type: 'bytes32', name: 'salt' },
            { type: 'bytes32', name: 'expiringNonceHash' },
            { type: 'uint96', name: 'deposit' },
        ],
    },
    {
        name: 'Settled',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
            { type: 'uint96', name: 'cumulativeAmount' },
            { type: 'uint96', name: 'deltaPaid' },
            { type: 'uint96', name: 'newSettled' },
        ],
    },
    {
        name: 'TopUp',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
            { type: 'uint96', name: 'additionalDeposit' },
            { type: 'uint96', name: 'newDeposit' },
        ],
    },
    {
        name: 'CloseRequested',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
            { type: 'uint256', name: 'closeGraceEnd' },
        ],
    },
    {
        name: 'ChannelClosed',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
            { type: 'uint96', name: 'settledToPayee' },
            { type: 'uint96', name: 'refundedToPayer' },
        ],
    },
    {
        name: 'CloseRequestCancelled',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'channelId', indexed: true },
            { type: 'address', name: 'payer', indexed: true },
            { type: 'address', name: 'payee', indexed: true },
        ],
    },
    { name: 'ChannelAlreadyExists', type: 'error', inputs: [] },
    { name: 'ChannelNotFound', type: 'error', inputs: [] },
    { name: 'NotPayer', type: 'error', inputs: [] },
    { name: 'NotPayeeOrOperator', type: 'error', inputs: [] },
    { name: 'InvalidPayee', type: 'error', inputs: [] },
    { name: 'ZeroDeposit', type: 'error', inputs: [] },
    { name: 'ExpiringNonceHashNotSet', type: 'error', inputs: [] },
    { name: 'InvalidSignature', type: 'error', inputs: [] },
    { name: 'AmountExceedsDeposit', type: 'error', inputs: [] },
    { name: 'AmountNotIncreasing', type: 'error', inputs: [] },
    { name: 'CaptureAmountInvalid', type: 'error', inputs: [] },
    { name: 'CloseNotReady', type: 'error', inputs: [] },
    { name: 'DepositOverflow', type: 'error', inputs: [] },
];
exports.tip20Factory = [
    {
        name: 'createToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'string', name: 'name' },
            { type: 'string', name: 'symbol' },
            { type: 'string', name: 'currency' },
            { type: 'address', name: 'quoteToken' },
            { type: 'address', name: 'admin' },
            { type: 'bytes32', name: 'salt' },
        ],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'createToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'string', name: 'name' },
            { type: 'string', name: 'symbol' },
            { type: 'string', name: 'currency' },
            { type: 'address', name: 'quoteToken' },
            { type: 'address', name: 'admin' },
            { type: 'bytes32', name: 'salt' },
            { type: 'string', name: 'logoURI' },
        ],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'isTIP20',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'getTokenAddress',
        type: 'function',
        stateMutability: 'pure',
        inputs: [
            { type: 'address', name: 'sender' },
            { type: 'bytes32', name: 'salt' },
        ],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'TokenCreated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'token', indexed: true },
            { type: 'string', name: 'name' },
            { type: 'string', name: 'symbol' },
            { type: 'string', name: 'currency' },
            { type: 'address', name: 'quoteToken' },
            { type: 'address', name: 'admin' },
            { type: 'bytes32', name: 'salt' },
        ],
    },
    { name: 'AddressReserved', type: 'error', inputs: [] },
    { name: 'AddressNotReserved', type: 'error', inputs: [] },
    { name: 'InvalidQuoteToken', type: 'error', inputs: [] },
    {
        name: 'TokenAlreadyExists',
        type: 'error',
        inputs: [{ type: 'address', name: 'token' }],
    },
];
exports.tip20 = [
    {
        name: 'name',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'string' }],
    },
    {
        name: 'symbol',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'string' }],
    },
    {
        name: 'decimals',
        type: 'function',
        stateMutability: 'pure',
        inputs: [],
        outputs: [{ type: 'uint8' }],
    },
    {
        name: 'totalSupply',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'quoteToken',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'nextQuoteToken',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'balanceOf',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'transfer',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'approve',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'spender' },
            { type: 'uint256', name: 'amount' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'allowance',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'owner' },
            { type: 'address', name: 'spender' },
        ],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'transferFrom',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'from' },
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'mint',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
        ],
        outputs: [],
    },
    {
        name: 'burn',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint256', name: 'amount' }],
        outputs: [],
    },
    {
        name: 'currency',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'string' }],
    },
    {
        name: 'supplyCap',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'paused',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'transferPolicyId',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'logoURI',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'string' }],
    },
    {
        name: 'setLogoURI',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'string', name: 'newLogoURI' }],
        outputs: [],
    },
    {
        name: 'burnBlocked',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'from' },
            { type: 'uint256', name: 'amount' },
        ],
        outputs: [],
    },
    {
        name: 'mintWithMemo',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
        ],
        outputs: [],
    },
    {
        name: 'burnWithMemo',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint256', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
        ],
        outputs: [],
    },
    {
        name: 'transferWithMemo',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
        ],
        outputs: [],
    },
    {
        name: 'transferFromWithMemo',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'from' },
            { type: 'address', name: 'to' },
            { type: 'uint256', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'changeTransferPolicyId',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'newPolicyId' }],
        outputs: [],
    },
    {
        name: 'setSupplyCap',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint256', name: 'newSupplyCap' }],
        outputs: [],
    },
    {
        name: 'pause',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'unpause',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'setNextQuoteToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'newQuoteToken' }],
        outputs: [],
    },
    {
        name: 'completeQuoteTokenUpdate',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'PAUSE_ROLE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'UNPAUSE_ROLE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'ISSUER_ROLE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'BURN_BLOCKED_ROLE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'permit',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'owner' },
            { type: 'address', name: 'spender' },
            { type: 'uint256', name: 'value' },
            { type: 'uint256', name: 'deadline' },
            { type: 'uint8', name: 'v' },
            { type: 'bytes32', name: 'r' },
            { type: 'bytes32', name: 's' },
        ],
        outputs: [],
    },
    {
        name: 'nonces',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'owner' }],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'DOMAIN_SEPARATOR',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'distributeReward',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint256', name: 'amount' }],
        outputs: [],
    },
    {
        name: 'setRewardRecipient',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'recipient' }],
        outputs: [],
    },
    {
        name: 'claimRewards',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'optedInSupply',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'globalRewardPerToken',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'userRewardInfo',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'address', name: 'rewardRecipient' },
                    { type: 'uint256', name: 'rewardPerToken' },
                    { type: 'uint256', name: 'rewardBalance' },
                ],
            },
        ],
    },
    {
        name: 'getPendingRewards',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'Transfer',
        type: 'event',
        inputs: [
            { type: 'address', name: 'from', indexed: true },
            { type: 'address', name: 'to', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'Approval',
        type: 'event',
        inputs: [
            { type: 'address', name: 'owner', indexed: true },
            { type: 'address', name: 'spender', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'Mint',
        type: 'event',
        inputs: [
            { type: 'address', name: 'to', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'Burn',
        type: 'event',
        inputs: [
            { type: 'address', name: 'from', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'BurnBlocked',
        type: 'event',
        inputs: [
            { type: 'address', name: 'from', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'TransferWithMemo',
        type: 'event',
        inputs: [
            { type: 'address', name: 'from', indexed: true },
            { type: 'address', name: 'to', indexed: true },
            { type: 'uint256', name: 'amount' },
            { type: 'bytes32', name: 'memo', indexed: true },
        ],
    },
    {
        name: 'TransferPolicyUpdate',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'uint64', name: 'newPolicyId', indexed: true },
        ],
    },
    {
        name: 'SupplyCapUpdate',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'uint256', name: 'newSupplyCap', indexed: true },
        ],
    },
    {
        name: 'PauseStateUpdate',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'bool', name: 'isPaused' },
        ],
    },
    {
        name: 'NextQuoteTokenSet',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'address', name: 'nextQuoteToken', indexed: true },
        ],
    },
    {
        name: 'QuoteTokenUpdate',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'address', name: 'newQuoteToken', indexed: true },
        ],
    },
    {
        name: 'RewardDistributed',
        type: 'event',
        inputs: [
            { type: 'address', name: 'funder', indexed: true },
            { type: 'uint256', name: 'amount' },
        ],
    },
    {
        name: 'RewardRecipientSet',
        type: 'event',
        inputs: [
            { type: 'address', name: 'holder', indexed: true },
            { type: 'address', name: 'recipient', indexed: true },
        ],
    },
    {
        name: 'LogoURIUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'updater', indexed: true },
            { type: 'string', name: 'newLogoURI' },
        ],
    },
    {
        name: 'InsufficientBalance',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'available' },
            { type: 'uint256', name: 'required' },
            { type: 'address', name: 'token' },
        ],
    },
    { name: 'InsufficientAllowance', type: 'error', inputs: [] },
    { name: 'SupplyCapExceeded', type: 'error', inputs: [] },
    { name: 'InvalidSupplyCap', type: 'error', inputs: [] },
    { name: 'InvalidPayload', type: 'error', inputs: [] },
    { name: 'PolicyForbids', type: 'error', inputs: [] },
    { name: 'InvalidRecipient', type: 'error', inputs: [] },
    { name: 'ContractPaused', type: 'error', inputs: [] },
    { name: 'InvalidCurrency', type: 'error', inputs: [] },
    { name: 'InvalidQuoteToken', type: 'error', inputs: [] },
    { name: 'InvalidAmount', type: 'error', inputs: [] },
    { name: 'NoOptedInSupply', type: 'error', inputs: [] },
    { name: 'Unauthorized', type: 'error', inputs: [] },
    { name: 'ProtectedAddress', type: 'error', inputs: [] },
    { name: 'InvalidToken', type: 'error', inputs: [] },
    { name: 'Uninitialized', type: 'error', inputs: [] },
    { name: 'InvalidTransferPolicyId', type: 'error', inputs: [] },
    { name: 'PermitExpired', type: 'error', inputs: [] },
    { name: 'InvalidSignature', type: 'error', inputs: [] },
    { name: 'LogoURITooLong', type: 'error', inputs: [] },
    { name: 'InvalidLogoURI', type: 'error', inputs: [] },
    {
        name: 'hasRole',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bytes32', name: 'role' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'getRoleAdmin',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'role' }],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'grantRole',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'bytes32', name: 'role' },
            { type: 'address', name: 'account' },
        ],
        outputs: [],
    },
    {
        name: 'revokeRole',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'bytes32', name: 'role' },
            { type: 'address', name: 'account' },
        ],
        outputs: [],
    },
    {
        name: 'renounceRole',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bytes32', name: 'role' }],
        outputs: [],
    },
    {
        name: 'setRoleAdmin',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'bytes32', name: 'role' },
            { type: 'bytes32', name: 'adminRole' },
        ],
        outputs: [],
    },
    {
        name: 'RoleMembershipUpdated',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'role', indexed: true },
            { type: 'address', name: 'account', indexed: true },
            { type: 'address', name: 'sender', indexed: true },
            { type: 'bool', name: 'hasRole' },
        ],
    },
    {
        name: 'RoleAdminUpdated',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'role', indexed: true },
            { type: 'bytes32', name: 'newAdminRole', indexed: true },
            { type: 'address', name: 'sender', indexed: true },
        ],
    },
    { name: 'Unauthorized', type: 'error', inputs: [] },
];
exports.tip403Registry = [
    {
        name: 'policyIdCounter',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'policyExists',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'policyId' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'tokenTransferPolicyId',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [
            { type: 'bool', name: 'isSet' },
            { type: 'uint64', name: 'policyId' },
        ],
    },
    {
        name: 'policyData',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'policyId' }],
        outputs: [
            { type: 'uint8', name: 'policyType' },
            { type: 'address', name: 'admin' },
        ],
    },
    {
        name: 'isAuthorized',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'user' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'isAuthorizedSender',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'user' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'isAuthorizedRecipient',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'user' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'isAuthorizedMintRecipient',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'user' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'compoundPolicyData',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'policyId' }],
        outputs: [
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint64', name: 'recipientPolicyId' },
            { type: 'uint64', name: 'mintRecipientPolicyId' },
        ],
    },
    {
        name: 'receivePolicy',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [
            { type: 'bool', name: 'hasReceivePolicy' },
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint8', name: 'senderPolicyType' },
            { type: 'uint64', name: 'tokenFilterId' },
            { type: 'uint8', name: 'tokenFilterType' },
            { type: 'address', name: 'recoveryAuthority' },
        ],
    },
    {
        name: 'validateReceivePolicy',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'address', name: 'sender' },
            { type: 'address', name: 'receiver' },
        ],
        outputs: [
            { type: 'bool', name: 'authorized' },
            { type: 'uint8', name: 'blockedReason' },
        ],
    },
    {
        name: 'createPolicy',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'admin' },
            { type: 'uint8', name: 'policyType' },
        ],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'createPolicyWithAccounts',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'admin' },
            { type: 'uint8', name: 'policyType' },
            { type: 'address[]', name: 'accounts' },
        ],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'setPolicyAdmin',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'admin' },
        ],
        outputs: [],
    },
    {
        name: 'modifyPolicyWhitelist',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'account' },
            { type: 'bool', name: 'allowed' },
        ],
        outputs: [],
    },
    {
        name: 'modifyPolicyBlacklist',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'policyId' },
            { type: 'address', name: 'account' },
            { type: 'bool', name: 'restricted' },
        ],
        outputs: [],
    },
    {
        name: 'createCompoundPolicy',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint64', name: 'recipientPolicyId' },
            { type: 'uint64', name: 'mintRecipientPolicyId' },
        ],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'setReceivePolicy',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint64', name: 'tokenFilterId' },
            { type: 'address', name: 'recoveryAuthority' },
        ],
        outputs: [],
    },
    {
        name: 'migrateTransferPolicyIds',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address[]', name: 'tokens' }],
        outputs: [{ type: 'uint256', name: 'migrated' }],
    },
    {
        name: 'PolicyAdminUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'policyId', indexed: true },
            { type: 'address', name: 'updater', indexed: true },
            { type: 'address', name: 'admin', indexed: true },
        ],
    },
    {
        name: 'PolicyCreated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'policyId', indexed: true },
            { type: 'address', name: 'updater', indexed: true },
            { type: 'uint8', name: 'policyType' },
        ],
    },
    {
        name: 'WhitelistUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'policyId', indexed: true },
            { type: 'address', name: 'updater', indexed: true },
            { type: 'address', name: 'account', indexed: true },
            { type: 'bool', name: 'allowed' },
        ],
    },
    {
        name: 'BlacklistUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'policyId', indexed: true },
            { type: 'address', name: 'updater', indexed: true },
            { type: 'address', name: 'account', indexed: true },
            { type: 'bool', name: 'restricted' },
        ],
    },
    {
        name: 'CompoundPolicyCreated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'policyId', indexed: true },
            { type: 'address', name: 'creator', indexed: true },
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint64', name: 'recipientPolicyId' },
            { type: 'uint64', name: 'mintRecipientPolicyId' },
        ],
    },
    {
        name: 'ReceivePolicyUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'uint64', name: 'senderPolicyId' },
            { type: 'uint64', name: 'tokenFilterId' },
            { type: 'address', name: 'recoveryAuthority' },
        ],
    },
    { name: 'Unauthorized', type: 'error', inputs: [] },
    { name: 'PolicyNotFound', type: 'error', inputs: [] },
    { name: 'PolicyNotSimple', type: 'error', inputs: [] },
    { name: 'InvalidPolicyType', type: 'error', inputs: [] },
    { name: 'IncompatiblePolicyType', type: 'error', inputs: [] },
    { name: 'VirtualAddressNotAllowed', type: 'error', inputs: [] },
    { name: 'InvalidReceivePolicyType', type: 'error', inputs: [] },
    { name: 'InvalidRecoveryAuthority', type: 'error', inputs: [] },
];
exports.validatorConfigV2 = [
    {
        name: 'getActiveValidators',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            {
                type: 'tuple[]',
                name: 'validators',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'ingress' },
                    { type: 'string', name: 'egress' },
                    { type: 'address', name: 'feeRecipient' },
                    { type: 'uint64', name: 'index' },
                    { type: 'uint64', name: 'addedAtHeight' },
                    { type: 'uint64', name: 'deactivatedAtHeight' },
                ],
            },
        ],
    },
    {
        name: 'getInitializedAtHeight',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'owner',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'validatorCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'validatorByIndex',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'index' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'ingress' },
                    { type: 'string', name: 'egress' },
                    { type: 'address', name: 'feeRecipient' },
                    { type: 'uint64', name: 'index' },
                    { type: 'uint64', name: 'addedAtHeight' },
                    { type: 'uint64', name: 'deactivatedAtHeight' },
                ],
            },
        ],
    },
    {
        name: 'validatorByAddress',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'validatorAddress' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'ingress' },
                    { type: 'string', name: 'egress' },
                    { type: 'address', name: 'feeRecipient' },
                    { type: 'uint64', name: 'index' },
                    { type: 'uint64', name: 'addedAtHeight' },
                    { type: 'uint64', name: 'deactivatedAtHeight' },
                ],
            },
        ],
    },
    {
        name: 'validatorByPublicKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'bytes32', name: 'publicKey' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'ingress' },
                    { type: 'string', name: 'egress' },
                    { type: 'address', name: 'feeRecipient' },
                    { type: 'uint64', name: 'index' },
                    { type: 'uint64', name: 'addedAtHeight' },
                    { type: 'uint64', name: 'deactivatedAtHeight' },
                ],
            },
        ],
    },
    {
        name: 'getNextNetworkIdentityRotationEpoch',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'isInitialized',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'addValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'validatorAddress' },
            { type: 'bytes32', name: 'publicKey' },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
            { type: 'address', name: 'feeRecipient' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [{ type: 'uint64', name: 'index' }],
    },
    {
        name: 'deactivateValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'idx' }],
        outputs: [],
    },
    {
        name: 'rotateValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'idx' },
            { type: 'bytes32', name: 'publicKey' },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
            { type: 'bytes', name: 'signature' },
        ],
        outputs: [],
    },
    {
        name: 'setFeeRecipient',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'idx' },
            { type: 'address', name: 'feeRecipient' },
        ],
        outputs: [],
    },
    {
        name: 'setIpAddresses',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'idx' },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
        ],
        outputs: [],
    },
    {
        name: 'transferValidatorOwnership',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'idx' },
            { type: 'address', name: 'newAddress' },
        ],
        outputs: [],
    },
    {
        name: 'transferOwnership',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'newOwner' }],
        outputs: [],
    },
    {
        name: 'setNetworkIdentityRotationEpoch',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'epoch' }],
        outputs: [],
    },
    {
        name: 'migrateValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'idx' }],
        outputs: [],
    },
    {
        name: 'initializeIfMigrated',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'ValidatorAdded',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'validatorAddress', indexed: true },
            { type: 'bytes32', name: 'publicKey' },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
            { type: 'address', name: 'feeRecipient' },
        ],
    },
    {
        name: 'ValidatorDeactivated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'validatorAddress', indexed: true },
        ],
    },
    {
        name: 'ValidatorRotated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'uint64', name: 'deactivatedIndex', indexed: true },
            { type: 'address', name: 'validatorAddress', indexed: true },
            { type: 'bytes32', name: 'oldPublicKey' },
            { type: 'bytes32', name: 'newPublicKey' },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
            { type: 'address', name: 'caller' },
        ],
    },
    {
        name: 'FeeRecipientUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'feeRecipient' },
            { type: 'address', name: 'caller' },
        ],
    },
    {
        name: 'IpAddressesUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'string', name: 'ingress' },
            { type: 'string', name: 'egress' },
            { type: 'address', name: 'caller' },
        ],
    },
    {
        name: 'ValidatorOwnershipTransferred',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'oldAddress', indexed: true },
            { type: 'address', name: 'newAddress', indexed: true },
            { type: 'address', name: 'caller' },
        ],
    },
    {
        name: 'OwnershipTransferred',
        type: 'event',
        inputs: [
            { type: 'address', name: 'oldOwner', indexed: true },
            { type: 'address', name: 'newOwner', indexed: true },
        ],
    },
    {
        name: 'ValidatorMigrated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'validatorAddress', indexed: true },
            { type: 'bytes32', name: 'publicKey' },
        ],
    },
    {
        name: 'NetworkIdentityRotationEpochSet',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'previousEpoch', indexed: true },
            { type: 'uint64', name: 'nextEpoch', indexed: true },
        ],
    },
    {
        name: 'Initialized',
        type: 'event',
        inputs: [{ type: 'uint64', name: 'height' }],
    },
    {
        name: 'SkippedValidatorMigration',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'index', indexed: true },
            { type: 'address', name: 'validatorAddress', indexed: true },
            { type: 'bytes32', name: 'publicKey' },
        ],
    },
    { name: 'AlreadyInitialized', type: 'error', inputs: [] },
    {
        name: 'IngressAlreadyExists',
        type: 'error',
        inputs: [{ type: 'string', name: 'ingress' }],
    },
    { name: 'EmptyV1ValidatorSet', type: 'error', inputs: [] },
    { name: 'InvalidMigrationIndex', type: 'error', inputs: [] },
    { name: 'InvalidOwner', type: 'error', inputs: [] },
    { name: 'InvalidPublicKey', type: 'error', inputs: [] },
    { name: 'InvalidSignature', type: 'error', inputs: [] },
    { name: 'InvalidSignatureFormat', type: 'error', inputs: [] },
    { name: 'InvalidValidatorAddress', type: 'error', inputs: [] },
    { name: 'MigrationNotComplete', type: 'error', inputs: [] },
    { name: 'NotInitialized', type: 'error', inputs: [] },
    {
        name: 'NotIp',
        type: 'error',
        inputs: [
            { type: 'string', name: 'input' },
            { type: 'string', name: 'backtrace' },
        ],
    },
    {
        name: 'NotIpPort',
        type: 'error',
        inputs: [
            { type: 'string', name: 'input' },
            { type: 'string', name: 'backtrace' },
        ],
    },
    { name: 'PublicKeyAlreadyExists', type: 'error', inputs: [] },
    { name: 'Unauthorized', type: 'error', inputs: [] },
    { name: 'AddressAlreadyHasValidator', type: 'error', inputs: [] },
    { name: 'ValidatorAlreadyDeactivated', type: 'error', inputs: [] },
    { name: 'ValidatorNotFound', type: 'error', inputs: [] },
];
exports.validatorConfig = [
    {
        name: 'getValidators',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            {
                type: 'tuple[]',
                name: 'validators',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'bool', name: 'active' },
                    { type: 'uint64', name: 'index' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'inboundAddress' },
                    { type: 'string', name: 'outboundAddress' },
                ],
            },
        ],
    },
    {
        name: 'addValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'newValidatorAddress' },
            { type: 'bytes32', name: 'publicKey' },
            { type: 'bool', name: 'active' },
            { type: 'string', name: 'inboundAddress' },
            { type: 'string', name: 'outboundAddress' },
        ],
        outputs: [],
    },
    {
        name: 'updateValidator',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'newValidatorAddress' },
            { type: 'bytes32', name: 'publicKey' },
            { type: 'string', name: 'inboundAddress' },
            { type: 'string', name: 'outboundAddress' },
        ],
        outputs: [],
    },
    {
        name: 'changeValidatorStatus',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'validator' },
            { type: 'bool', name: 'active' },
        ],
        outputs: [],
    },
    {
        name: 'changeValidatorStatusByIndex',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'index' },
            { type: 'bool', name: 'active' },
        ],
        outputs: [],
    },
    {
        name: 'owner',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'changeOwner',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'newOwner' }],
        outputs: [],
    },
    {
        name: 'getNextFullDkgCeremony',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'setNextFullDkgCeremony',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'epoch' }],
        outputs: [],
    },
    {
        name: 'validatorsArray',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'index' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'validators',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'validator' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bytes32', name: 'publicKey' },
                    { type: 'bool', name: 'active' },
                    { type: 'uint64', name: 'index' },
                    { type: 'address', name: 'validatorAddress' },
                    { type: 'string', name: 'inboundAddress' },
                    { type: 'string', name: 'outboundAddress' },
                ],
            },
        ],
    },
    {
        name: 'validatorCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    { name: 'Unauthorized', type: 'error', inputs: [] },
    { name: 'ValidatorAlreadyExists', type: 'error', inputs: [] },
    { name: 'ValidatorNotFound', type: 'error', inputs: [] },
    { name: 'InvalidPublicKey', type: 'error', inputs: [] },
    {
        name: 'NotHostPort',
        type: 'error',
        inputs: [
            { type: 'string', name: 'field' },
            { type: 'string', name: 'input' },
            { type: 'string', name: 'backtrace' },
        ],
    },
    {
        name: 'NotIpPort',
        type: 'error',
        inputs: [
            { type: 'string', name: 'field' },
            { type: 'string', name: 'input' },
            { type: 'string', name: 'backtrace' },
        ],
    },
];
exports.zoneFactory = [
    {
        name: 'owner',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'transferOwnership',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'newOwner' }],
        outputs: [],
    },
    {
        name: 'createZone',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'params',
                components: [
                    { type: 'address', name: 'initialToken' },
                    { type: 'bool', name: 'accessMode' },
                    { type: 'bool', name: 'gatewayMode' },
                    { type: 'address[]', name: 'allowedAccounts' },
                    { type: 'address[]', name: 'zoneGateways' },
                    { type: 'address', name: 'admin' },
                    { type: 'address[]', name: 'sequencers' },
                    { type: 'uint8', name: 'threshold' },
                    { type: 'string', name: 'rpcUrl' },
                ],
            },
        ],
        outputs: [
            { type: 'uint32', name: 'zoneId' },
            { type: 'address', name: 'portal' },
        ],
    },
    {
        name: 'nextZoneId',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'zones',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint32', name: 'id' }],
        outputs: [
            {
                type: 'tuple',
                name: 'info',
                components: [
                    { type: 'uint32', name: 'zoneId' },
                    { type: 'address', name: 'portal' },
                    { type: 'bool', name: 'accessMode' },
                    { type: 'bool', name: 'gatewayMode' },
                    { type: 'address', name: 'admin' },
                    { type: 'address[]', name: 'sequencers' },
                    { type: 'uint8', name: 'threshold' },
                    { type: 'address', name: 'verifier' },
                    { type: 'string', name: 'rpcUrl' },
                ],
            },
        ],
    },
    {
        name: 'isZonePortal',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'portal' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'OwnershipTransferred',
        type: 'event',
        inputs: [
            { type: 'address', name: 'previousOwner', indexed: true },
            { type: 'address', name: 'newOwner', indexed: true },
        ],
    },
    {
        name: 'ZoneCreated',
        type: 'event',
        inputs: [
            { type: 'uint32', name: 'zoneId', indexed: true },
            { type: 'address', name: 'portal', indexed: true },
            { type: 'address', name: 'initialToken' },
            { type: 'bool', name: 'accessMode' },
            { type: 'bool', name: 'gatewayMode' },
            { type: 'address', name: 'admin' },
            { type: 'address[]', name: 'sequencers' },
            { type: 'uint8', name: 'threshold' },
            { type: 'address', name: 'verifier' },
        ],
    },
    { name: 'InvalidToken', type: 'error', inputs: [] },
    { name: 'TokenTransferPolicyNotSet', type: 'error', inputs: [] },
    { name: 'InvalidClosedLoopConfig', type: 'error', inputs: [] },
    { name: 'NotOwner', type: 'error', inputs: [] },
    { name: 'InvalidAdmin', type: 'error', inputs: [] },
    { name: 'InvalidSequencerSet', type: 'error', inputs: [] },
    { name: 'AlreadyInitialized', type: 'error', inputs: [] },
    { name: 'TokenMetadataTooLong', type: 'error', inputs: [] },
    { name: 'DuplicateAllowedAccount', type: 'error', inputs: [] },
    { name: 'DuplicateZoneGateway', type: 'error', inputs: [] },
    {
        name: 'ZoneCreated',
        type: 'event',
        inputs: [
            { type: 'uint32', name: 'zoneId', indexed: true },
            { type: 'address', name: 'portal', indexed: true },
            { type: 'address', name: 'messenger', indexed: true },
            { type: 'address', name: 'initialToken' },
            { type: 'address', name: 'admin' },
            { type: 'address', name: 'sequencer' },
            { type: 'address', name: 'verifier' },
            { type: 'bytes32', name: 'genesisBlockHash' },
            { type: 'bytes32', name: 'genesisTempoBlockHash' },
            { type: 'uint64', name: 'genesisTempoBlockNumber' },
        ],
    },
    {
        name: 'createZone',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple',
                name: 'params',
                components: [
                    { type: 'address', name: 'initialToken' },
                    { type: 'address', name: 'admin' },
                    { type: 'address', name: 'sequencer' },
                    { type: 'address', name: 'verifier' },
                    {
                        type: 'tuple',
                        name: 'zoneParams',
                        components: [
                            { type: 'bytes32', name: 'genesisBlockHash' },
                            { type: 'bytes32', name: 'genesisTempoBlockHash' },
                            { type: 'uint64', name: 'genesisTempoBlockNumber' },
                        ],
                    },
                    { type: 'string', name: 'rpcUrl' },
                ],
            },
        ],
        outputs: [
            { type: 'uint32', name: 'zoneId' },
            { type: 'address', name: 'portal' },
        ],
    },
    {
        name: 'verifier',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
];
exports.zonePortal = [
    {
        name: 'SequencerSetUpdated',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'nonce', indexed: true },
            { type: 'uint8', name: 'threshold' },
            { type: 'address[]', name: 'sequencers' },
        ],
    },
    {
        name: 'TokenEnabled',
        type: 'event',
        inputs: [
            { type: 'address', name: 'token', indexed: true },
            { type: 'string', name: 'name' },
            { type: 'string', name: 'symbol' },
            { type: 'string', name: 'currency' },
        ],
    },
    {
        name: 'RoleUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'account', indexed: true },
            { type: 'uint8', name: 'prev' },
            { type: 'uint8', name: 'next' },
        ],
    },
    {
        name: 'EnforcementModesUpdated',
        type: 'event',
        inputs: [
            { type: 'bool', name: 'accessMode' },
            { type: 'bool', name: 'gatewayMode' },
        ],
    },
    {
        name: 'LeaderUpdated',
        type: 'event',
        inputs: [
            { type: 'address', name: 'previousLeader', indexed: true },
            { type: 'address', name: 'newLeader', indexed: true },
            { type: 'uint64', name: 'leaderEpoch', indexed: true },
            { type: 'uint64', name: 'leaderActivationTempoBlock' },
        ],
    },
    {
        name: 'zoneId',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'admin',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'messenger',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'isAccessEnforced',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'setAccessMode',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bool', name: 'enforced' }],
        outputs: [],
    },
    {
        name: 'isGatewayOpen',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'setGatewayMode',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'bool', name: 'enforced' }],
        outputs: [],
    },
    {
        name: 'hasRole',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'uint8', name: 'role' },
        ],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'setAllowedAccount',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bool', name: 'allowed' },
        ],
        outputs: [],
    },
    {
        name: 'setGateway',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bool', name: 'allowed' },
        ],
        outputs: [],
    },
    {
        name: 'setPauseGuardian',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'account' },
            { type: 'bool', name: 'allowed' },
        ],
        outputs: [],
    },
    {
        name: 'setSequencerSet',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address[]', name: 'newSequencers' },
            { type: 'uint8', name: 'newThreshold' },
        ],
        outputs: [],
    },
    {
        name: 'verifier',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'sequencerSetVersion',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'sequencerThreshold',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint8' }],
    },
    {
        name: 'zoneHeight',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'isSequencer',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'account' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'sequencerCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'sequencerAt',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'index' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'leader',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'leaderEpoch',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'leaderActivationTempoBlock',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'setLeader',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'newLeader' },
            { type: 'uint64', name: 'expectedEpoch' },
        ],
        outputs: [],
    },
    {
        name: 'withdrawalBatchIndex',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'blockHash',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'currentDepositQueueHash',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'lastSyncedTempoBlockNumber',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'withdrawalQueueHead',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'withdrawalQueueTail',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'withdrawalQueueSlot',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'queueIndex' }],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'calculateDepositFee',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128', name: 'fee' }],
    },
    {
        name: 'calculateBouncebackFee',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128', name: 'fee' }],
    },
    {
        name: 'depositCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'lastProcessedDepositNumber',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'FIXED_DEPOSIT_GAS',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'MAX_GAS_FEE_RATE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'MAX_TOKENS_ENABLED_PER_TEMPO_BLOCK',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'MAX_TOKEN_METADATA_BYTES',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'areDepositsActive',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'tokenConfig',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bool', name: 'enabled' },
                    { type: 'bool', name: 'depositsActive' },
                ],
            },
        ],
    },
    {
        name: 'initialize',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint32', name: 'zoneId' },
            { type: 'address', name: 'initialToken' },
            { type: 'bool', name: 'accessMode' },
            { type: 'bool', name: 'gatewayMode' },
            { type: 'address[]', name: 'allowedAccounts' },
            { type: 'address[]', name: 'zoneGateways' },
            { type: 'address', name: 'admin' },
            { type: 'address', name: 'messenger' },
            { type: 'address[]', name: 'sequencers' },
            { type: 'uint8', name: 'threshold' },
            { type: 'address', name: 'verifier' },
            { type: 'string', name: 'rpcUrl' },
        ],
        outputs: [],
    },
    {
        name: 'deliverWithdrawal',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'to' },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
            { type: 'uint64', name: 'gasLimit' },
            { type: 'bytes', name: 'callbackData' },
        ],
        outputs: [],
    },
    {
        name: 'MAX_DEPOSITS_PER_TEMPO_BLOCK',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'MAX_WITHDRAWAL_GAS_LIMIT',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'paused',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'pauseExpiry',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'abdicationEffectiveAt',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint8', name: 'capability' }],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'processWithdrawals',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            {
                type: 'tuple[]',
                name: 'withdrawals',
                components: [
                    { type: 'address', name: 'token' },
                    { type: 'bytes32', name: 'senderTag' },
                    { type: 'address', name: 'to' },
                    { type: 'uint128', name: 'amount' },
                    { type: 'bytes32', name: 'memo' },
                    { type: 'uint64', name: 'gasLimit' },
                    { type: 'uint64', name: 'fallbackNonce' },
                    { type: 'bytes', name: 'callbackData' },
                    { type: 'bytes', name: 'encryptedSender' },
                ],
            },
            { type: 'bytes32', name: 'remainingQueue' },
        ],
        outputs: [],
    },
    {
        name: 'pause',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'resume',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'abdicate',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint8', name: 'capability' }],
        outputs: [],
    },
    {
        name: 'submitBatch',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint64', name: 'tempoBlockNumber' },
            { type: 'uint64', name: 'recentTempoBlockNumber' },
            {
                type: 'tuple',
                name: 'blockTransition',
                components: [
                    { type: 'bytes32', name: 'prevBlockHash' },
                    { type: 'bytes32', name: 'nextBlockHash' },
                ],
            },
            {
                type: 'tuple',
                name: 'depositQueueTransition',
                components: [
                    { type: 'bytes32', name: 'prevProcessedHash' },
                    { type: 'bytes32', name: 'nextProcessedHash' },
                    { type: 'uint64', name: 'prevDepositNumber' },
                    { type: 'uint64', name: 'nextDepositNumber' },
                ],
            },
            { type: 'bytes32', name: 'withdrawalQueueHash' },
            { type: 'bytes', name: 'verifierConfig' },
            { type: 'bytes', name: 'proof' },
            { type: 'uint256', name: 'nextZoneHeight' },
            { type: 'bytes[]', name: 'signatures' },
        ],
        outputs: [],
    },
    {
        name: 'enableToken',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [],
    },
    {
        name: 'pauseDeposits',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [],
    },
    {
        name: 'resumeDeposits',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [],
    },
    {
        name: 'setZoneGasRate',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint128', name: 'newZoneGasRate' }],
        outputs: [],
    },
    {
        name: 'setMaxTempoGasRate',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint128', name: 'newMaxTempoGasRate' }],
        outputs: [],
    },
    {
        name: 'setBouncebackGas',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'newBouncebackGas' }],
        outputs: [],
    },
    {
        name: 'transferAdmin',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'newAdmin' }],
        outputs: [],
    },
    {
        name: 'acceptAdmin',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [],
        outputs: [],
    },
    {
        name: 'rpcUrl',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'string' }],
    },
    {
        name: 'setRpcUrl',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'string', name: 'rpcUrl' }],
        outputs: [],
    },
    {
        name: 'deposit',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint256', name: 'keyIndex' },
            {
                type: 'tuple',
                name: 'encrypted',
                components: [
                    { type: 'bytes32', name: 'ephemeralPubkeyX' },
                    { type: 'uint8', name: 'ephemeralPubkeyYParity' },
                    { type: 'bytes', name: 'ciphertext' },
                    { type: 'bytes12', name: 'nonce' },
                    { type: 'bytes16', name: 'tag' },
                ],
            },
            { type: 'address', name: 'tempoRefundRecipient' },
        ],
        outputs: [{ type: 'bytes32', name: 'newCurrentDepositQueueHash' }],
    },
    {
        name: 'depositEncrypted',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint256', name: 'keyIndex' },
            {
                type: 'tuple',
                name: 'encrypted',
                components: [
                    { type: 'bytes32', name: 'ephemeralPubkeyX' },
                    { type: 'uint8', name: 'ephemeralPubkeyYParity' },
                    { type: 'bytes', name: 'ciphertext' },
                    { type: 'bytes12', name: 'nonce' },
                    { type: 'bytes16', name: 'tag' },
                ],
            },
            { type: 'address', name: 'tempoRefundRecipient' },
        ],
        outputs: [{ type: 'bytes32', name: 'newCurrentDepositQueueHash' }],
    },
    {
        name: 'setSequencerEncryptionKey',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'bytes32', name: 'x' },
            { type: 'uint8', name: 'yParity' },
            { type: 'uint8', name: 'popV' },
            { type: 'bytes32', name: 'popR' },
            { type: 'bytes32', name: 'popS' },
        ],
        outputs: [],
    },
    {
        name: 'isTokenEnabled',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [{ type: 'bool' }],
    },
    {
        name: 'enabledTokenCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'enabledTokenAt',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'index' }],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'tokenEnablementHash',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'bytes32' }],
    },
    {
        name: 'zoneGasRate',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'maxTempoGasRate',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'bouncebackGas',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'pendingAdmin',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'address' }],
    },
    {
        name: 'refunds',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'address', name: 'owner' },
        ],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'sequencerEncryptionKey',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            { type: 'bytes32', name: 'x' },
            { type: 'uint8', name: 'yParity' },
            { type: 'address', name: 'pubkey' },
        ],
    },
    {
        name: 'encryptionKeyCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'encryptionKeyAt',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'index' }],
        outputs: [
            {
                type: 'tuple',
                name: 'entry',
                components: [
                    { type: 'bytes32', name: 'x' },
                    { type: 'uint8', name: 'yParity' },
                    { type: 'uint64', name: 'activationBlock' },
                ],
            },
        ],
    },
    {
        name: 'isEncryptionKeyValid',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint256', name: 'keyIndex' }],
        outputs: [
            { type: 'bool', name: 'valid' },
            { type: 'uint64', name: 'expiresAtBlock' },
        ],
    },
    {
        name: 'encryptionKeyAtBlock',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'tempoBlockNumber' }],
        outputs: [
            { type: 'bytes32', name: 'x' },
            { type: 'uint8', name: 'yParity' },
            { type: 'uint256', name: 'keyIndex' },
        ],
    },
    {
        name: 'claimRefund',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'address', name: 'token' }],
        outputs: [{ type: 'uint128', name: 'amount' }],
    },
    {
        name: 'DepositMade',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'newCurrentDepositQueueHash', indexed: true },
            { type: 'address', name: 'sender', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'netAmount' },
            { type: 'uint128', name: 'fee' },
            { type: 'uint256', name: 'keyIndex' },
            { type: 'bytes32', name: 'ephemeralPubkeyX' },
            { type: 'uint8', name: 'ephemeralPubkeyYParity' },
            { type: 'bytes', name: 'ciphertext' },
            { type: 'bytes12', name: 'nonce' },
            { type: 'bytes16', name: 'tag' },
            { type: 'address', name: 'tempoRefundRecipient' },
            { type: 'uint64', name: 'depositNumber' },
        ],
    },
    {
        name: 'DepositsPaused',
        type: 'event',
        inputs: [{ type: 'address', name: 'token', indexed: true }],
    },
    {
        name: 'DepositsResumed',
        type: 'event',
        inputs: [{ type: 'address', name: 'token', indexed: true }],
    },
    {
        name: 'PortalPaused',
        type: 'event',
        inputs: [{ type: 'address', name: 'account', indexed: true }],
    },
    {
        name: 'PortalResumed',
        type: 'event',
        inputs: [{ type: 'address', name: 'account', indexed: true }],
    },
    {
        name: 'AbdicationScheduled',
        type: 'event',
        inputs: [
            { type: 'uint8', name: 'capability', indexed: true },
            { type: 'uint64', name: 'effectiveAt' },
        ],
    },
    {
        name: 'RpcUrlUpdated',
        type: 'event',
        inputs: [{ type: 'string', name: 'rpcUrl' }],
    },
    {
        name: 'SequencerEncryptionKeyUpdated',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'x' },
            { type: 'uint8', name: 'yParity' },
            { type: 'address', name: 'pubkey' },
            { type: 'uint256', name: 'keyIndex' },
            { type: 'uint64', name: 'activationBlock' },
        ],
    },
    {
        name: 'BatchSubmitted',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'withdrawalBatchIndex', indexed: true },
            { type: 'uint256', name: 'withdrawalQueueIndex', indexed: true },
            { type: 'bytes32', name: 'nextProcessedDepositQueueHash' },
            { type: 'bytes32', name: 'nextBlockHash' },
            { type: 'bytes32', name: 'withdrawalQueueHash' },
            { type: 'uint64', name: 'lastProcessedDepositNumber' },
        ],
    },
    {
        name: 'WithdrawalProcessed',
        type: 'event',
        inputs: [
            { type: 'address', name: 'to', indexed: true },
            { type: 'bytes32', name: 'senderTag', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'bool', name: 'callbackSuccess' },
        ],
    },
    {
        name: 'WithdrawalBounceBack',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'newCurrentDepositQueueHash', indexed: true },
            { type: 'uint64', name: 'fallbackNonce', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint64', name: 'depositNumber' },
        ],
    },
    {
        name: 'DepositBounceBack',
        type: 'event',
        inputs: [
            { type: 'address', name: 'tempoRefundRecipient', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint128', name: 'bouncebackFee' },
        ],
    },
    {
        name: 'DepositBounceBackPending',
        type: 'event',
        inputs: [
            { type: 'address', name: 'tempoRefundRecipient', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint128', name: 'bouncebackFee' },
        ],
    },
    {
        name: 'RefundClaimed',
        type: 'event',
        inputs: [
            { type: 'address', name: 'recipient', indexed: true },
            { type: 'address', name: 'token', indexed: true },
            { type: 'uint128', name: 'amount' },
        ],
    },
    {
        name: 'ZoneGasRateUpdated',
        type: 'event',
        inputs: [{ type: 'uint128', name: 'zoneGasRate' }],
    },
    {
        name: 'MaxTempoGasRateUpdated',
        type: 'event',
        inputs: [{ type: 'uint128', name: 'maxTempoGasRate' }],
    },
    {
        name: 'BouncebackGasUpdated',
        type: 'event',
        inputs: [{ type: 'uint64', name: 'bouncebackGas' }],
    },
    {
        name: 'AdminTransferStarted',
        type: 'event',
        inputs: [
            { type: 'address', name: 'currentAdmin', indexed: true },
            { type: 'address', name: 'pendingAdmin', indexed: true },
        ],
    },
    {
        name: 'AdminTransferred',
        type: 'event',
        inputs: [
            { type: 'address', name: 'previousAdmin', indexed: true },
            { type: 'address', name: 'newAdmin', indexed: true },
        ],
    },
    { name: 'NotSequencer', type: 'error', inputs: [] },
    { name: 'NotAdmin', type: 'error', inputs: [] },
    { name: 'NotPauseAuthority', type: 'error', inputs: [] },
    {
        name: 'CapabilityAbdicated',
        type: 'error',
        inputs: [{ type: 'uint8', name: 'capability' }],
    },
    {
        name: 'AbdicationAlreadyScheduled',
        type: 'error',
        inputs: [{ type: 'uint8', name: 'capability' }],
    },
    { name: 'PortalIsPaused', type: 'error', inputs: [] },
    { name: 'NotPendingAdmin', type: 'error', inputs: [] },
    { name: 'InvalidProof', type: 'error', inputs: [] },
    { name: 'InvalidTempoBlockNumber', type: 'error', inputs: [] },
    { name: 'NotFactory', type: 'error', inputs: [] },
    { name: 'NotSelf', type: 'error', inputs: [] },
    { name: 'AlreadyInitialized', type: 'error', inputs: [] },
    { name: 'MustDelegateCall', type: 'error', inputs: [] },
    { name: 'CallbackRejected', type: 'error', inputs: [] },
    { name: 'TransferFailed', type: 'error', inputs: [] },
    { name: 'ReentrantWithdrawal', type: 'error', inputs: [] },
    {
        name: 'EncryptionKeyExpired',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'keyIndex' },
            { type: 'uint64', name: 'activationBlock' },
            { type: 'uint64', name: 'supersededAtBlock' },
        ],
    },
    {
        name: 'InvalidEncryptionKeyIndex',
        type: 'error',
        inputs: [{ type: 'uint256', name: 'keyIndex' }],
    },
    { name: 'NoEncryptionKeySet', type: 'error', inputs: [] },
    {
        name: 'NoEncryptionKeyAtBlock',
        type: 'error',
        inputs: [{ type: 'uint64', name: 'blockNumber' }],
    },
    { name: 'InvalidEphemeralPubkey', type: 'error', inputs: [] },
    {
        name: 'InvalidCiphertextLength',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'actual' },
            { type: 'uint256', name: 'expected' },
        ],
    },
    { name: 'InvalidProofOfPossession', type: 'error', inputs: [] },
    { name: 'DepositTooSmall', type: 'error', inputs: [] },
    {
        name: 'TokenEnablementBlockCapacityExceeded',
        type: 'error',
        inputs: [{ type: 'uint64', name: 'maximum' }],
    },
    { name: 'TokenMetadataTooLong', type: 'error', inputs: [] },
    { name: 'GasFeeRateTooHigh', type: 'error', inputs: [] },
    { name: 'DepositsNotActive', type: 'error', inputs: [] },
    { name: 'TokenAlreadyEnabled', type: 'error', inputs: [] },
    { name: 'TokenTransferPolicyNotSet', type: 'error', inputs: [] },
    { name: 'InvalidDepositTransition', type: 'error', inputs: [] },
    { name: 'InvalidSequencerSet', type: 'error', inputs: [] },
    { name: 'SequencerConfigurationUnchanged', type: 'error', inputs: [] },
    { name: 'InvalidQuorumCertificate', type: 'error', inputs: [] },
    { name: 'CallbackDidNotReturnToZone', type: 'error', inputs: [] },
    { name: 'InvalidBouncebackRecipient', type: 'error', inputs: [] },
    { name: 'TokenNotEnabled', type: 'error', inputs: [] },
    {
        name: 'DepositBlockCapacityExceeded',
        type: 'error',
        inputs: [{ type: 'uint64', name: 'maximum' }],
    },
    { name: 'InvalidCallbackTarget', type: 'error', inputs: [] },
    {
        name: 'AccountNotAllowed',
        type: 'error',
        inputs: [{ type: 'address', name: 'account' }],
    },
    { name: 'InvalidLeader', type: 'error', inputs: [] },
    { name: 'ActiveLeaderRemoved', type: 'error', inputs: [] },
    { name: 'LeaderAlreadyUpdatedThisBlock', type: 'error', inputs: [] },
    {
        name: 'StaleLeadershipEpoch',
        type: 'error',
        inputs: [
            { type: 'uint64', name: 'expected' },
            { type: 'uint64', name: 'actual' },
        ],
    },
    {
        name: 'deposit',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: '_token' },
            { type: 'address', name: 'to' },
            { type: 'uint128', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
            { type: 'address', name: 'tempoRefundRecipient' },
        ],
        outputs: [{ type: 'bytes32' }],
    },
];
exports.earnContributionController = [
    {
        type: 'constructor',
        inputs: [
            { name: 'earnVault_', type: 'address' },
            { name: 'owner_', type: 'address' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'acceptOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'active',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'executeFunding',
        inputs: [
            { name: 'funder', type: 'address' },
            { name: 'requestedAssets', type: 'uint256' },
            { name: 'maxEarnShareSupply', type: 'uint256' },
        ],
        outputs: [{ name: 'fundedAssets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'fund',
        inputs: [
            { name: 'funder', type: 'address' },
            { name: 'requestedAssets', type: 'uint256' },
            { name: 'maxEarnShareSupply', type: 'uint256' },
        ],
        outputs: [{ name: 'fundedAssets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'owner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingOwner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'renounceOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setActive',
        inputs: [{ name: 'active_', type: 'bool' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'transferOwnership',
        inputs: [{ name: 'newOwner', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'event',
        name: 'ActiveSet',
        inputs: [{ name: 'active', type: 'bool', indexed: false }],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Funded',
        inputs: [
            { name: 'funder', type: 'address', indexed: true },
            { name: 'requestedAssets', type: 'uint256', indexed: false },
            { name: 'fundedAssets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferStarted',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferred',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'error',
        name: 'EarnShareSupplyOutOfBounds',
        inputs: [
            { name: 'earnShareSupply', type: 'uint256' },
            { name: 'maxEarnShareSupply', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'Inactive', inputs: [] },
    { type: 'error', name: 'NotSelf', inputs: [] },
    {
        type: 'error',
        name: 'OwnableInvalidOwner',
        inputs: [{ name: 'owner', type: 'address' }],
    },
    {
        type: 'error',
        name: 'OwnableUnauthorizedAccount',
        inputs: [{ name: 'account', type: 'address' }],
    },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    { type: 'error', name: 'TokenCallFailed', inputs: [] },
    { type: 'error', name: 'TokenCallFalse', inputs: [] },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
];
exports.earnEngine = [
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'deposit',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'name',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'shareScale',
        inputs: [],
        outputs: [{ name: 'scale', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'supportsInterface',
        inputs: [{ name: 'interfaceId', type: 'bytes4' }],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'symbol',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalAssets',
        inputs: [],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalShares',
        inputs: [],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'valueOf',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewWithdraw',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'withdraw',
        inputs: [
            { name: 'assets', type: 'uint256' },
            { name: 'receiver', type: 'address' },
        ],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'isFeeValuationFresh',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewRedeem',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'redeem',
        inputs: [
            { name: 'engineShares', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minAssets', type: 'uint256' },
        ],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
];
exports.earnEngineAsyncRedeem = [
    {
        type: 'function',
        name: 'cancelRedeem',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'requestRedeem',
        inputs: [
            { name: 'engineShares', type: 'uint256' },
            { name: 'requestData', type: 'bytes' },
        ],
        outputs: [{ name: 'requestId', type: 'bytes32' }],
        stateMutability: 'nonpayable',
    },
];
exports.earnEngineInKindDeposit = [
    {
        type: 'function',
        name: 'depositInKind',
        inputs: [
            { name: 'venueShares', type: 'uint256' },
            { name: 'from', type: 'address' },
        ],
        outputs: [{ name: 'engineSharesReceived', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
];
exports.earnFactory = [
    {
        type: 'constructor',
        inputs: [
            { name: 'tip20Factory_', type: 'address' },
            { name: 'earnVaultImplementation_', type: 'address' },
            { name: 'earnFeesImplementation_', type: 'address' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'DEFAULT_ADMIN_ROLE',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'EARN_SHARE_SALT_DOMAIN',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'FEES_SALT_DOMAIN',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'computeEarnShareSalt',
        inputs: [
            {
                name: 'params',
                type: 'tuple',
                components: [
                    { name: 'deploymentId', type: 'bytes32' },
                    { name: 'engine', type: 'address' },
                    { name: 'owner', type: 'address' },
                    {
                        name: 'controls',
                        type: 'tuple',
                        components: [
                            { name: 'emergencyGuardian', type: 'address' },
                            { name: 'asyncJanitor', type: 'address' },
                            { name: 'maxManagedAssets', type: 'uint256' },
                            { name: 'migrationMode', type: 'uint8' },
                        ],
                    },
                    {
                        name: 'distributorConfig',
                        type: 'tuple',
                        components: [
                            { name: 'distributor', type: 'address' },
                            { name: 'updateDelay', type: 'uint40' },
                        ],
                    },
                    {
                        name: 'fees',
                        type: 'tuple',
                        components: [
                            { name: 'fixedFeeCount', type: 'uint8' },
                            {
                                name: 'fixedFees',
                                type: 'tuple[4]',
                                components: [
                                    { name: 'account', type: 'address' },
                                    { name: 'rateBps', type: 'uint16' },
                                ],
                            },
                            {
                                name: 'excess',
                                type: 'tuple',
                                components: [
                                    { name: 'enabled', type: 'bool' },
                                    { name: 'account', type: 'address' },
                                    { name: 'annualTargetRateBps', type: 'uint16' },
                                    { name: 'excessFeeRateBps', type: 'uint16' },
                                ],
                            },
                        ],
                    },
                    { name: 'transferPolicyId', type: 'uint64' },
                ],
            },
        ],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'pure',
    },
    {
        type: 'function',
        name: 'deploy',
        inputs: [
            {
                name: 'params',
                type: 'tuple',
                components: [
                    { name: 'deploymentId', type: 'bytes32' },
                    { name: 'engine', type: 'address' },
                    { name: 'owner', type: 'address' },
                    {
                        name: 'controls',
                        type: 'tuple',
                        components: [
                            { name: 'emergencyGuardian', type: 'address' },
                            { name: 'asyncJanitor', type: 'address' },
                            { name: 'maxManagedAssets', type: 'uint256' },
                            { name: 'migrationMode', type: 'uint8' },
                        ],
                    },
                    {
                        name: 'distributorConfig',
                        type: 'tuple',
                        components: [
                            { name: 'distributor', type: 'address' },
                            { name: 'updateDelay', type: 'uint40' },
                        ],
                    },
                    {
                        name: 'fees',
                        type: 'tuple',
                        components: [
                            { name: 'fixedFeeCount', type: 'uint8' },
                            {
                                name: 'fixedFees',
                                type: 'tuple[4]',
                                components: [
                                    { name: 'account', type: 'address' },
                                    { name: 'rateBps', type: 'uint16' },
                                ],
                            },
                            {
                                name: 'excess',
                                type: 'tuple',
                                components: [
                                    { name: 'enabled', type: 'bool' },
                                    { name: 'account', type: 'address' },
                                    { name: 'annualTargetRateBps', type: 'uint16' },
                                    { name: 'excessFeeRateBps', type: 'uint16' },
                                ],
                            },
                        ],
                    },
                    { name: 'transferPolicyId', type: 'uint64' },
                ],
            },
        ],
        outputs: [
            { name: 'earnShare', type: 'address' },
            { name: 'earnVault', type: 'address' },
            { name: 'earnFees', type: 'address' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'earnFeesImplementation',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnVaultImplementation',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'predictEarnFees',
        inputs: [
            {
                name: 'params',
                type: 'tuple',
                components: [
                    { name: 'deploymentId', type: 'bytes32' },
                    { name: 'engine', type: 'address' },
                    { name: 'owner', type: 'address' },
                    {
                        name: 'controls',
                        type: 'tuple',
                        components: [
                            { name: 'emergencyGuardian', type: 'address' },
                            { name: 'asyncJanitor', type: 'address' },
                            { name: 'maxManagedAssets', type: 'uint256' },
                            { name: 'migrationMode', type: 'uint8' },
                        ],
                    },
                    {
                        name: 'distributorConfig',
                        type: 'tuple',
                        components: [
                            { name: 'distributor', type: 'address' },
                            { name: 'updateDelay', type: 'uint40' },
                        ],
                    },
                    {
                        name: 'fees',
                        type: 'tuple',
                        components: [
                            { name: 'fixedFeeCount', type: 'uint8' },
                            {
                                name: 'fixedFees',
                                type: 'tuple[4]',
                                components: [
                                    { name: 'account', type: 'address' },
                                    { name: 'rateBps', type: 'uint16' },
                                ],
                            },
                            {
                                name: 'excess',
                                type: 'tuple',
                                components: [
                                    { name: 'enabled', type: 'bool' },
                                    { name: 'account', type: 'address' },
                                    { name: 'annualTargetRateBps', type: 'uint16' },
                                    { name: 'excessFeeRateBps', type: 'uint16' },
                                ],
                            },
                        ],
                    },
                    { name: 'transferPolicyId', type: 'uint64' },
                ],
            },
        ],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'predictEarnShare',
        inputs: [
            {
                name: 'params',
                type: 'tuple',
                components: [
                    { name: 'deploymentId', type: 'bytes32' },
                    { name: 'engine', type: 'address' },
                    { name: 'owner', type: 'address' },
                    {
                        name: 'controls',
                        type: 'tuple',
                        components: [
                            { name: 'emergencyGuardian', type: 'address' },
                            { name: 'asyncJanitor', type: 'address' },
                            { name: 'maxManagedAssets', type: 'uint256' },
                            { name: 'migrationMode', type: 'uint8' },
                        ],
                    },
                    {
                        name: 'distributorConfig',
                        type: 'tuple',
                        components: [
                            { name: 'distributor', type: 'address' },
                            { name: 'updateDelay', type: 'uint40' },
                        ],
                    },
                    {
                        name: 'fees',
                        type: 'tuple',
                        components: [
                            { name: 'fixedFeeCount', type: 'uint8' },
                            {
                                name: 'fixedFees',
                                type: 'tuple[4]',
                                components: [
                                    { name: 'account', type: 'address' },
                                    { name: 'rateBps', type: 'uint16' },
                                ],
                            },
                            {
                                name: 'excess',
                                type: 'tuple',
                                components: [
                                    { name: 'enabled', type: 'bool' },
                                    { name: 'account', type: 'address' },
                                    { name: 'annualTargetRateBps', type: 'uint16' },
                                    { name: 'excessFeeRateBps', type: 'uint16' },
                                ],
                            },
                        ],
                    },
                    { name: 'transferPolicyId', type: 'uint64' },
                ],
            },
        ],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'tip20Factory',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'event',
        name: 'EarnStackDeployed',
        inputs: [
            { name: 'earnVault', type: 'address', indexed: true },
            { name: 'earnShare', type: 'address', indexed: true },
            { name: 'earnFees', type: 'address', indexed: true },
            { name: 'engine', type: 'address', indexed: false },
            { name: 'asset', type: 'address', indexed: false },
            { name: 'owner', type: 'address', indexed: false },
            { name: 'deploymentId', type: 'bytes32', indexed: false },
            { name: 'emergencyGuardian', type: 'address', indexed: false },
            { name: 'asyncJanitor', type: 'address', indexed: false },
            { name: 'maxManagedAssets', type: 'uint256', indexed: false },
            { name: 'migrationMode', type: 'uint8', indexed: false },
            { name: 'transferPolicyId', type: 'uint64', indexed: false },
            { name: 'earnShareSalt', type: 'bytes32', indexed: false },
            { name: 'controlConfigHash', type: 'bytes32', indexed: false },
            { name: 'feeConfigHash', type: 'bytes32', indexed: false },
            { name: 'earnFeesSalt', type: 'bytes32', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'AdminRelinquishmentFailed', inputs: [] },
    {
        type: 'error',
        name: 'EarnShareAlreadyExists',
        inputs: [{ name: 'earnShare', type: 'address' }],
    },
    { type: 'error', name: 'EarnShareSupplyNotZero', inputs: [] },
    { type: 'error', name: 'EmptyDeploymentId', inputs: [] },
    { type: 'error', name: 'EmptyEarnShareMetadata', inputs: [] },
    {
        type: 'error',
        name: 'EngineAlreadyBound',
        inputs: [{ name: 'earnVault', type: 'address' }],
    },
    { type: 'error', name: 'FactoryCannotBeFinalOwner', inputs: [] },
    { type: 'error', name: 'FailedDeployment', inputs: [] },
    {
        type: 'error',
        name: 'InsufficientBalance',
        inputs: [
            { name: 'balance', type: 'uint256' },
            { name: 'needed', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'InvalidDistributorConfig', inputs: [] },
    { type: 'error', name: 'InvalidEarnFeesImplementation', inputs: [] },
    { type: 'error', name: 'InvalidEarnVaultImplementation', inputs: [] },
    { type: 'error', name: 'InvalidEngine', inputs: [] },
    {
        type: 'error',
        name: 'InvalidTransferPolicy',
        inputs: [{ name: 'policyId', type: 'uint64' }],
    },
    { type: 'error', name: 'IssuerGrantFailed', inputs: [] },
    {
        type: 'error',
        name: 'TransferPolicyMismatch',
        inputs: [
            { name: 'expected', type: 'uint64' },
            { name: 'actual', type: 'uint64' },
        ],
    },
    {
        type: 'error',
        name: 'UnsupportedTransferPolicy',
        inputs: [
            { name: 'policyId', type: 'uint64' },
            { name: 'policyType', type: 'uint8' },
        ],
    },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
];
exports.earnFees = [
    { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },
    {
        type: 'function',
        name: 'accrueFees',
        inputs: [],
        outputs: [
            {
                name: 'result',
                type: 'tuple',
                components: [
                    { name: 'activeAssets', type: 'uint256' },
                    { name: 'positiveAccrualAssets', type: 'uint256' },
                    { name: 'fixedFeeAssets', type: 'uint256' },
                    { name: 'excessFeeAssets', type: 'uint256' },
                    { name: 'totalFeeAssets', type: 'uint256' },
                    { name: 'totalFeeEarnShares', type: 'uint256' },
                    { name: 'preFeeValuePerEarnShare', type: 'uint256' },
                    { name: 'postFeeValuePerEarnShare', type: 'uint256' },
                    { name: 'targetValuePerEarnShare', type: 'uint256' },
                    { name: 'allocationCount', type: 'uint8' },
                    {
                        name: 'allocations',
                        type: 'tuple[5]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'feeAssets', type: 'uint256' },
                            { name: 'feeEarnShares', type: 'uint256' },
                        ],
                    },
                ],
            },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'claim',
        inputs: [
            { name: 'to', type: 'address' },
            { name: 'earnShares', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'claimableEarnShares',
        inputs: [{ name: 'recipient', type: 'address' }],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'closeRedeemRequest',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'currentFeeConfigId',
        inputs: [],
        outputs: [{ name: '', type: 'uint64' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'disableFees',
        inputs: [{ name: 'operator', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'earnShare',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnShareScale',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'feeBaselinesPending',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'feeConfig',
        inputs: [{ name: 'configId', type: 'uint64' }],
        outputs: [
            {
                name: '',
                type: 'tuple',
                components: [
                    { name: 'fixedFeeCount', type: 'uint8' },
                    {
                        name: 'fixedFees',
                        type: 'tuple[4]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'rateBps', type: 'uint16' },
                        ],
                    },
                    {
                        name: 'excess',
                        type: 'tuple',
                        components: [
                            { name: 'enabled', type: 'bool' },
                            { name: 'account', type: 'address' },
                            { name: 'annualTargetRateBps', type: 'uint16' },
                            { name: 'excessFeeRateBps', type: 'uint16' },
                        ],
                    },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'feeRemainder',
        inputs: [
            { name: 'configId', type: 'uint64' },
            { name: 'slot', type: 'uint8' },
        ],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'feesActive',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'feesDisabled',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'highWaterMark',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'initialize',
        inputs: [
            { name: 'earnVault_', type: 'address' },
            { name: 'earnShare_', type: 'address' },
            {
                name: 'initialConfig',
                type: 'tuple',
                components: [
                    { name: 'fixedFeeCount', type: 'uint8' },
                    {
                        name: 'fixedFees',
                        type: 'tuple[4]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'rateBps', type: 'uint16' },
                        ],
                    },
                    {
                        name: 'excess',
                        type: 'tuple',
                        components: [
                            { name: 'enabled', type: 'bool' },
                            { name: 'account', type: 'address' },
                            { name: 'annualTargetRateBps', type: 'uint16' },
                            { name: 'excessFeeRateBps', type: 'uint16' },
                        ],
                    },
                ],
            },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'initializeBaselines',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'pendingFeeSnapshot',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [
            {
                name: '',
                type: 'tuple',
                components: [
                    { name: 'burnedEarnShares', type: 'uint256' },
                    { name: 'requestValue', type: 'uint256' },
                    { name: 'highWaterValue', type: 'uint256' },
                    { name: 'targetValue', type: 'uint256' },
                    { name: 'feeConfigId', type: 'uint64' },
                    { name: 'requestedAt', type: 'uint40' },
                    { name: 'open', type: 'bool' },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewAccruedFees',
        inputs: [],
        outputs: [
            {
                name: 'result',
                type: 'tuple',
                components: [
                    { name: 'activeAssets', type: 'uint256' },
                    { name: 'positiveAccrualAssets', type: 'uint256' },
                    { name: 'fixedFeeAssets', type: 'uint256' },
                    { name: 'excessFeeAssets', type: 'uint256' },
                    { name: 'totalFeeAssets', type: 'uint256' },
                    { name: 'totalFeeEarnShares', type: 'uint256' },
                    { name: 'preFeeValuePerEarnShare', type: 'uint256' },
                    { name: 'postFeeValuePerEarnShare', type: 'uint256' },
                    { name: 'targetValuePerEarnShare', type: 'uint256' },
                    { name: 'allocationCount', type: 'uint8' },
                    {
                        name: 'allocations',
                        type: 'tuple[5]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'feeAssets', type: 'uint256' },
                            { name: 'feeEarnShares', type: 'uint256' },
                        ],
                    },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'recordRedeemRequest',
        inputs: [
            { name: 'requestId', type: 'bytes32' },
            { name: 'burnedEarnShares', type: 'uint256' },
            { name: 'requestValue', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setFeeConfig',
        inputs: [
            {
                name: 'config',
                type: 'tuple',
                components: [
                    { name: 'fixedFeeCount', type: 'uint8' },
                    {
                        name: 'fixedFees',
                        type: 'tuple[4]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'rateBps', type: 'uint16' },
                        ],
                    },
                    {
                        name: 'excess',
                        type: 'tuple',
                        components: [
                            { name: 'enabled', type: 'bool' },
                            { name: 'account', type: 'address' },
                            { name: 'annualTargetRateBps', type: 'uint16' },
                            { name: 'excessFeeRateBps', type: 'uint16' },
                        ],
                    },
                ],
            },
        ],
        outputs: [{ name: 'configId', type: 'uint64' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'settleCancelledRedeem',
        inputs: [
            { name: 'requestId', type: 'bytes32' },
            { name: 'returnedValue', type: 'uint256' },
            { name: 'activeSupply', type: 'uint256' },
            { name: 'activeAssets', type: 'uint256' },
            { name: 'totalReentryEarnShares', type: 'uint256' },
        ],
        outputs: [{ name: 'feeEarnShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'shouldChargeRedeem',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'targetBase',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'targetStartedAt',
        inputs: [],
        outputs: [{ name: '', type: 'uint40' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalClaimableEarnShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'validateFeeConfig',
        inputs: [
            {
                name: 'config',
                type: 'tuple',
                components: [
                    { name: 'fixedFeeCount', type: 'uint8' },
                    {
                        name: 'fixedFees',
                        type: 'tuple[4]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'rateBps', type: 'uint16' },
                        ],
                    },
                    {
                        name: 'excess',
                        type: 'tuple',
                        components: [
                            { name: 'enabled', type: 'bool' },
                            { name: 'account', type: 'address' },
                            { name: 'annualTargetRateBps', type: 'uint16' },
                            { name: 'excessFeeRateBps', type: 'uint16' },
                        ],
                    },
                ],
            },
        ],
        outputs: [],
        stateMutability: 'view',
    },
    {
        type: 'event',
        name: 'FeeBaselinesInitialized',
        inputs: [
            { name: 'highWaterMark', type: 'uint256', indexed: false },
            { name: 'targetBase', type: 'uint256', indexed: false },
            { name: 'targetStartedAt', type: 'uint40', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeeConfigurationSet',
        inputs: [
            { name: 'configId', type: 'uint64', indexed: true },
            { name: 'configHash', type: 'bytes32', indexed: true },
            { name: 'reactivated', type: 'bool', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeeDustWaived',
        inputs: [
            { name: 'configId', type: 'uint64', indexed: true },
            { name: 'slot', type: 'uint8', indexed: true },
            { name: 'remainder', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeeEarnSharesAllocated',
        inputs: [
            { name: 'configId', type: 'uint64', indexed: true },
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'feeAssets', type: 'uint256', indexed: false },
            { name: 'feeEarnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeeEarnSharesClaimed',
        inputs: [
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'to', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeesAccrued',
        inputs: [
            { name: 'configId', type: 'uint64', indexed: true },
            { name: 'activeAssets', type: 'uint256', indexed: false },
            { name: 'positiveAccrualAssets', type: 'uint256', indexed: false },
            { name: 'feeAssets', type: 'uint256', indexed: false },
            { name: 'feeEarnShares', type: 'uint256', indexed: false },
            { name: 'highWaterMark', type: 'uint256', indexed: false },
            { name: 'targetValuePerEarnShare', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FeesDisabled',
        inputs: [{ name: 'operator', type: 'address', indexed: true }],
        anonymous: false,
    },
    { type: 'error', name: 'AlreadyInitialized', inputs: [] },
    { type: 'error', name: 'InsufficientClaimableEarnShares', inputs: [] },
    { type: 'error', name: 'InvalidFeeClaimReceiver', inputs: [] },
    { type: 'error', name: 'InvalidFeeConfiguration', inputs: [] },
    { type: 'error', name: 'NotEarnVault', inputs: [] },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
    { type: 'error', name: 'ZeroAmount', inputs: [] },
];
exports.earnMerkleRewardDistributor = [
    {
        type: 'constructor',
        inputs: [
            { name: 'earnVault_', type: 'address' },
            { name: 'treasury_', type: 'address' },
            { name: 'campaignId_', type: 'bytes32' },
            { name: 'claimDeadline_', type: 'uint40' },
            { name: 'owner_', type: 'address' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'acceptOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'campaignId',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'claim',
        inputs: [
            { name: 'recipient', type: 'address' },
            { name: 'cumulativeAmount', type: 'uint256' },
            { name: 'proof', type: 'bytes32[]' },
        ],
        outputs: [{ name: 'amount', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'claimDeadline',
        inputs: [],
        outputs: [{ name: '', type: 'uint40' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'cumulativePaid',
        inputs: [{ name: 'recipient', type: 'address' }],
        outputs: [{ name: 'cumulativeAmount', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnShare',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'fundWithAssets',
        inputs: [
            { name: 'funder', type: 'address' },
            { name: 'assets', type: 'uint256' },
            { name: 'minEarnShares', type: 'uint256' },
        ],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'leaf',
        inputs: [
            { name: 'recipient', type: 'address' },
            { name: 'cumulativeAmount', type: 'uint256' },
        ],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'merkleRoot',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'owner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'paused',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingOwner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'publishRoot',
        inputs: [
            { name: 'root', type: 'bytes32' },
            { name: 'totalEntitlement', type: 'uint256' },
            { name: 'statementHash_', type: 'bytes32' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'pushBatch',
        inputs: [
            { name: 'expectedRootVersion', type: 'uint64' },
            { name: 'recipients', type: 'address[]' },
            { name: 'cumulativeAmounts', type: 'uint256[]' },
            { name: 'multiproof', type: 'bytes32[]' },
            { name: 'proofFlags', type: 'bool[]' },
        ],
        outputs: [
            { name: 'paidCount', type: 'uint256' },
            { name: 'paidEarnShares', type: 'uint256' },
            { name: 'skippedCount', type: 'uint256' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'renounceOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'pure',
    },
    {
        type: 'function',
        name: 'returnUnspent',
        inputs: [],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'rootTotalEntitlement',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'rootVersion',
        inputs: [],
        outputs: [{ name: '', type: 'uint64' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'setPaused',
        inputs: [{ name: 'paused_', type: 'bool' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'statementHash',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalPaid',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'transferOwnership',
        inputs: [{ name: 'newOwner', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'treasury',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'event',
        name: 'AssetsFunded',
        inputs: [
            { name: 'funder', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'BatchPushed',
        inputs: [
            { name: 'version', type: 'uint64', indexed: true },
            { name: 'batchHash', type: 'bytes32', indexed: true },
            { name: 'attemptedCount', type: 'uint256', indexed: false },
            { name: 'paidCount', type: 'uint256', indexed: false },
            { name: 'paidEarnShares', type: 'uint256', indexed: false },
            { name: 'skippedCount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferStarted',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferred',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'PausedSet',
        inputs: [{ name: 'paused', type: 'bool', indexed: false }],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'PayoutSkipped',
        inputs: [
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'cumulativeAmount', type: 'uint256', indexed: false },
            { name: 'reason', type: 'uint8', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RewardClaimed',
        inputs: [
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
            { name: 'cumulativeAmount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RootPublished',
        inputs: [
            { name: 'version', type: 'uint64', indexed: true },
            { name: 'root', type: 'bytes32', indexed: true },
            { name: 'statementHash', type: 'bytes32', indexed: true },
            { name: 'totalEntitlement', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'UnspentReturned',
        inputs: [
            { name: 'treasury', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'ClaimsExpired', inputs: [] },
    { type: 'error', name: 'ClaimsNotExpired', inputs: [] },
    { type: 'error', name: 'DepositsPaused', inputs: [] },
    {
        type: 'error',
        name: 'InsufficientFunding',
        inputs: [
            { name: 'requiredBalance', type: 'uint256' },
            { name: 'actualBalance', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'InvalidArrayLengths', inputs: [] },
    { type: 'error', name: 'InvalidEarnVault', inputs: [] },
    { type: 'error', name: 'InvalidMultiproof', inputs: [] },
    { type: 'error', name: 'MerkleProofInvalidMultiproof', inputs: [] },
    { type: 'error', name: 'NothingOwed', inputs: [] },
    {
        type: 'error',
        name: 'OwnableInvalidOwner',
        inputs: [{ name: 'owner', type: 'address' }],
    },
    {
        type: 'error',
        name: 'OwnableUnauthorizedAccount',
        inputs: [{ name: 'account', type: 'address' }],
    },
    { type: 'error', name: 'OwnershipRenunciationDisabled', inputs: [] },
    { type: 'error', name: 'Paused', inputs: [] },
    { type: 'error', name: 'PausedLiabilityIncrease', inputs: [] },
    { type: 'error', name: 'ReentrancyGuardReentrantCall', inputs: [] },
    {
        type: 'error',
        name: 'RootTotalDecreased',
        inputs: [
            { name: 'previousTotal', type: 'uint256' },
            { name: 'nextTotal', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'RootTotalExceeded',
        inputs: [
            { name: 'requestedAmount', type: 'uint256' },
            { name: 'remainingEntitlement', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'StaleRootVersion',
        inputs: [
            { name: 'expected', type: 'uint64' },
            { name: 'actual', type: 'uint64' },
        ],
    },
    { type: 'error', name: 'TokenCallFailed', inputs: [] },
    { type: 'error', name: 'TokenCallFalse', inputs: [] },
    {
        type: 'error',
        name: 'UnexpectedEarnShares',
        inputs: [
            { name: 'reported', type: 'uint256' },
            { name: 'measured', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'UnexpectedRetainedAssets',
        inputs: [
            { name: 'beforeBalance', type: 'uint256' },
            { name: 'afterBalance', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
    { type: 'error', name: 'ZeroAmount', inputs: [] },
    { type: 'error', name: 'ZeroCampaignId', inputs: [] },
    { type: 'error', name: 'ZeroDeadline', inputs: [] },
    { type: 'error', name: 'ZeroMinimumEarnShares', inputs: [] },
    { type: 'error', name: 'ZeroRoot', inputs: [] },
    { type: 'error', name: 'ZeroStatementHash', inputs: [] },
];
exports.earnRouter = [
    {
        type: 'constructor',
        inputs: [
            { name: 'allowedZoneId_', type: 'uint32' },
            { name: 'earnVault_', type: 'address' },
            { name: 'privateAsset_', type: 'address' },
            { name: 'tokenAuthority_', type: 'address' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'allowedZoneId',
        inputs: [],
        outputs: [{ name: '', type: 'uint32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnShare',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'onWithdrawalReceived',
        inputs: [
            { name: 'sourceZoneId', type: 'uint32' },
            { name: 'sourcePortal', type: 'address' },
            { name: '', type: 'bytes32' },
            { name: 'token', type: 'address' },
            { name: 'amount', type: 'uint128' },
            { name: 'callbackData', type: 'bytes' },
        ],
        outputs: [{ name: '', type: 'bytes4' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'privateAsset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'reserveToken',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'supportsFlow',
        inputs: [{ name: 'flow', type: 'uint8' }],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'pure',
    },
    {
        type: 'function',
        name: 'tokenAuthority',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'transactionLimit',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'vaultAsset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'event',
        name: 'EarnDeposit',
        inputs: [
            { name: 'actionId', type: 'bytes32', indexed: true },
            { name: 'earnVault', type: 'address', indexed: true },
            { name: 'inputToken', type: 'address', indexed: true },
            { name: 'inputAmount', type: 'uint256', indexed: false },
            { name: 'vaultAssets', type: 'uint256', indexed: false },
            { name: 'earnShares', type: 'uint256', indexed: false },
            { name: 'zoneDepositHash', type: 'bytes32', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EarnRedeem',
        inputs: [
            { name: 'actionId', type: 'bytes32', indexed: true },
            { name: 'earnVault', type: 'address', indexed: true },
            { name: 'outputToken', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
            { name: 'vaultAssets', type: 'uint256', indexed: false },
            { name: 'outputAmount', type: 'uint256', indexed: false },
            { name: 'zoneDepositHash', type: 'bytes32', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'AmountExceedsLimit', inputs: [] },
    { type: 'error', name: 'AmountOverflow', inputs: [] },
    { type: 'error', name: 'BadFlow', inputs: [] },
    { type: 'error', name: 'InsufficientOutput', inputs: [] },
    { type: 'error', name: 'InvalidAuthority', inputs: [] },
    { type: 'error', name: 'InvalidEarnVault', inputs: [] },
    { type: 'error', name: 'InvalidPrivateAsset', inputs: [] },
    { type: 'error', name: 'InvalidReturnToken', inputs: [] },
    { type: 'error', name: 'InvalidRoutePair', inputs: [] },
    { type: 'error', name: 'InvalidSourcePortal', inputs: [] },
    { type: 'error', name: 'InvalidTransactionLimit', inputs: [] },
    { type: 'error', name: 'NotZoneMessenger', inputs: [] },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    { type: 'error', name: 'ResidualBalance', inputs: [] },
    { type: 'error', name: 'TokenCallFailed', inputs: [] },
    { type: 'error', name: 'TokenCallFalse', inputs: [] },
    { type: 'error', name: 'WrongInputToken', inputs: [] },
    { type: 'error', name: 'WrongSourceZone', inputs: [] },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
    { type: 'error', name: 'ZeroAmount', inputs: [] },
];
exports.earnVault = [
    { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },
    {
        type: 'function',
        name: 'MAX_REWARD_RATE_MULTIPLIER',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'absorbEngineShareSurplus',
        inputs: [{ name: 'engineShares_', type: 'uint256' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'acceptDistributor',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'accrueFees',
        inputs: [],
        outputs: [
            { name: 'feeAssets', type: 'uint256' },
            { name: 'feeEarnShares', type: 'uint256' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'anchorEarnShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'anchorEngineShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'asyncJanitor',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'cancelDistributorFeeUpdate',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'cancelDistributorTransfer',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'cancelRedeem',
        inputs: [
            { name: 'requestId', type: 'bytes32' },
            { name: 'minReceiverEarnShares', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'contribute',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'receivedEngineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'convertEngineSharesToEarnShares',
        inputs: [{ name: 'engineShares_', type: 'uint256' }],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'convertToEngineShares',
        inputs: [{ name: 'earnShares', type: 'uint256' }],
        outputs: [{ name: 'engineShares_', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'deposit',
        inputs: [
            { name: 'assets', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minEarnShares', type: 'uint256' },
        ],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'depositVenueShares',
        inputs: [
            { name: 'venueShares', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minEarnShares', type: 'uint256' },
        ],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'depositsPaused',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'disableFees',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'distributor',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'distributorFee',
        inputs: [],
        outputs: [
            { name: 'recipient', type: 'address' },
            { name: 'rateBps', type: 'uint16' },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'distributorUpdateDelay',
        inputs: [],
        outputs: [{ name: '', type: 'uint40' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnFees',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'earnShare',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'emergencyGuardian',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'engine',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'engineMigrationMode',
        inputs: [],
        outputs: [{ name: '', type: 'uint8' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'engineShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'executeDistributorFeeUpdate',
        inputs: [],
        outputs: [{ name: 'feeConfigId', type: 'uint64' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'finalizeRedeem',
        inputs: [
            { name: 'requestId', type: 'bytes32' },
            { name: 'asset_', type: 'address' },
            { name: 'amount', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'initialize',
        inputs: [
            { name: 'engine_', type: 'address' },
            { name: 'earnShare_', type: 'address' },
            { name: 'earnFees_', type: 'address' },
            { name: 'operator_', type: 'address' },
            {
                name: 'controlInit_',
                type: 'tuple',
                components: [
                    { name: 'emergencyGuardian', type: 'address' },
                    { name: 'asyncJanitor', type: 'address' },
                    { name: 'maxManagedAssets', type: 'uint256' },
                    { name: 'migrationMode', type: 'uint8' },
                ],
            },
            {
                name: 'distributorInit_',
                type: 'tuple',
                components: [
                    { name: 'distributor', type: 'address' },
                    { name: 'updateDelay', type: 'uint40' },
                ],
            },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'isAccountingAligned',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'isFeeValuationFresh',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'maxManagedAssets',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'migrateEngine',
        inputs: [
            { name: 'newEngine', type: 'address' },
            { name: 'minNewEngineShares', type: 'uint256' },
            { name: 'minAssetsRetained', type: 'uint256' },
        ],
        outputs: [{ name: 'newEngineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'normalizedRewardRate',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'openRedeemRequestCount',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'operator',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingDistributor',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingDistributorFeeUpdate',
        inputs: [],
        outputs: [
            {
                name: '',
                type: 'tuple',
                components: [
                    { name: 'recipient', type: 'address' },
                    { name: 'rateBps', type: 'uint16' },
                    { name: 'executableAt', type: 'uint40' },
                    { name: 'pending', type: 'bool' },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingRedeem',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [
            {
                name: '',
                type: 'tuple',
                components: [
                    { name: 'receiver', type: 'address' },
                    { name: 'requester', type: 'address' },
                    { name: 'burnedEarnShares', type: 'uint256' },
                    { name: 'engineShares', type: 'uint256' },
                    { name: 'open', type: 'bool' },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewRedeem',
        inputs: [{ name: 'earnShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewWithdraw',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'earnShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'rawEngineShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'redeem',
        inputs: [
            { name: 'earnShares', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minAssets', type: 'uint256' },
        ],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'remainingDepositCapacity',
        inputs: [],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'requestRedeem',
        inputs: [
            { name: 'earnShares', type: 'uint256' },
            { name: 'engineData', type: 'bytes' },
            { name: 'receiver', type: 'address' },
        ],
        outputs: [{ name: 'requestId', type: 'bytes32' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'rewardRateBaseline',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'scheduleDistributorFeeUpdate',
        inputs: [
            { name: 'recipient', type: 'address' },
            { name: 'rateBps', type: 'uint16' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setDepositsPaused',
        inputs: [{ name: 'paused', type: 'bool' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setEmergencyRoles',
        inputs: [
            { name: 'newGuardian', type: 'address' },
            { name: 'newJanitor', type: 'address' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setFeeConfig',
        inputs: [
            {
                name: 'config',
                type: 'tuple',
                components: [
                    { name: 'fixedFeeCount', type: 'uint8' },
                    {
                        name: 'fixedFees',
                        type: 'tuple[4]',
                        components: [
                            { name: 'account', type: 'address' },
                            { name: 'rateBps', type: 'uint16' },
                        ],
                    },
                    {
                        name: 'excess',
                        type: 'tuple',
                        components: [
                            { name: 'enabled', type: 'bool' },
                            { name: 'account', type: 'address' },
                            { name: 'annualTargetRateBps', type: 'uint16' },
                            { name: 'excessFeeRateBps', type: 'uint16' },
                        ],
                    },
                ],
            },
        ],
        outputs: [{ name: 'configId', type: 'uint64' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setMaxManagedAssets',
        inputs: [{ name: 'newMaxManagedAssets', type: 'uint256' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'surplusEngineShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalAssets',
        inputs: [],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalEarnShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'transferDistributor',
        inputs: [{ name: 'newDistributor', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'withdrawExact',
        inputs: [
            { name: 'assets', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'maxEarnShares', type: 'uint256' },
        ],
        outputs: [{ name: 'earnSharesBurned', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'event',
        name: 'Contributed',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'engineShares', type: 'uint256', indexed: false },
            { name: 'anchorEngineShares', type: 'uint256', indexed: false },
            { name: 'anchorEarnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DepositPauseChanged',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'paused', type: 'bool', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Deposited',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorFeeUpdateCancelled',
        inputs: [{ name: 'distributor', type: 'address', indexed: true }],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorFeeUpdateScheduled',
        inputs: [
            { name: 'distributor', type: 'address', indexed: true },
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'rateBps', type: 'uint16', indexed: false },
            { name: 'executableAt', type: 'uint40', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorFeeUpdated',
        inputs: [
            { name: 'recipient', type: 'address', indexed: true },
            { name: 'rateBps', type: 'uint16', indexed: false },
            { name: 'feeConfigId', type: 'uint64', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorTransferCancelled',
        inputs: [
            { name: 'distributor', type: 'address', indexed: true },
            { name: 'pendingDistributor', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorTransferStarted',
        inputs: [
            { name: 'distributor', type: 'address', indexed: true },
            { name: 'pendingDistributor', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DistributorTransferred',
        inputs: [
            { name: 'previousDistributor', type: 'address', indexed: true },
            { name: 'newDistributor', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EmergencyRolesChanged',
        inputs: [
            { name: 'emergencyGuardian', type: 'address', indexed: true },
            { name: 'asyncJanitor', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EngineMigrated',
        inputs: [
            { name: 'oldEngine', type: 'address', indexed: true },
            { name: 'newEngine', type: 'address', indexed: true },
            { name: 'oldEngineShares', type: 'uint256', indexed: false },
            { name: 'assetsMoved', type: 'uint256', indexed: false },
            { name: 'newEngineShares', type: 'uint256', indexed: false },
            { name: 'totalEarnShares', type: 'uint256', indexed: false },
            { name: 'anchorEngineShares', type: 'uint256', indexed: false },
            { name: 'anchorEarnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EngineShareSurplusAbsorbed',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'engineShares', type: 'uint256', indexed: false },
            { name: 'anchorEngineShares', type: 'uint256', indexed: false },
            { name: 'anchorEarnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'MaxManagedAssetsChanged',
        inputs: [
            { name: 'previousMaxManagedAssets', type: 'uint256', indexed: false },
            { name: 'newMaxManagedAssets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemCancelled',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemFinalized',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
            { name: 'asset', type: 'address', indexed: false },
            { name: 'assets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemRequested',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'requester', type: 'address', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Redeemed',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'earnShares', type: 'uint256', indexed: false },
            { name: 'assets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'VenueSharesDeposited',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'requestedVenueShares', type: 'uint256', indexed: false },
            { name: 'receivedEngineShares', type: 'uint256', indexed: false },
            { name: 'earnShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'WithdrewExact',
        inputs: [
            { name: 'caller', type: 'address', indexed: true },
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'earnSharesBurned', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'ActiveSupplyWithoutBacking', inputs: [] },
    { type: 'error', name: 'AlreadyInitialized', inputs: [] },
    { type: 'error', name: 'DepositsPaused', inputs: [] },
    { type: 'error', name: 'DistributorFeeUpdateNotPending', inputs: [] },
    {
        type: 'error',
        name: 'DistributorFeeUpdateNotReady',
        inputs: [{ name: 'executableAt', type: 'uint40' }],
    },
    { type: 'error', name: 'DistributorTransferNotPending', inputs: [] },
    {
        type: 'error',
        name: 'DuplicateRequest',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    { type: 'error', name: 'EngineAssetMismatch', inputs: [] },
    {
        type: 'error',
        name: 'EngineCapabilityUnsupported',
        inputs: [{ name: 'interfaceId', type: 'bytes4' }],
    },
    { type: 'error', name: 'EngineEarnVaultMismatch', inputs: [] },
    { type: 'error', name: 'EngineExitUnsupported', inputs: [] },
    { type: 'error', name: 'ExceedsMaxEarnShares', inputs: [] },
    {
        type: 'error',
        name: 'ExcessiveConversionLoss',
        inputs: [
            { name: 'inputShares', type: 'uint256' },
            { name: 'representedShares', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'ExcessiveMigrationClassificationError',
        inputs: [
            { name: 'expectedManagedAssets', type: 'uint256' },
            { name: 'actualManagedAssets', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'FeeValuationStale', inputs: [] },
    {
        type: 'error',
        name: 'FinalizedAssetMismatch',
        inputs: [{ name: 'finalizedAsset', type: 'address' }],
    },
    { type: 'error', name: 'GlobalFeeDisableUnavailable', inputs: [] },
    { type: 'error', name: 'InitialEarnShareSupplyNotZero', inputs: [] },
    {
        type: 'error',
        name: 'InsufficientEngineShareSurplus',
        inputs: [
            { name: 'available', type: 'uint256' },
            { name: 'requested', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'InsufficientOutput', inputs: [] },
    { type: 'error', name: 'InvalidDistributorConfiguration', inputs: [] },
    { type: 'error', name: 'InvalidDistributorFeeConfiguration', inputs: [] },
    { type: 'error', name: 'InvalidEarnDecimals', inputs: [] },
    { type: 'error', name: 'InvalidEngineShareScale', inputs: [] },
    {
        type: 'error',
        name: 'MaxManagedAssetsExceeded',
        inputs: [
            { name: 'maximum', type: 'uint256' },
            { name: 'actual', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'MinimumAssetsNotMet',
        inputs: [
            { name: 'minimumAssets', type: 'uint256' },
            { name: 'actualAssets', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'MinimumEarnSharesNotMet',
        inputs: [
            { name: 'minimumEarnShares', type: 'uint256' },
            { name: 'actualEarnShares', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'MinimumEngineSharesNotMet',
        inputs: [
            { name: 'minimumEngineShares', type: 'uint256' },
            { name: 'actualEngineShares', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'NoEarnShares', inputs: [] },
    { type: 'error', name: 'NotDistributor', inputs: [] },
    { type: 'error', name: 'NotEmergencyGuardianOrOperator', inputs: [] },
    { type: 'error', name: 'NotEngine', inputs: [] },
    { type: 'error', name: 'NotOperator', inputs: [] },
    { type: 'error', name: 'NotPendingDistributor', inputs: [] },
    { type: 'error', name: 'NotRequesterOrJanitor', inputs: [] },
    { type: 'error', name: 'OperatorMigrationDisabled', inputs: [] },
    { type: 'error', name: 'PendingRedeemsOpen', inputs: [] },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    {
        type: 'error',
        name: 'RequestNotOpen',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    { type: 'error', name: 'ResidualBacking', inputs: [] },
    {
        type: 'error',
        name: 'RewardRateLimitExceeded',
        inputs: [
            { name: 'normalizedRate', type: 'uint256' },
            { name: 'baselineRate', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'SameEngine', inputs: [] },
    { type: 'error', name: 'TokenCallFailed', inputs: [] },
    { type: 'error', name: 'TokenCallFalse', inputs: [] },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
    { type: 'error', name: 'ZeroAmount', inputs: [] },
    { type: 'error', name: 'ZeroMinimumAssets', inputs: [] },
    { type: 'error', name: 'ZeroMinimumEarnShares', inputs: [] },
    { type: 'error', name: 'ZeroMinimumEngineShares', inputs: [] },
];
exports.erc4626Engine = [
    {
        type: 'constructor',
        inputs: [
            { name: 'vault_', type: 'address' },
            { name: 'owner_', type: 'address' },
            { name: 'nameOverride_', type: 'string' },
            { name: 'symbolOverride_', type: 'string' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'acceptOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'baseAsset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'deposit',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'depositInKind',
        inputs: [
            { name: 'venueShares', type: 'uint256' },
            { name: 'from', type: 'address' },
        ],
        outputs: [{ name: 'engineSharesReceived', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'initializeEarnVault',
        inputs: [
            { name: 'earnVault_', type: 'address' },
            { name: 'finalOwner_', type: 'address' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'initializeEarnVault',
        inputs: [{ name: 'earnVault_', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'name',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'owner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingOwner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewRedeem',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewWithdraw',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'redeem',
        inputs: [
            { name: 'engineShares', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minAssets', type: 'uint256' },
        ],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'renounceOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'shareScale',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'supportsInterface',
        inputs: [{ name: 'interfaceId', type: 'bytes4' }],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'pure',
    },
    {
        type: 'function',
        name: 'symbol',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalAssets',
        inputs: [],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'transferOwnership',
        inputs: [{ name: 'newOwner', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'valueOf',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'vault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'withdraw',
        inputs: [
            { name: 'assets', type: 'uint256' },
            { name: 'receiver', type: 'address' },
        ],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'event',
        name: 'Deposited',
        inputs: [
            { name: 'earnVault', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'engineShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EarnVaultInitialized',
        inputs: [{ name: 'earnVault', type: 'address', indexed: true }],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferStarted',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferred',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Redeemed',
        inputs: [
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'engineShares', type: 'uint256', indexed: false },
            { name: 'assets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'VenueSharesDeposited',
        inputs: [
            { name: 'from', type: 'address', indexed: true },
            { name: 'requestedVenueShares', type: 'uint256', indexed: false },
            { name: 'receivedEngineShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'WithdrewExact',
        inputs: [
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'engineSharesBurned', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'AlreadyInitialized', inputs: [] },
    { type: 'error', name: 'EarnVaultNotSet', inputs: [] },
    { type: 'error', name: 'EmptyMetadata', inputs: [] },
    {
        type: 'error',
        name: 'InsufficientAssetsReceived',
        inputs: [
            { name: 'minimumAssets', type: 'uint256' },
            { name: 'actualAssets', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'InvalidVenueShareDecimals', inputs: [] },
    { type: 'error', name: 'NoVenueSharesReceived', inputs: [] },
    {
        type: 'error',
        name: 'NotEarnVault',
        inputs: [{ name: 'caller', type: 'address' }],
    },
    {
        type: 'error',
        name: 'OwnableInvalidOwner',
        inputs: [{ name: 'owner', type: 'address' }],
    },
    {
        type: 'error',
        name: 'OwnableUnauthorizedAccount',
        inputs: [{ name: 'account', type: 'address' }],
    },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    { type: 'error', name: 'TransferFailed', inputs: [] },
    {
        type: 'error',
        name: 'UnexpectedAssetsReceived',
        inputs: [
            { name: 'expectedAssets', type: 'uint256' },
            { name: 'actualAssets', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'UnexpectedVenueSharesBurned',
        inputs: [
            { name: 'expectedShares', type: 'uint256' },
            { name: 'actualShares', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
];
exports.erc4626EngineFactory = [
    {
        type: 'function',
        name: 'ENGINE_SALT_DOMAIN',
        inputs: [],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'computeEngineSalt',
        inputs: [
            { name: 'deploymentId', type: 'bytes32' },
            { name: 'vault', type: 'address' },
            { name: 'owner', type: 'address' },
            { name: 'nameOverride', type: 'string' },
            { name: 'symbolOverride', type: 'string' },
        ],
        outputs: [{ name: '', type: 'bytes32' }],
        stateMutability: 'pure',
    },
    {
        type: 'function',
        name: 'deploy',
        inputs: [
            { name: 'deploymentId', type: 'bytes32' },
            { name: 'vault', type: 'address' },
            { name: 'owner', type: 'address' },
            { name: 'nameOverride', type: 'string' },
            { name: 'symbolOverride', type: 'string' },
        ],
        outputs: [{ name: 'engine', type: 'address' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'predictEngine',
        inputs: [
            { name: 'deploymentId', type: 'bytes32' },
            { name: 'vault', type: 'address' },
            { name: 'owner', type: 'address' },
            { name: 'nameOverride', type: 'string' },
            { name: 'symbolOverride', type: 'string' },
        ],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'event',
        name: 'ERC4626EngineDeployed',
        inputs: [
            { name: 'engine', type: 'address', indexed: true },
            { name: 'vault', type: 'address', indexed: true },
            { name: 'owner', type: 'address', indexed: true },
            { name: 'asset', type: 'address', indexed: false },
            { name: 'deploymentId', type: 'bytes32', indexed: false },
            { name: 'engineSalt', type: 'bytes32', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'EmptyDeploymentId', inputs: [] },
    {
        type: 'error',
        name: 'EngineAlreadyExists',
        inputs: [{ name: 'engine', type: 'address' }],
    },
    { type: 'error', name: 'FactoryCannotBeFinalOwner', inputs: [] },
];
exports.vedaEngine = [
    {
        type: 'constructor',
        inputs: [
            { name: 'peripheryRegistry_', type: 'address' },
            { name: 'owner_', type: 'address' },
            { name: 'maxRateAge_', type: 'uint64' },
            { name: 'name_', type: 'string' },
            { name: 'symbol_', type: 'string' },
        ],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'acceptOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'accountant',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'accountantRateUpdatedAt',
        inputs: [],
        outputs: [{ name: '', type: 'uint64' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'asset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'authorizedForwarder',
        inputs: [{ name: 'forwarder', type: 'address' }],
        outputs: [{ name: 'authorized', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'baseAsset',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'cancelRedeem',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'claimQueue',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'claimRedeem',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [{ name: 'amount', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'deposit',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'earnVault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'finalizeOneExternal',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'forwardSolved',
        inputs: [
            { name: 'requestIds', type: 'bytes32[]' },
            { name: 'asset_', type: 'address' },
            { name: 'delta', type: 'uint256' },
        ],
        outputs: [{ name: 'claimed', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'getClaim',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
        outputs: [
            { name: 'status', type: 'uint8' },
            {
                name: 'request',
                type: 'tuple',
                components: [
                    { name: 'nonce', type: 'uint96' },
                    { name: 'user', type: 'address' },
                    { name: 'assetOut', type: 'address' },
                    { name: 'amountOfShares', type: 'uint128' },
                    { name: 'amountOfAssets', type: 'uint128' },
                    { name: 'creationTime', type: 'uint40' },
                    { name: 'secondsToMaturity', type: 'uint24' },
                    { name: 'secondsToDeadline', type: 'uint24' },
                ],
            },
        ],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'initializeEarnVault',
        inputs: [
            { name: 'earnVault_', type: 'address' },
            { name: 'finalOwner_', type: 'address' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'initializeEarnVault',
        inputs: [{ name: 'earnVault_', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'isFeeValuationFresh',
        inputs: [],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'maxRateAge',
        inputs: [],
        outputs: [{ name: '', type: 'uint64' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'name',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'openClaimsByQueue',
        inputs: [{ name: 'requestQueue', type: 'address' }],
        outputs: [{ name: 'count', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'owner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'pendingOwner',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'peripheryRegistry',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'peripheryVersion',
        inputs: [],
        outputs: [{ name: '', type: 'uint64' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewRedeem',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'previewWithdraw',
        inputs: [{ name: 'assets', type: 'uint256' }],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'queue',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'rate',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'recoverExternalSettlement',
        inputs: [{ name: 'requestIds', type: 'bytes32[]' }],
        outputs: [{ name: 'claimed', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'redeem',
        inputs: [
            { name: 'engineShares', type: 'uint256' },
            { name: 'receiver', type: 'address' },
            { name: 'minAssets', type: 'uint256' },
        ],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'renounceOwnership',
        inputs: [],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'requestRedeem',
        inputs: [
            { name: 'engineShares', type: 'uint256' },
            { name: 'requestData', type: 'bytes' },
        ],
        outputs: [{ name: 'requestId', type: 'bytes32' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setAuthorizedForwarder',
        inputs: [
            { name: 'account', type: 'address' },
            { name: 'authorized', type: 'bool' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'setMaxRateAge',
        inputs: [{ name: 'newMaxRateAge', type: 'uint64' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'settled',
        inputs: [{ name: 'asset', type: 'address' }],
        outputs: [{ name: 'amount', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'shareScale',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'supportsInterface',
        inputs: [{ name: 'interfaceId', type: 'bytes4' }],
        outputs: [{ name: '', type: 'bool' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'sweepDust',
        inputs: [
            { name: 'token', type: 'address' },
            { name: 'to', type: 'address' },
            { name: 'amount', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'symbol',
        inputs: [],
        outputs: [{ name: '', type: 'string' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'syncVedaPeriphery',
        inputs: [
            { name: 'minRate', type: 'uint256' },
            { name: 'maxRate', type: 'uint256' },
        ],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'teller',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalAssets',
        inputs: [],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'totalShares',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'transferOwnership',
        inputs: [{ name: 'newOwner', type: 'address' }],
        outputs: [],
        stateMutability: 'nonpayable',
    },
    {
        type: 'function',
        name: 'unresolvedClaimCount',
        inputs: [],
        outputs: [{ name: '', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'valueOf',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
        outputs: [{ name: 'assets', type: 'uint256' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'vault',
        inputs: [],
        outputs: [{ name: '', type: 'address' }],
        stateMutability: 'view',
    },
    {
        type: 'function',
        name: 'withdraw',
        inputs: [
            { name: 'assets', type: 'uint256' },
            { name: 'receiver', type: 'address' },
        ],
        outputs: [{ name: 'engineShares', type: 'uint256' }],
        stateMutability: 'nonpayable',
    },
    {
        type: 'event',
        name: 'AuthorizedForwarderChanged',
        inputs: [
            { name: 'account', type: 'address', indexed: true },
            { name: 'authorized', type: 'bool', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Deposited',
        inputs: [
            { name: 'earnVault', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'engineShares', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'DustSwept',
        inputs: [
            { name: 'token', type: 'address', indexed: true },
            { name: 'to', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'EarnVaultInitialized',
        inputs: [{ name: 'earnVault', type: 'address', indexed: true }],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'ExternalSettlementRecovered',
        inputs: [
            { name: 'requestCount', type: 'uint256', indexed: false },
            { name: 'recoveredAssets', type: 'uint256', indexed: false },
            { name: 'claimed', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'FinalizeFailed',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'asset', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Finalized',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'asset', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'MaxRateAgeUpdated',
        inputs: [
            { name: 'oldMaxRateAge', type: 'uint64', indexed: false },
            { name: 'newMaxRateAge', type: 'uint64', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferStarted',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'OwnershipTransferred',
        inputs: [
            { name: 'previousOwner', type: 'address', indexed: true },
            { name: 'newOwner', type: 'address', indexed: true },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemCancelledOnQueue',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'engineShares', type: 'uint128', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemClaimed',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'asset', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'RedeemRequested',
        inputs: [
            { name: 'requestId', type: 'bytes32', indexed: true },
            { name: 'assetOut', type: 'address', indexed: true },
            { name: 'engineShares', type: 'uint128', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Redeemed',
        inputs: [
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'engineShares', type: 'uint256', indexed: false },
            { name: 'assets', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Settled',
        inputs: [
            { name: 'asset', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
            { name: 'newTotal', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'Unearmarked',
        inputs: [
            { name: 'asset', type: 'address', indexed: true },
            { name: 'amount', type: 'uint256', indexed: false },
            { name: 'newTotal', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'VedaPeripheryUpdated',
        inputs: [
            { name: 'registryVersion', type: 'uint64', indexed: true },
            { name: 'oldTeller', type: 'address', indexed: true },
            { name: 'oldQueue', type: 'address', indexed: true },
            { name: 'oldAccountant', type: 'address', indexed: false },
            { name: 'newTeller', type: 'address', indexed: false },
            { name: 'newQueue', type: 'address', indexed: false },
            { name: 'newAccountant', type: 'address', indexed: false },
            { name: 'validatedRate', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    {
        type: 'event',
        name: 'WithdrewExact',
        inputs: [
            { name: 'receiver', type: 'address', indexed: true },
            { name: 'assets', type: 'uint256', indexed: false },
            { name: 'engineSharesBurned', type: 'uint256', indexed: false },
        ],
        anonymous: false,
    },
    { type: 'error', name: 'AlreadyInitialized', inputs: [] },
    {
        type: 'error',
        name: 'AssetsNotArrived',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    {
        type: 'error',
        name: 'BaseAssetSweepBlocked',
        inputs: [{ name: 'unresolvedClaims', type: 'uint256' }],
    },
    { type: 'error', name: 'CannotSweepEngineBacking', inputs: [] },
    {
        type: 'error',
        name: 'ClaimNotClaimable',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    {
        type: 'error',
        name: 'ClaimNotOpen',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    {
        type: 'error',
        name: 'CreditExceedsBalance',
        inputs: [
            { name: 'asset', type: 'address' },
            { name: 'have', type: 'uint256' },
            { name: 'wantTotal', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'DepositsNotPaused', inputs: [] },
    {
        type: 'error',
        name: 'DuplicateRequest',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    { type: 'error', name: 'EarnVaultNotSet', inputs: [] },
    { type: 'error', name: 'EmptyMetadata', inputs: [] },
    {
        type: 'error',
        name: 'EngineSharesTooLarge',
        inputs: [{ name: 'engineShares', type: 'uint256' }],
    },
    {
        type: 'error',
        name: 'InsufficientAssetsReceived',
        inputs: [
            { name: 'minimumAssets', type: 'uint256' },
            { name: 'actualAssets', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'InvalidAsset',
        inputs: [
            { name: 'expected', type: 'address' },
            { name: 'actual', type: 'address' },
        ],
    },
    { type: 'error', name: 'InvalidMaxRateAge', inputs: [] },
    {
        type: 'error',
        name: 'InvalidRateTimestamp',
        inputs: [
            { name: 'updatedAt', type: 'uint256' },
            { name: 'currentTime', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'InvalidTrackedRequest',
        inputs: [{ name: 'requestId', type: 'bytes32' }],
    },
    {
        type: 'error',
        name: 'InvalidVedaPeriphery',
        inputs: [{ name: 'account', type: 'address' }],
    },
    {
        type: 'error',
        name: 'InvalidVedaPeripheryWiring',
        inputs: [
            { name: 'component', type: 'address' },
            { name: 'expected', type: 'address' },
            { name: 'actual', type: 'address' },
        ],
    },
    {
        type: 'error',
        name: 'InvalidVedaRateBounds',
        inputs: [
            { name: 'minRate', type: 'uint256' },
            { name: 'maxRate', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'InvalidVenueShareDecimals', inputs: [] },
    { type: 'error', name: 'NoPublishedVedaPeriphery', inputs: [] },
    { type: 'error', name: 'NoRecoverableClaims', inputs: [] },
    { type: 'error', name: 'NoVenueSharesReceived', inputs: [] },
    {
        type: 'error',
        name: 'NotAuthorizedForwarder',
        inputs: [{ name: 'caller', type: 'address' }],
    },
    {
        type: 'error',
        name: 'NotEarnVault',
        inputs: [{ name: 'caller', type: 'address' }],
    },
    { type: 'error', name: 'NotSelf', inputs: [] },
    {
        type: 'error',
        name: 'OwnableInvalidOwner',
        inputs: [{ name: 'owner', type: 'address' }],
    },
    {
        type: 'error',
        name: 'OwnableUnauthorizedAccount',
        inputs: [{ name: 'account', type: 'address' }],
    },
    {
        type: 'error',
        name: 'QueueTrackingDisabled',
        inputs: [{ name: 'queue', type: 'address' }],
    },
    { type: 'error', name: 'QueueUnavailable', inputs: [] },
    {
        type: 'error',
        name: 'RateChangedWithinTransaction',
        inputs: [
            { name: 'expected', type: 'uint256' },
            { name: 'actual', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'ReentrantCall', inputs: [] },
    {
        type: 'error',
        name: 'RegistryEngineMismatch',
        inputs: [
            { name: 'expected', type: 'address' },
            { name: 'actual', type: 'address' },
        ],
    },
    {
        type: 'error',
        name: 'SolveUnderfunded',
        inputs: [
            { name: 'asset', type: 'address' },
            { name: 'delivered', type: 'uint256' },
            { name: 'required', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'StaleAccountantRate',
        inputs: [
            { name: 'updatedAt', type: 'uint256' },
            { name: 'currentTime', type: 'uint256' },
            { name: 'maxAge', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'SweepExceedsAvailableBalance',
        inputs: [
            { name: 'token', type: 'address' },
            { name: 'available', type: 'uint256' },
            { name: 'requested', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'TransferFailed', inputs: [] },
    {
        type: 'error',
        name: 'UnexpectedAssetsReceived',
        inputs: [
            { name: 'expectedAssets', type: 'uint256' },
            { name: 'actualAssets', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'UnexpectedVenueSharesBurned',
        inputs: [
            { name: 'expectedShares', type: 'uint256' },
            { name: 'actualShares', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'UnexpectedVenueSharesQueued',
        inputs: [
            { name: 'expectedShares', type: 'uint256' },
            { name: 'actualShares', type: 'uint256' },
        ],
    },
    {
        type: 'error',
        name: 'UnsupportedAccountantFreshness',
        inputs: [{ name: 'accountant', type: 'address' }],
    },
    {
        type: 'error',
        name: 'VedaRateOutOfBounds',
        inputs: [
            { name: 'rate', type: 'uint256' },
            { name: 'minRate', type: 'uint256' },
            { name: 'maxRate', type: 'uint256' },
        ],
    },
    { type: 'error', name: 'ZeroAddress', inputs: [] },
];
exports.earnRouterCallbackData = [
    {
        components: [
            { name: 'flow', type: 'uint8' },
            { name: 'minVaultAssets', type: 'uint128' },
            { name: 'minEarnShares', type: 'uint128' },
            { name: 'minOutputAmount', type: 'uint128' },
            { name: 'actionId', type: 'bytes32' },
            {
                components: [
                    { name: 'keyIndex', type: 'uint256' },
                    {
                        components: [
                            { name: 'ephemeralPubkeyX', type: 'bytes32' },
                            { name: 'ephemeralPubkeyYParity', type: 'uint8' },
                            { name: 'ciphertext', type: 'bytes' },
                            { name: 'nonce', type: 'bytes12' },
                            { name: 'tag', type: 'bytes16' },
                        ],
                        name: 'encrypted',
                        type: 'tuple',
                    },
                    { name: 'refundRecipient', type: 'address' },
                ],
                name: 'zoneReturn',
                type: 'tuple',
            },
        ],
        name: 'callbackData',
        type: 'tuple',
    },
];
exports.zoneOutbox = [
    {
        name: 'tempoGasRate',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint128' }],
    },
    {
        name: 'maxWithdrawalsPerBlock',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint32' }],
    },
    {
        name: 'lastBatch',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            {
                type: 'tuple',
                components: [
                    { type: 'bytes32', name: 'withdrawalQueueHash' },
                    { type: 'uint64', name: 'withdrawalBatchIndex' },
                ],
            },
        ],
    },
    {
        name: 'lastFinalizedTimestamp',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'nextWithdrawalIndex',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'lastFallbackNonce',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'pendingWithdrawalsCount',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'getPendingWithdrawals',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [
            {
                type: 'tuple[]',
                components: [
                    { type: 'address', name: 'token' },
                    { type: 'address', name: 'sender' },
                    { type: 'bytes32', name: 'txHash' },
                    { type: 'address', name: 'to' },
                    { type: 'uint128', name: 'amount' },
                    { type: 'bytes32', name: 'memo' },
                    { type: 'uint64', name: 'gasLimit' },
                    { type: 'uint64', name: 'fallbackNonce' },
                    { type: 'bytes', name: 'callbackData' },
                    { type: 'bytes', name: 'revealTo' },
                ],
            },
        ],
    },
    {
        name: 'consumeFallbackRecipient',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint64', name: 'fallbackNonce' }],
        outputs: [{ type: 'address', name: 'recipient' }],
    },
    {
        name: 'calculateWithdrawalFee',
        type: 'function',
        stateMutability: 'view',
        inputs: [{ type: 'uint64', name: 'gasLimit' }],
        outputs: [{ type: 'uint128', name: 'fee' }],
    },
    {
        name: 'MAX_CALLBACK_DATA_SIZE',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'MAX_WITHDRAWAL_GAS_LIMIT',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'WITHDRAWAL_BASE_GAS',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint64' }],
    },
    {
        name: 'REVEAL_TO_KEY_LENGTH',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'AUTHENTICATED_WITHDRAWAL_CIPHERTEXT_LENGTH',
        type: 'function',
        stateMutability: 'view',
        inputs: [],
        outputs: [{ type: 'uint256' }],
    },
    {
        name: 'setTempoGasRate',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint128', name: '_tempoGasRate' }],
        outputs: [],
    },
    {
        name: 'setMaxWithdrawalsPerBlock',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [{ type: 'uint32', name: '_maxWithdrawalsPerBlock' }],
        outputs: [],
    },
    {
        name: 'requestWithdrawal',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'address', name: 'to' },
            { type: 'uint128', name: 'amount' },
            { type: 'bytes32', name: 'memo' },
            { type: 'uint64', name: 'gasLimit' },
            { type: 'address', name: 'zoneFallbackRecipient' },
            { type: 'bytes', name: 'data' },
            { type: 'bytes', name: 'revealTo' },
        ],
        outputs: [],
    },
    {
        name: 'enqueueDepositBounceBack',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'address', name: 'token' },
            { type: 'uint128', name: 'amount' },
            { type: 'address', name: 'tempoRefundRecipient' },
        ],
        outputs: [],
    },
    {
        name: 'finalizeWithdrawalBatch',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint256', name: 'count' },
            { type: 'uint64', name: 'blockNumber' },
            { type: 'bytes[]', name: 'encryptedSenders' },
        ],
        outputs: [{ type: 'bytes32', name: 'withdrawalQueueHash' }],
    },
    {
        name: 'WithdrawalRequested',
        type: 'event',
        inputs: [
            { type: 'uint64', name: 'withdrawalIndex', indexed: true },
            { type: 'address', name: 'sender', indexed: true },
            { type: 'address', name: 'token' },
            { type: 'address', name: 'to' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint128', name: 'fee' },
            { type: 'bytes32', name: 'memo' },
            { type: 'uint64', name: 'gasLimit' },
            { type: 'uint64', name: 'fallbackNonce' },
            { type: 'bytes', name: 'data' },
            { type: 'bytes', name: 'revealTo' },
        ],
    },
    {
        name: 'BatchFinalized',
        type: 'event',
        inputs: [
            { type: 'bytes32', name: 'withdrawalQueueHash', indexed: true },
            { type: 'uint64', name: 'withdrawalBatchIndex' },
        ],
    },
    {
        name: 'TempoGasRateUpdated',
        type: 'event',
        inputs: [{ type: 'uint128', name: 'tempoGasRate' }],
    },
    {
        name: 'MaxWithdrawalsPerBlockUpdated',
        type: 'event',
        inputs: [{ type: 'uint32', name: 'maxWithdrawalsPerBlock' }],
    },
    { name: 'OnlySequencer', type: 'error', inputs: [] },
    { name: 'GasLimitTooHigh', type: 'error', inputs: [] },
    { name: 'OnlyZoneInbox', type: 'error', inputs: [] },
    {
        name: 'InvalidWithdrawalCount',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'actual' },
            { type: 'uint256', name: 'expected' },
        ],
    },
    {
        name: 'InvalidEncryptedSenderCount',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'actual' },
            { type: 'uint256', name: 'expected' },
        ],
    },
    {
        name: 'InvalidEncryptedSenderLength',
        type: 'error',
        inputs: [
            { type: 'uint256', name: 'actual' },
            { type: 'uint256', name: 'expected' },
        ],
    },
    { name: 'InvalidFallbackRecipient', type: 'error', inputs: [] },
    { name: 'CallbackDataTooLarge', type: 'error', inputs: [] },
    { name: 'GasFeeRateTooHigh', type: 'error', inputs: [] },
    { name: 'TransferFailed', type: 'error', inputs: [] },
    { name: 'InvalidBlockNumber', type: 'error', inputs: [] },
    { name: 'TooManyWithdrawalsThisBlock', type: 'error', inputs: [] },
    { name: 'InvalidRevealTo', type: 'error', inputs: [] },
    { name: 'InvalidCurrentTxHash', type: 'error', inputs: [] },
    { name: 'ZeroAmountWithdrawal', type: 'error', inputs: [] },
    { name: 'StaticCallNotAllowed', type: 'error', inputs: [] },
];
exports.zoneMessenger = [
    {
        name: 'relayMessage',
        type: 'function',
        stateMutability: 'nonpayable',
        inputs: [
            { type: 'uint32', name: 'zoneId' },
            { type: 'address', name: 'token' },
            { type: 'bytes32', name: 'senderTag' },
            { type: 'address', name: 'target' },
            { type: 'uint128', name: 'amount' },
            { type: 'uint64', name: 'gasLimit' },
            { type: 'bytes', name: 'data' },
        ],
        outputs: [],
    },
];
exports.zoneVerifier = [
    {
        name: 'verify',
        type: 'function',
        stateMutability: 'view',
        inputs: [
            { type: 'uint32', name: 'zoneId' },
            { type: 'uint64', name: 'tempoBlockNumber' },
            { type: 'uint64', name: 'anchorBlockNumber' },
            { type: 'bytes32', name: 'anchorBlockHash' },
            { type: 'uint64', name: 'expectedWithdrawalBatchIndex' },
            {
                type: 'tuple',
                name: 'blockTransition',
                components: [
                    { type: 'bytes32', name: 'prevBlockHash' },
                    { type: 'bytes32', name: 'nextBlockHash' },
                ],
            },
            {
                type: 'tuple',
                name: 'depositQueueTransition',
                components: [
                    { type: 'bytes32', name: 'prevProcessedHash' },
                    { type: 'bytes32', name: 'nextProcessedHash' },
                    { type: 'uint64', name: 'prevDepositNumber' },
                    { type: 'uint64', name: 'nextDepositNumber' },
                ],
            },
            { type: 'bytes32', name: 'withdrawalQueueHash' },
            { type: 'bytes', name: 'verifierConfig' },
            { type: 'bytes', name: 'proof' },
        ],
        outputs: [{ type: 'bool' }],
    },
];
exports.core = [
    ...exports.accountKeychain,
    ...exports.addressRegistry,
    ...exports.currentCommittee,
    ...exports.feeAmm,
    ...exports.feeManager,
    ...exports.nativeMultisig,
    ...exports.nonce,
    ...exports.receivePolicyGuard,
    ...exports.signatureVerifier,
    ...exports.stablecoinDex,
    ...exports.storageCredits,
    ...exports.tip20,
    ...exports.tip20ChannelReserve,
    ...exports.tip20Factory,
    ...exports.tip403Registry,
    ...exports.validatorConfig,
    ...exports.validatorConfigV2,
    ...exports.zoneFactory,
    ...exports.zonePortal,
];
exports.earn = [
    ...exports.earnContributionController,
    ...exports.earnEngine,
    ...exports.earnEngineAsyncRedeem,
    ...exports.earnEngineInKindDeposit,
    ...exports.earnFactory,
    ...exports.earnFees,
    ...exports.earnMerkleRewardDistributor,
    ...exports.earnRouter,
    ...exports.earnVault,
    ...exports.erc4626Engine,
    ...exports.erc4626EngineFactory,
    ...exports.vedaEngine,
];
exports.zone = [...exports.zoneMessenger, ...exports.zoneOutbox, ...exports.zoneVerifier];
exports.all = [...exports.core, ...exports.earn, ...exports.zone];
//# sourceMappingURL=Abis.js.map