/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import { Contract, Signer, utils } from "ethers";
import type { Provider } from "@ethersproject/providers";
import type {
  IHorizonStaking,
  IHorizonStakingInterface,
} from "../../../contracts/horizon/IHorizonStaking";

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

export class IHorizonStaking__factory {
  static readonly abi = _abi;
  static createInterface(): IHorizonStakingInterface {
    return new utils.Interface(_abi) as IHorizonStakingInterface;
  }
  static connect(
    address: string,
    signerOrProvider: Signer | Provider,
  ): IHorizonStaking {
    return new Contract(address, _abi, signerOrProvider) as IHorizonStaking;
  }
}
