/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import { Contract, ContractFactory, ContractTransactionResponse, Interface } from 'ethers'
import type { Signer, AddressLike, ContractDeployTransaction, ContractRunner } from 'ethers'
import type { NonPayableOverrides } from '../../../common'
import type {
  HorizonStakingExtension,
  HorizonStakingExtensionInterface,
} from '../../../contracts/staking/HorizonStakingExtension'

const _abi = [
  {
    inputs: [
      {
        internalType: 'address',
        name: 'controller',
        type: 'address',
      },
      {
        internalType: 'address',
        name: 'subgraphDataServiceAddress',
        type: 'address',
      },
    ],
    stateMutability: 'nonpayable',
    type: 'constructor',
  },
  {
    inputs: [
      {
        internalType: 'address',
        name: 'target',
        type: 'address',
      },
    ],
    name: 'AddressEmptyCode',
    type: 'error',
  },
  {
    inputs: [],
    name: 'FailedCall',
    type: 'error',
  },
  {
    inputs: [
      {
        internalType: 'bytes',
        name: 'contractName',
        type: 'bytes',
      },
    ],
    name: 'GraphDirectoryInvalidZeroAddress',
    type: 'error',
  },
  {
    inputs: [],
    name: 'HorizonStakingInvalidThawRequestType',
    type: 'error',
  },
  {
    inputs: [],
    name: 'ManagedIsPaused',
    type: 'error',
  },
  {
    inputs: [],
    name: 'ManagedOnlyController',
    type: 'error',
  },
  {
    inputs: [],
    name: 'ManagedOnlyGovernor',
    type: 'error',
  },
  {
    inputs: [
      {
        internalType: 'uint256',
        name: 'a',
        type: 'uint256',
      },
      {
        internalType: 'uint256',
        name: 'b',
        type: 'uint256',
      },
    ],
    name: 'PPMMathInvalidMulPPM',
    type: 'error',
  },
  {
    inputs: [
      {
        internalType: 'uint256',
        name: 'value',
        type: 'uint256',
      },
    ],
    name: 'PPMMathInvalidPPM',
    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: 'graphToken',
        type: 'address',
      },
      {
        indexed: true,
        internalType: 'address',
        name: 'graphStaking',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphPayments',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphEscrow',
        type: 'address',
      },
      {
        indexed: true,
        internalType: 'address',
        name: 'graphController',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphEpochManager',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphRewardsManager',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphTokenGateway',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphProxyAdmin',
        type: 'address',
      },
      {
        indexed: false,
        internalType: 'address',
        name: 'graphCuration',
        type: 'address',
      },
    ],
    name: 'GraphDirectoryInitialized',
    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: 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: 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',
  },
  {
    inputs: [],
    name: '__DEPRECATED_getThawingPeriod',
    outputs: [
      {
        internalType: 'uint64',
        name: '',
        type: 'uint64',
      },
    ],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [
      {
        internalType: 'contract IGraphProxy',
        name: '_proxy',
        type: 'address',
      },
    ],
    name: 'acceptProxy',
    outputs: [],
    stateMutability: 'nonpayable',
    type: 'function',
  },
  {
    inputs: [
      {
        internalType: 'contract IGraphProxy',
        name: '_proxy',
        type: 'address',
      },
      {
        internalType: 'bytes',
        name: '_data',
        type: 'bytes',
      },
    ],
    name: 'acceptProxyAndCall',
    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: '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: '',
        type: 'bool',
      },
      {
        internalType: 'address',
        name: '',
        type: 'address',
      },
      {
        internalType: 'bytes32',
        name: '',
        type: 'bytes32',
      },
      {
        internalType: 'uint256',
        name: '',
        type: 'uint256',
      },
      {
        internalType: 'uint256',
        name: '',
        type: 'uint256',
      },
      {
        internalType: 'uint256',
        name: '',
        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: [
      {
        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: 'requestType',
        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: 'requestType',
        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: 'requestType',
        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: [],
    name: 'isDelegationSlashingEnabled',
    outputs: [
      {
        internalType: 'bool',
        name: '',
        type: 'bool',
      },
    ],
    stateMutability: 'view',
    type: 'function',
  },
  {
    inputs: [
      {
        internalType: 'address',
        name: 'operator',
        type: 'address',
      },
      {
        internalType: 'address',
        name: 'serviceProvider',
        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: 'bytes[]',
        name: 'data',
        type: 'bytes[]',
      },
    ],
    name: 'multicall',
    outputs: [
      {
        internalType: 'bytes[]',
        name: 'results',
        type: 'bytes[]',
      },
    ],
    stateMutability: 'nonpayable',
    type: 'function',
  },
] as const

const _bytecode =
  ' $8eb3cac1482a31d7a7f2cbe7dc8bdcd821$ '

type HorizonStakingExtensionConstructorParams =
  | [linkLibraryAddresses: HorizonStakingExtensionLibraryAddresses, signer?: Signer]
  | ConstructorParameters<typeof ContractFactory>

const isSuperArgs = (
  xs: HorizonStakingExtensionConstructorParams,
): xs is ConstructorParameters<typeof ContractFactory> => {
  return (
    typeof xs[0] === 'string' ||
    (Array.isArray as (arg: any) => arg is readonly any[])(xs[0]) ||
    '_isInterface' in xs[0]
  )
}

export class HorizonStakingExtension__factory extends ContractFactory {
  constructor(...args: HorizonStakingExtensionConstructorParams) {
    if (isSuperArgs(args)) {
      super(...args)
    } else {
      const [linkLibraryAddresses, signer] = args
      super(_abi, HorizonStakingExtension__factory.linkBytecode(linkLibraryAddresses), signer)
    }
  }

  static linkBytecode(linkLibraryAddresses: HorizonStakingExtensionLibraryAddresses): string {
    let linkedBytecode = _bytecode

    linkedBytecode = linkedBytecode.replace(
      new RegExp('__\\$8eb3cac1482a31d7a7f2cbe7dc8bdcd821\\$__', 'g'),
      linkLibraryAddresses['contracts/staking/libraries/ExponentialRebates.sol:ExponentialRebates']
        .replace(/^0x/, '')
        .toLowerCase(),
    )

    return linkedBytecode
  }

  override getDeployTransaction(
    controller: AddressLike,
    subgraphDataServiceAddress: AddressLike,
    overrides?: NonPayableOverrides & { from?: string },
  ): Promise<ContractDeployTransaction> {
    return super.getDeployTransaction(controller, subgraphDataServiceAddress, overrides || {})
  }
  override deploy(
    controller: AddressLike,
    subgraphDataServiceAddress: AddressLike,
    overrides?: NonPayableOverrides & { from?: string },
  ) {
    return super.deploy(controller, subgraphDataServiceAddress, overrides || {}) as Promise<
      HorizonStakingExtension & {
        deploymentTransaction(): ContractTransactionResponse
      }
    >
  }
  override connect(runner: ContractRunner | null): HorizonStakingExtension__factory {
    return super.connect(runner) as HorizonStakingExtension__factory
  }

  static readonly bytecode = _bytecode
  static readonly abi = _abi
  static createInterface(): HorizonStakingExtensionInterface {
    return new Interface(_abi) as HorizonStakingExtensionInterface
  }
  static connect(address: string, runner?: ContractRunner | null): HorizonStakingExtension {
    return new Contract(address, _abi, runner) as unknown as HorizonStakingExtension
  }
}

export interface HorizonStakingExtensionLibraryAddresses {
  ['contracts/staking/libraries/ExponentialRebates.sol:ExponentialRebates']: string
}
