//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// EpochManager
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const epochManagerAbi = [
  {
    type: 'function',
    inputs: [{ name: 'block', internalType: 'uint256', type: 'uint256' }],
    name: 'blockHash',
    outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'blockNum',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentEpoch',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentEpochBlock',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentEpochBlockSinceStart',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'epochLength',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'epoch', internalType: 'uint256', type: 'uint256' }],
    name: 'epochsSince',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'epochsSinceUpdate',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'isCurrentEpochRun',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  { type: 'function', inputs: [], name: 'runEpoch', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [{ name: 'epochLength', internalType: 'uint256', type: 'uint256' }],
    name: 'setEpochLength',
    outputs: [],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// GraphTokenLockWallet
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const graphTokenLockWalletAbi = [
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: '_oldManager', internalType: 'address', type: 'address', indexed: true },
      { name: '_newManager', internalType: 'address', type: 'address', indexed: true },
    ],
    name: 'ManagerUpdated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'previousOwner', internalType: 'address', type: 'address', indexed: true },
      { name: 'newOwner', internalType: 'address', type: 'address', indexed: true },
    ],
    name: 'OwnershipTransferred',
  },
  { type: 'event', anonymous: false, inputs: [], name: 'TokenDestinationsApproved' },
  { type: 'event', anonymous: false, inputs: [], name: 'TokenDestinationsRevoked' },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'beneficiary', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensReleased',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'beneficiary', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensRevoked',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'beneficiary', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensWithdrawn',
  },
  { type: 'fallback', stateMutability: 'payable' },
  {
    type: 'function',
    inputs: [],
    name: 'amountPerPeriod',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  { type: 'function', inputs: [], name: 'approveProtocol', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [],
    name: 'beneficiary',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentBalance',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentPeriod',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'currentTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'delegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'deprovision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'duration',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'endTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'isRevoked',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'managedAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'passedPeriods',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'periodDuration',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'periods',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
    ],
    name: 'provisionLocked',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'releasableAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  { type: 'function', inputs: [], name: 'release', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [],
    name: 'releaseStartTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'releasedAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'revocable',
    outputs: [{ name: '', internalType: 'enum IGraphTokenLockWallet.Revocability', type: 'uint8' }],
    stateMutability: 'view',
  },
  { type: 'function', inputs: [], name: 'revokeProtocol', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'paymentType', internalType: 'enum IGraphPayments.PaymentTypes', type: 'uint8' },
      { name: 'feeCut', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'setDelegationFeeCut',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'operator', internalType: 'address', type: 'address' },
      { name: 'allowed', internalType: 'bool', type: 'bool' },
    ],
    name: 'setOperatorLocked',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'rewardsDestination', internalType: 'address', type: 'address' },
    ],
    name: 'setRewardsDestination',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'sinceStartTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'tokens', internalType: 'uint256', type: 'uint256' }],
    name: 'stake',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'startTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'surplusAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'thaw',
    outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'token',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'totalOutstandingAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'shares', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'undelegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'tokens', internalType: 'uint256', type: 'uint256' }],
    name: 'unstake',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'usedAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'vestedAmount',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'vestingCliffTime',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  { type: 'function', inputs: [], name: 'withdraw', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'withdrawDelegated',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address' },
      { name: '__DEPRECATED_delegateToIndexer', internalType: 'address', type: 'address' },
    ],
    name: 'withdrawDelegated',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: '_amount', internalType: 'uint256', type: 'uint256' }],
    name: 'withdrawSurplus',
    outputs: [],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// HorizonStaking
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const horizonStakingAbi = [
  { type: 'error', inputs: [], name: 'HorizonStakingCallerIsServiceProvider' },
  {
    type: 'error',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'minTokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingInsufficientDelegationTokens',
  },
  {
    type: 'error',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'minTokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingInsufficientIdleStake',
  },
  {
    type: 'error',
    inputs: [
      { name: 'shares', internalType: 'uint256', type: 'uint256' },
      { name: 'minShares', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingInsufficientShares',
  },
  {
    type: 'error',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'minTokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingInsufficientStakeForLegacyAllocations',
  },
  {
    type: 'error',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'minRequired', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingInsufficientTokens',
  },
  {
    type: 'error',
    inputs: [{ name: 'feeCut', internalType: 'uint256', type: 'uint256' }],
    name: 'HorizonStakingInvalidDelegationFeeCut',
  },
  {
    type: 'error',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'HorizonStakingInvalidDelegationPool',
  },
  {
    type: 'error',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'HorizonStakingInvalidDelegationPoolState',
  },
  {
    type: 'error',
    inputs: [{ name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' }],
    name: 'HorizonStakingInvalidMaxVerifierCut',
  },
  {
    type: 'error',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'HorizonStakingInvalidProvision',
  },
  { type: 'error', inputs: [], name: 'HorizonStakingInvalidServiceProviderZeroAddress' },
  { type: 'error', inputs: [], name: 'HorizonStakingInvalidThawRequestType' },
  {
    type: 'error',
    inputs: [
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
      { name: 'maxThawingPeriod', internalType: 'uint64', type: 'uint64' },
    ],
    name: 'HorizonStakingInvalidThawingPeriod',
  },
  {
    type: 'error',
    inputs: [{ name: 'verifier', internalType: 'address', type: 'address' }],
    name: 'HorizonStakingInvalidVerifier',
  },
  { type: 'error', inputs: [], name: 'HorizonStakingInvalidVerifierZeroAddress' },
  { type: 'error', inputs: [], name: 'HorizonStakingInvalidZeroShares' },
  { type: 'error', inputs: [], name: 'HorizonStakingInvalidZeroTokens' },
  { type: 'error', inputs: [], name: 'HorizonStakingLegacySlashFailed' },
  { type: 'error', inputs: [], name: 'HorizonStakingNoTokensToSlash' },
  {
    type: 'error',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'caller', internalType: 'address', type: 'address' },
    ],
    name: 'HorizonStakingNotAuthorized',
  },
  { type: 'error', inputs: [], name: 'HorizonStakingNothingThawing' },
  { type: 'error', inputs: [], name: 'HorizonStakingNothingToWithdraw' },
  { type: 'error', inputs: [], name: 'HorizonStakingProvisionAlreadyExists' },
  {
    type: 'error',
    inputs: [
      { name: 'shares', internalType: 'uint256', type: 'uint256' },
      { name: 'minShares', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingSlippageProtection',
  },
  {
    type: 'error',
    inputs: [{ name: 'until', internalType: 'uint256', type: 'uint256' }],
    name: 'HorizonStakingStillThawing',
  },
  { type: 'error', inputs: [], name: 'HorizonStakingTooManyThawRequests' },
  {
    type: 'error',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'maxTokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'HorizonStakingTooManyTokens',
  },
  {
    type: 'error',
    inputs: [{ name: 'verifier', internalType: 'address', type: 'address' }],
    name: 'HorizonStakingVerifierNotAllowed',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32', indexed: true },
      { name: 'epoch', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'allocationID', internalType: 'address', type: 'address', indexed: true },
      { name: 'sender', internalType: 'address', type: 'address', indexed: false },
      { name: 'poi', internalType: 'bytes32', type: 'bytes32', indexed: false },
      { name: 'isPublic', internalType: 'bool', type: 'bool', indexed: false },
    ],
    name: 'AllocationClosed',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'allowed', internalType: 'bool', type: 'bool', indexed: false },
    ],
    name: 'AllowedLockedVerifierSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'delegator', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'DelegatedTokensWithdrawn',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'paymentType', internalType: 'enum IGraphPayments.PaymentTypes', type: 'uint8', indexed: true },
      { name: 'feeCut', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'DelegationFeeCutSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'DelegationSlashed',
  },
  { type: 'event', anonymous: false, inputs: [], name: 'DelegationSlashingEnabled' },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'DelegationSlashingSkipped',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'HorizonStakeDeposited',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'until', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'HorizonStakeLocked',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'HorizonStakeWithdrawn',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [{ name: 'maxThawingPeriod', internalType: 'uint64', type: 'uint64', indexed: false }],
    name: 'MaxThawingPeriodSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'operator', internalType: 'address', type: 'address', indexed: true },
      { name: 'allowed', internalType: 'bool', type: 'bool', indexed: false },
    ],
    name: 'OperatorSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32', indexed: false },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64', indexed: false },
    ],
    name: 'ProvisionCreated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'ProvisionIncreased',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32', indexed: false },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64', indexed: false },
    ],
    name: 'ProvisionParametersSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32', indexed: false },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64', indexed: false },
    ],
    name: 'ProvisionParametersStaged',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'ProvisionSlashed',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'ProvisionThawed',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'assetHolder', internalType: 'address', type: 'address', indexed: false },
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32', indexed: true },
      { name: 'allocationID', internalType: 'address', type: 'address', indexed: true },
      { name: 'epoch', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'protocolTax', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'curationFees', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'queryFees', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'queryRebates', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'delegationRewards', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'RebateCollected',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'delegator', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'StakeDelegatedWithdrawn',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'reward', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'beneficiary', internalType: 'address', type: 'address', indexed: false },
    ],
    name: 'StakeSlashed',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'requestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8', indexed: true },
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'owner', internalType: 'address', type: 'address', indexed: false },
      { name: 'shares', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'thawingUntil', internalType: 'uint64', type: 'uint64', indexed: false },
      { name: 'thawRequestId', internalType: 'bytes32', type: 'bytes32', indexed: false },
      { name: 'nonce', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'ThawRequestCreated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'requestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8', indexed: true },
      { name: 'thawRequestId', internalType: 'bytes32', type: 'bytes32', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'shares', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'thawingUntil', internalType: 'uint64', type: 'uint64', indexed: false },
      { name: 'valid', internalType: 'bool', type: 'bool', indexed: false },
    ],
    name: 'ThawRequestFulfilled',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'requestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8', indexed: true },
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'owner', internalType: 'address', type: 'address', indexed: false },
      { name: 'thawRequestsFulfilled', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'ThawRequestsFulfilled',
  },
  { type: 'event', anonymous: false, inputs: [], name: 'ThawingPeriodCleared' },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'delegator', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'shares', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensDelegated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensDeprovisioned',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensToDelegationPoolAdded',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'delegator', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'shares', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'TokensUndelegated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address', indexed: true },
      { name: 'verifier', internalType: 'address', type: 'address', indexed: true },
      { name: 'destination', internalType: 'address', type: 'address', indexed: true },
      { name: 'tokens', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'VerifierTokensSent',
  },
  {
    type: 'function',
    inputs: [],
    name: '__DEPRECATED_getThawingPeriod',
    outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'serviceProvider', internalType: 'address', type: 'address' }],
    name: 'acceptProvisionParameters',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'addToDelegationPool',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'addToProvision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', inputs: [], name: 'clearThawingPeriod', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [
      { name: 'allocationID', internalType: 'address', type: 'address' },
      { name: 'poi', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'closeAllocation',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'allocationID', internalType: 'address', type: 'address' },
    ],
    name: 'collect',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'delegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'minSharesOut', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'delegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'deprovision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'allocationID', internalType: 'address', type: 'address' }],
    name: 'getAllocation',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingExtension.Allocation',
        type: 'tuple',
        components: [
          { name: 'indexer', internalType: 'address', type: 'address' },
          { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
          { name: 'tokens', internalType: 'uint256', type: 'uint256' },
          { name: 'createdAtEpoch', internalType: 'uint256', type: 'uint256' },
          { name: 'closedAtEpoch', internalType: 'uint256', type: 'uint256' },
          { name: 'collectedFees', internalType: 'uint256', type: 'uint256' },
          { name: '__DEPRECATED_effectiveAllocation', internalType: 'uint256', type: 'uint256' },
          { name: 'accRewardsPerAllocatedToken', internalType: 'uint256', type: 'uint256' },
          { name: 'distributedRebates', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'allocationId', internalType: 'address', type: 'address' }],
    name: 'getAllocationData',
    outputs: [
      { name: 'isActive', internalType: 'bool', type: 'bool' },
      { name: 'indexer', internalType: 'address', type: 'address' },
      { name: 'subgraphDeploymentId', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'accRewardsPerAllocatedToken', internalType: 'uint256', type: 'uint256' },
      { name: 'accRewardsPending', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'allocationID', internalType: 'address', type: 'address' }],
    name: 'getAllocationState',
    outputs: [{ name: '', internalType: 'enum IHorizonStakingExtension.AllocationState', type: 'uint8' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'getDelegatedTokensAvailable',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'delegator', internalType: 'address', type: 'address' },
    ],
    name: 'getDelegation',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingTypes.Delegation',
        type: 'tuple',
        components: [{ name: 'shares', internalType: 'uint256', type: 'uint256' }],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'paymentType', internalType: 'enum IGraphPayments.PaymentTypes', type: 'uint8' },
    ],
    name: 'getDelegationFeeCut',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'getDelegationPool',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingTypes.DelegationPool',
        type: 'tuple',
        components: [
          { name: 'tokens', internalType: 'uint256', type: 'uint256' },
          { name: 'shares', internalType: 'uint256', type: 'uint256' },
          { name: 'tokensThawing', internalType: 'uint256', type: 'uint256' },
          { name: 'sharesThawing', internalType: 'uint256', type: 'uint256' },
          { name: 'thawingNonce', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'serviceProvider', internalType: 'address', type: 'address' }],
    name: 'getIdleStake',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'indexer', internalType: 'address', type: 'address' }],
    name: 'getIndexerStakedTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'getMaxThawingPeriod',
    outputs: [{ name: '', internalType: 'uint64', type: 'uint64' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'getProviderTokensAvailable',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
    ],
    name: 'getProvision',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingTypes.Provision',
        type: 'tuple',
        components: [
          { name: 'tokens', internalType: 'uint256', type: 'uint256' },
          { name: 'tokensThawing', internalType: 'uint256', type: 'uint256' },
          { name: 'sharesThawing', internalType: 'uint256', type: 'uint256' },
          { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' },
          { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
          { name: 'createdAt', internalType: 'uint64', type: 'uint64' },
          { name: 'maxVerifierCutPending', internalType: 'uint32', type: 'uint32' },
          { name: 'thawingPeriodPending', internalType: 'uint64', type: 'uint64' },
          { name: 'lastParametersStagedAt', internalType: 'uint256', type: 'uint256' },
          { name: 'thawingNonce', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'serviceProvider', internalType: 'address', type: 'address' }],
    name: 'getServiceProvider',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingTypes.ServiceProvider',
        type: 'tuple',
        components: [
          { name: 'tokensStaked', internalType: 'uint256', type: 'uint256' },
          { name: 'tokensProvisioned', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'serviceProvider', internalType: 'address', type: 'address' }],
    name: 'getStake',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'getStakingExtension',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentId', internalType: 'bytes32', type: 'bytes32' }],
    name: 'getSubgraphAllocatedTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'getSubgraphService',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'thawRequestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8' },
      { name: 'thawRequestId', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'getThawRequest',
    outputs: [
      {
        name: '',
        internalType: 'struct IHorizonStakingTypes.ThawRequest',
        type: 'tuple',
        components: [
          { name: 'shares', internalType: 'uint256', type: 'uint256' },
          { name: 'thawingUntil', internalType: 'uint64', type: 'uint64' },
          { name: 'nextRequest', internalType: 'bytes32', type: 'bytes32' },
          { name: 'thawingNonce', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'thawRequestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8' },
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'owner', internalType: 'address', type: 'address' },
    ],
    name: 'getThawRequestList',
    outputs: [
      {
        name: '',
        internalType: 'struct ILinkedList.List',
        type: 'tuple',
        components: [
          { name: 'head', internalType: 'bytes32', type: 'bytes32' },
          { name: 'tail', internalType: 'bytes32', type: 'bytes32' },
          { name: 'nonce', internalType: 'uint256', type: 'uint256' },
          { name: 'count', internalType: 'uint256', type: 'uint256' },
        ],
      },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'thawRequestType', internalType: 'enum IHorizonStakingTypes.ThawRequestType', type: 'uint8' },
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'owner', internalType: 'address', type: 'address' },
    ],
    name: 'getThawedTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'delegationRatio', internalType: 'uint32', type: 'uint32' },
    ],
    name: 'getTokensAvailable',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'indexer', internalType: 'address', type: 'address' }],
    name: 'hasStake',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'allocationID', internalType: 'address', type: 'address' }],
    name: 'isAllocation',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'verifier', internalType: 'address', type: 'address' }],
    name: 'isAllowedLockedVerifier',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'operator', internalType: 'address', type: 'address' },
    ],
    name: 'isAuthorized',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'isDelegationSlashingEnabled',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'operator', internalType: 'address', type: 'address' },
      { name: 'indexer', internalType: 'address', type: 'address' },
    ],
    name: 'isOperator',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'reward', internalType: 'uint256', type: 'uint256' },
      { name: 'beneficiary', internalType: 'address', type: 'address' },
    ],
    name: 'legacySlash',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],
    name: 'multicall',
    outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
    ],
    name: 'provision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
    ],
    name: 'provisionLocked',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'oldServiceProvider', internalType: 'address', type: 'address' },
      { name: 'oldVerifier', internalType: 'address', type: 'address' },
      { name: 'newServiceProvider', internalType: 'address', type: 'address' },
      { name: 'newVerifier', internalType: 'address', type: 'address' },
      { name: 'minSharesForNewProvider', internalType: 'uint256', type: 'uint256' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'redelegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'oldVerifier', internalType: 'address', type: 'address' },
      { name: 'newVerifier', internalType: 'address', type: 'address' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'reprovision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'allowed', internalType: 'bool', type: 'bool' },
    ],
    name: 'setAllowedLockedVerifier',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'paymentType', internalType: 'enum IGraphPayments.PaymentTypes', type: 'uint8' },
      { name: 'feeCut', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'setDelegationFeeCut',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', inputs: [], name: 'setDelegationSlashingEnabled', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [{ name: 'maxThawingPeriod', internalType: 'uint64', type: 'uint64' }],
    name: 'setMaxThawingPeriod',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'operator', internalType: 'address', type: 'address' },
      { name: 'allowed', internalType: 'bool', type: 'bool' },
    ],
    name: 'setOperator',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'operator', internalType: 'address', type: 'address' },
      { name: 'allowed', internalType: 'bool', type: 'bool' },
    ],
    name: 'setOperatorLocked',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'maxVerifierCut', internalType: 'uint32', type: 'uint32' },
      { name: 'thawingPeriod', internalType: 'uint64', type: 'uint64' },
    ],
    name: 'setProvisionParameters',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'tokensVerifier', internalType: 'uint256', type: 'uint256' },
      { name: 'verifierDestination', internalType: 'address', type: 'address' },
    ],
    name: 'slash',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'tokens', internalType: 'uint256', type: 'uint256' }],
    name: 'stake',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'stakeTo',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'stakeToProvision',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'thaw',
    outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'shares', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'undelegate',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'shares', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'undelegate',
    outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'tokens', internalType: 'uint256', type: 'uint256' }],
    name: 'unstake',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', inputs: [], name: 'withdraw', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'verifier', internalType: 'address', type: 'address' },
      { name: 'nThawRequests', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'withdrawDelegated',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'serviceProvider', internalType: 'address', type: 'address' },
      { name: 'deprecated', internalType: 'address', type: 'address' },
    ],
    name: 'withdrawDelegated',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// L2Curation
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const l2CurationAbi = [
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'signalIn', internalType: 'uint256', type: 'uint256' },
      { name: 'tokensOutMin', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'burn',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'collect',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'curationTaxPercentage',
    outputs: [{ name: '', internalType: 'uint32', type: 'uint32' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'getCurationPoolSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'getCurationPoolTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'curator', internalType: 'address', type: 'address' },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'getCuratorSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'isCurated',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
      { name: 'signalOutMin', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'mint',
    outputs: [
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'mintTaxFree',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'percentage', internalType: 'uint32', type: 'uint32' }],
    name: 'setCurationTaxPercentage',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'curationTokenMaster', internalType: 'address', type: 'address' }],
    name: 'setCurationTokenMaster',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'defaultReserveRatio', internalType: 'uint32', type: 'uint32' }],
    name: 'setDefaultReserveRatio',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'minimumCurationDeposit', internalType: 'uint256', type: 'uint256' }],
    name: 'setMinimumCurationDeposit',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphService', internalType: 'address', type: 'address' }],
    name: 'setSubgraphService',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'signalIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'signalToTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'subgraphService',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'tokensToSignal',
    outputs: [
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'tokensToSignalNoTax',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'tokensToSignalToTokensNoTax',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// L2GNS
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const l2GnsAbi = [
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256', indexed: true },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32', indexed: true },
      { name: 'versionMetadata', internalType: 'bytes32', type: 'bytes32', indexed: false },
    ],
    name: 'SubgraphVersionUpdated',
  },
  { type: 'function', inputs: [], name: 'approveAll', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'nSignal', internalType: 'uint256', type: 'uint256' },
      { name: 'tokensOutMin', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'burnSignal',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'deprecateSubgraph',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'l2SubgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'subgraphMetadata', internalType: 'bytes32', type: 'bytes32' },
      { name: 'versionMetadata', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'finishSubgraphTransferFromL1',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'l1SubgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'getAliasedL2SubgraphID',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'pure',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'curator', internalType: 'address', type: 'address' },
    ],
    name: 'getCuratorSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'getLegacySubgraphKey',
    outputs: [
      { name: 'account', internalType: 'address', type: 'address' },
      { name: 'seqID', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'l2SubgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'getUnaliasedL1SubgraphID',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'pure',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'isLegacySubgraph',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'isPublished',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
      { name: 'nSignalOutMin', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'mintSignal',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }],
    name: 'multicall',
    outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'nSignalIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'nSignalToTokens',
    outputs: [
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'nSignalIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'nSignalToVSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
    name: 'nextAccountSeqID',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'from', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
      { name: 'data', internalType: 'bytes', type: 'bytes' },
    ],
    name: 'onTokenTransfer',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'tokenID', internalType: 'uint256', type: 'uint256' }],
    name: 'ownerOf',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'versionMetadata', internalType: 'bytes32', type: 'bytes32' },
      { name: 'subgraphMetadata', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'publishNewSubgraph',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'versionMetadata', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'publishNewVersion',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'graphAccount', internalType: 'address', type: 'address' },
      { name: 'nameSystem', internalType: 'uint8', type: 'uint8' },
      { name: 'nameIdentifier', internalType: 'bytes32', type: 'bytes32' },
      { name: 'name', internalType: 'string', type: 'string' },
    ],
    name: 'setDefaultName',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'ownerTaxPercentage', internalType: 'uint32', type: 'uint32' }],
    name: 'setOwnerTaxPercentage',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'subgraphNFT',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'subgraphSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'subgraphTokens',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'tokensIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'tokensToNSignal',
    outputs: [
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'recipient', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'transferSignal',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'subgraphMetadata', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'updateSubgraphMetadata',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphID', internalType: 'uint256', type: 'uint256' },
      { name: 'vSignalIn', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'vSignalToNSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphID', internalType: 'uint256', type: 'uint256' }],
    name: 'withdraw',
    outputs: [],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// L2GraphToken
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const l2GraphTokenAbi = [
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'owner', internalType: 'address', type: 'address', indexed: true },
      { name: 'spender', internalType: 'address', type: 'address', indexed: true },
      { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'Approval',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'from', internalType: 'address', type: 'address', indexed: true },
      { name: 'to', internalType: 'address', type: 'address', indexed: true },
      { name: 'value', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'Transfer',
  },
  {
    type: 'function',
    inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
    name: 'addMinter',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'owner', internalType: 'address', type: 'address' },
      { name: 'spender', internalType: 'address', type: 'address' },
    ],
    name: 'allowance',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'spender', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'approve',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
    name: 'balanceOf',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'amount', internalType: 'uint256', type: 'uint256' }],
    name: 'burn',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'from', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'burnFrom',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'spender', internalType: 'address', type: 'address' },
      { name: 'subtractedValue', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'decreaseAllowance',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'spender', internalType: 'address', type: 'address' },
      { name: 'addedValue', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'increaseAllowance',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
    name: 'isMinter',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'to', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'mint',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'owner', internalType: 'address', type: 'address' },
      { name: 'spender', internalType: 'address', type: 'address' },
      { name: 'value', internalType: 'uint256', type: 'uint256' },
      { name: 'deadline', internalType: 'uint256', type: 'uint256' },
      { name: 'v', internalType: 'uint8', type: 'uint8' },
      { name: 'r', internalType: 'bytes32', type: 'bytes32' },
      { name: 's', internalType: 'bytes32', type: 'bytes32' },
    ],
    name: 'permit',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'account', internalType: 'address', type: 'address' }],
    name: 'removeMinter',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  { type: 'function', inputs: [], name: 'renounceMinter', outputs: [], stateMutability: 'nonpayable' },
  {
    type: 'function',
    inputs: [],
    name: 'totalSupply',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'recipient', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'transfer',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'sender', internalType: 'address', type: 'address' },
      { name: 'recipient', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'transferFrom',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// L2GraphTokenGateway
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const l2GraphTokenGatewayAbi = [
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'l1Token', internalType: 'address', type: 'address', indexed: true },
      { name: 'from', internalType: 'address', type: 'address', indexed: true },
      { name: 'to', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'DepositFinalized',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [{ name: 'l1Counterpart', internalType: 'address', type: 'address', indexed: false }],
    name: 'L1CounterpartAddressSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [{ name: 'l1GRT', internalType: 'address', type: 'address', indexed: false }],
    name: 'L1TokenAddressSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [{ name: 'l2Router', internalType: 'address', type: 'address', indexed: false }],
    name: 'L2RouterSet',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'l1Token', internalType: 'address', type: 'address', indexed: false },
      { name: 'from', internalType: 'address', type: 'address', indexed: true },
      { name: 'to', internalType: 'address', type: 'address', indexed: true },
      { name: 'l2ToL1Id', internalType: 'uint256', type: 'uint256', indexed: true },
      { name: 'exitNum', internalType: 'uint256', type: 'uint256', indexed: false },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'WithdrawalInitiated',
  },
  {
    type: 'function',
    inputs: [{ name: 'l1ERC20', internalType: 'address', type: 'address' }],
    name: 'calculateL2TokenAddress',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'l1Token', internalType: 'address', type: 'address' },
      { name: 'from', internalType: 'address', type: 'address' },
      { name: 'to', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
      { name: 'data', internalType: 'bytes', type: 'bytes' },
    ],
    name: 'finalizeInboundTransfer',
    outputs: [],
    stateMutability: 'payable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'token', internalType: 'address', type: 'address' },
      { name: 'from', internalType: 'address', type: 'address' },
      { name: 'to', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
      { name: 'data', internalType: 'bytes', type: 'bytes' },
    ],
    name: 'getOutboundCalldata',
    outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
    stateMutability: 'pure',
  },
  {
    type: 'function',
    inputs: [{ name: 'controller', internalType: 'address', type: 'address' }],
    name: 'initialize',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'l1Token', internalType: 'address', type: 'address' },
      { name: 'to', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
      { name: 'data', internalType: 'bytes', type: 'bytes' },
    ],
    name: 'outboundTransfer',
    outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'l1Token', internalType: 'address', type: 'address' },
      { name: 'to', internalType: 'address', type: 'address' },
      { name: 'amount', internalType: 'uint256', type: 'uint256' },
      { name: 'unused1', internalType: 'uint256', type: 'uint256' },
      { name: 'unused2', internalType: 'uint256', type: 'uint256' },
      { name: 'data', internalType: 'bytes', type: 'bytes' },
    ],
    name: 'outboundTransfer',
    outputs: [{ name: '', internalType: 'bytes', type: 'bytes' }],
    stateMutability: 'payable',
  },
  {
    type: 'function',
    inputs: [{ name: 'l1Counterpart', internalType: 'address', type: 'address' }],
    name: 'setL1CounterpartAddress',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'l1GRT', internalType: 'address', type: 'address' }],
    name: 'setL1TokenAddress',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'l2Router', internalType: 'address', type: 'address' }],
    name: 'setL2Router',
    outputs: [],
    stateMutability: 'nonpayable',
  },
] as const

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// RewardsManager
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

export const rewardsManagerAbi = [
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'allocationID', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'HorizonRewardsAssigned',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'allocationID', internalType: 'address', type: 'address', indexed: true },
      { name: 'amount', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'RewardsAssigned',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'indexer', internalType: 'address', type: 'address', indexed: true },
      { name: 'allocationID', internalType: 'address', type: 'address', indexed: true },
    ],
    name: 'RewardsDenied',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32', indexed: true },
      { name: 'sinceBlock', internalType: 'uint256', type: 'uint256', indexed: false },
    ],
    name: 'RewardsDenylistUpdated',
  },
  {
    type: 'event',
    anonymous: false,
    inputs: [
      { name: 'oldSubgraphService', internalType: 'address', type: 'address', indexed: true },
      { name: 'newSubgraphService', internalType: 'address', type: 'address', indexed: true },
    ],
    name: 'SubgraphServiceSet',
  },
  {
    type: 'function',
    inputs: [
      { name: 'tokens', internalType: 'uint256', type: 'uint256' },
      { name: 'accRewardsPerAllocatedToken', internalType: 'uint256', type: 'uint256' },
    ],
    name: 'calcRewards',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'pure',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'getAccRewardsForSubgraph',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'getAccRewardsPerAllocatedToken',
    outputs: [
      { name: '', internalType: 'uint256', type: 'uint256' },
      { name: '', internalType: 'uint256', type: 'uint256' },
    ],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'getAccRewardsPerSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [],
    name: 'getNewRewardsPerSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [
      { name: 'rewardsIssuer', internalType: 'address', type: 'address' },
      { name: 'allocationID', internalType: 'address', type: 'address' },
    ],
    name: 'getRewards',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'isDenied',
    outputs: [{ name: '', internalType: 'bool', type: 'bool' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'onSubgraphAllocationUpdate',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' }],
    name: 'onSubgraphSignalUpdate',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [
      { name: 'subgraphDeploymentID', internalType: 'bytes32', type: 'bytes32' },
      { name: 'deny', internalType: 'bool', type: 'bool' },
    ],
    name: 'setDenied',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'issuancePerBlock', internalType: 'uint256', type: 'uint256' }],
    name: 'setIssuancePerBlock',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'minimumSubgraphSignal', internalType: 'uint256', type: 'uint256' }],
    name: 'setMinimumSubgraphSignal',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphAvailabilityOracle', internalType: 'address', type: 'address' }],
    name: 'setSubgraphAvailabilityOracle',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [{ name: 'subgraphService', internalType: 'address', type: 'address' }],
    name: 'setSubgraphService',
    outputs: [],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'subgraphService',
    outputs: [{ name: '', internalType: 'address', type: 'address' }],
    stateMutability: 'view',
  },
  {
    type: 'function',
    inputs: [{ name: 'allocationID', internalType: 'address', type: 'address' }],
    name: 'takeRewards',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
  {
    type: 'function',
    inputs: [],
    name: 'updateAccRewardsPerSignal',
    outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }],
    stateMutability: 'nonpayable',
  },
] as const
