/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */
import type {
  BaseContract,
  BigNumberish,
  BytesLike,
  FunctionFragment,
  Result,
  Interface,
  EventFragment,
  AddressLike,
  ContractRunner,
  ContractMethod,
  Listener,
} from 'ethers'
import type {
  TypedContractEvent,
  TypedDeferredTopicFilter,
  TypedEventLog,
  TypedLogDescription,
  TypedListener,
  TypedContractMethod,
} from '../../common'

export declare namespace IHorizonStakingExtension {
  export type AllocationStruct = {
    indexer: AddressLike
    subgraphDeploymentID: BytesLike
    tokens: BigNumberish
    createdAtEpoch: BigNumberish
    closedAtEpoch: BigNumberish
    collectedFees: BigNumberish
    __DEPRECATED_effectiveAllocation: BigNumberish
    accRewardsPerAllocatedToken: BigNumberish
    distributedRebates: BigNumberish
  }

  export type AllocationStructOutput = [
    indexer: string,
    subgraphDeploymentID: string,
    tokens: bigint,
    createdAtEpoch: bigint,
    closedAtEpoch: bigint,
    collectedFees: bigint,
    __DEPRECATED_effectiveAllocation: bigint,
    accRewardsPerAllocatedToken: bigint,
    distributedRebates: bigint,
  ] & {
    indexer: string
    subgraphDeploymentID: string
    tokens: bigint
    createdAtEpoch: bigint
    closedAtEpoch: bigint
    collectedFees: bigint
    __DEPRECATED_effectiveAllocation: bigint
    accRewardsPerAllocatedToken: bigint
    distributedRebates: bigint
  }
}

export declare namespace IHorizonStakingTypes {
  export type DelegationStruct = { shares: BigNumberish }

  export type DelegationStructOutput = [shares: bigint] & { shares: bigint }

  export type DelegationPoolStruct = {
    tokens: BigNumberish
    shares: BigNumberish
    tokensThawing: BigNumberish
    sharesThawing: BigNumberish
    thawingNonce: BigNumberish
  }

  export type DelegationPoolStructOutput = [
    tokens: bigint,
    shares: bigint,
    tokensThawing: bigint,
    sharesThawing: bigint,
    thawingNonce: bigint,
  ] & {
    tokens: bigint
    shares: bigint
    tokensThawing: bigint
    sharesThawing: bigint
    thawingNonce: bigint
  }

  export type ProvisionStruct = {
    tokens: BigNumberish
    tokensThawing: BigNumberish
    sharesThawing: BigNumberish
    maxVerifierCut: BigNumberish
    thawingPeriod: BigNumberish
    createdAt: BigNumberish
    maxVerifierCutPending: BigNumberish
    thawingPeriodPending: BigNumberish
    lastParametersStagedAt: BigNumberish
    thawingNonce: BigNumberish
  }

  export type ProvisionStructOutput = [
    tokens: bigint,
    tokensThawing: bigint,
    sharesThawing: bigint,
    maxVerifierCut: bigint,
    thawingPeriod: bigint,
    createdAt: bigint,
    maxVerifierCutPending: bigint,
    thawingPeriodPending: bigint,
    lastParametersStagedAt: bigint,
    thawingNonce: bigint,
  ] & {
    tokens: bigint
    tokensThawing: bigint
    sharesThawing: bigint
    maxVerifierCut: bigint
    thawingPeriod: bigint
    createdAt: bigint
    maxVerifierCutPending: bigint
    thawingPeriodPending: bigint
    lastParametersStagedAt: bigint
    thawingNonce: bigint
  }

  export type ServiceProviderStruct = {
    tokensStaked: BigNumberish
    tokensProvisioned: BigNumberish
  }

  export type ServiceProviderStructOutput = [tokensStaked: bigint, tokensProvisioned: bigint] & {
    tokensStaked: bigint
    tokensProvisioned: bigint
  }

  export type ThawRequestStruct = {
    shares: BigNumberish
    thawingUntil: BigNumberish
    nextRequest: BytesLike
    thawingNonce: BigNumberish
  }

  export type ThawRequestStructOutput = [
    shares: bigint,
    thawingUntil: bigint,
    nextRequest: string,
    thawingNonce: bigint,
  ] & {
    shares: bigint
    thawingUntil: bigint
    nextRequest: string
    thawingNonce: bigint
  }
}

export declare namespace ILinkedList {
  export type ListStruct = {
    head: BytesLike
    tail: BytesLike
    nonce: BigNumberish
    count: BigNumberish
  }

  export type ListStructOutput = [head: string, tail: string, nonce: bigint, count: bigint] & {
    head: string
    tail: string
    nonce: bigint
    count: bigint
  }
}

export interface HorizonStakingExtensionInterface extends Interface {
  getFunction(
    nameOrSignature:
      | '__DEPRECATED_getThawingPeriod'
      | 'acceptProxy'
      | 'acceptProxyAndCall'
      | 'closeAllocation'
      | 'collect'
      | 'getAllocation'
      | 'getAllocationData'
      | 'getAllocationState'
      | 'getDelegatedTokensAvailable'
      | 'getDelegation'
      | 'getDelegationFeeCut'
      | 'getDelegationPool'
      | 'getIdleStake'
      | 'getIndexerStakedTokens'
      | 'getMaxThawingPeriod'
      | 'getProviderTokensAvailable'
      | 'getProvision'
      | 'getServiceProvider'
      | 'getStake'
      | 'getSubgraphAllocatedTokens'
      | 'getSubgraphService'
      | 'getThawRequest'
      | 'getThawRequestList'
      | 'getThawedTokens'
      | 'getTokensAvailable'
      | 'hasStake'
      | 'isAllocation'
      | 'isAllowedLockedVerifier'
      | 'isDelegationSlashingEnabled'
      | 'isOperator'
      | 'legacySlash'
      | 'multicall',
  ): FunctionFragment

  getEvent(
    nameOrSignatureOrTopic:
      | 'AllocationClosed'
      | 'GraphDirectoryInitialized'
      | 'HorizonStakeDeposited'
      | 'RebateCollected'
      | 'StakeSlashed',
  ): EventFragment

  encodeFunctionData(functionFragment: '__DEPRECATED_getThawingPeriod', values?: undefined): string
  encodeFunctionData(functionFragment: 'acceptProxy', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'acceptProxyAndCall', values: [AddressLike, BytesLike]): string
  encodeFunctionData(functionFragment: 'closeAllocation', values: [AddressLike, BytesLike]): string
  encodeFunctionData(functionFragment: 'collect', values: [BigNumberish, AddressLike]): string
  encodeFunctionData(functionFragment: 'getAllocation', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getAllocationData', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getAllocationState', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getDelegatedTokensAvailable', values: [AddressLike, AddressLike]): string
  encodeFunctionData(functionFragment: 'getDelegation', values: [AddressLike, AddressLike, AddressLike]): string
  encodeFunctionData(functionFragment: 'getDelegationFeeCut', values: [AddressLike, AddressLike, BigNumberish]): string
  encodeFunctionData(functionFragment: 'getDelegationPool', values: [AddressLike, AddressLike]): string
  encodeFunctionData(functionFragment: 'getIdleStake', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getIndexerStakedTokens', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getMaxThawingPeriod', values?: undefined): string
  encodeFunctionData(functionFragment: 'getProviderTokensAvailable', values: [AddressLike, AddressLike]): string
  encodeFunctionData(functionFragment: 'getProvision', values: [AddressLike, AddressLike]): string
  encodeFunctionData(functionFragment: 'getServiceProvider', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getStake', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'getSubgraphAllocatedTokens', values: [BytesLike]): string
  encodeFunctionData(functionFragment: 'getSubgraphService', values?: undefined): string
  encodeFunctionData(functionFragment: 'getThawRequest', values: [BigNumberish, BytesLike]): string
  encodeFunctionData(
    functionFragment: 'getThawRequestList',
    values: [BigNumberish, AddressLike, AddressLike, AddressLike],
  ): string
  encodeFunctionData(
    functionFragment: 'getThawedTokens',
    values: [BigNumberish, AddressLike, AddressLike, AddressLike],
  ): string
  encodeFunctionData(functionFragment: 'getTokensAvailable', values: [AddressLike, AddressLike, BigNumberish]): string
  encodeFunctionData(functionFragment: 'hasStake', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'isAllocation', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'isAllowedLockedVerifier', values: [AddressLike]): string
  encodeFunctionData(functionFragment: 'isDelegationSlashingEnabled', values?: undefined): string
  encodeFunctionData(functionFragment: 'isOperator', values: [AddressLike, AddressLike]): string
  encodeFunctionData(
    functionFragment: 'legacySlash',
    values: [AddressLike, BigNumberish, BigNumberish, AddressLike],
  ): string
  encodeFunctionData(functionFragment: 'multicall', values: [BytesLike[]]): string

  decodeFunctionResult(functionFragment: '__DEPRECATED_getThawingPeriod', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'acceptProxy', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'acceptProxyAndCall', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'closeAllocation', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'collect', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getAllocation', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getAllocationData', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getAllocationState', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getDelegatedTokensAvailable', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getDelegation', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getDelegationFeeCut', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getDelegationPool', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getIdleStake', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getIndexerStakedTokens', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getMaxThawingPeriod', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getProviderTokensAvailable', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getProvision', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getServiceProvider', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getStake', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getSubgraphAllocatedTokens', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getSubgraphService', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getThawRequest', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getThawRequestList', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getThawedTokens', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'getTokensAvailable', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'hasStake', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'isAllocation', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'isAllowedLockedVerifier', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'isDelegationSlashingEnabled', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'isOperator', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'legacySlash', data: BytesLike): Result
  decodeFunctionResult(functionFragment: 'multicall', data: BytesLike): Result
}

export namespace AllocationClosedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    subgraphDeploymentID: BytesLike,
    epoch: BigNumberish,
    tokens: BigNumberish,
    allocationID: AddressLike,
    sender: AddressLike,
    poi: BytesLike,
    isPublic: boolean,
  ]
  export type OutputTuple = [
    indexer: string,
    subgraphDeploymentID: string,
    epoch: bigint,
    tokens: bigint,
    allocationID: string,
    sender: string,
    poi: string,
    isPublic: boolean,
  ]
  export interface OutputObject {
    indexer: string
    subgraphDeploymentID: string
    epoch: bigint
    tokens: bigint
    allocationID: string
    sender: string
    poi: string
    isPublic: boolean
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>
  export type Filter = TypedDeferredTopicFilter<Event>
  export type Log = TypedEventLog<Event>
  export type LogDescription = TypedLogDescription<Event>
}

export namespace GraphDirectoryInitializedEvent {
  export type InputTuple = [
    graphToken: AddressLike,
    graphStaking: AddressLike,
    graphPayments: AddressLike,
    graphEscrow: AddressLike,
    graphController: AddressLike,
    graphEpochManager: AddressLike,
    graphRewardsManager: AddressLike,
    graphTokenGateway: AddressLike,
    graphProxyAdmin: AddressLike,
    graphCuration: AddressLike,
  ]
  export type OutputTuple = [
    graphToken: string,
    graphStaking: string,
    graphPayments: string,
    graphEscrow: string,
    graphController: string,
    graphEpochManager: string,
    graphRewardsManager: string,
    graphTokenGateway: string,
    graphProxyAdmin: string,
    graphCuration: string,
  ]
  export interface OutputObject {
    graphToken: string
    graphStaking: string
    graphPayments: string
    graphEscrow: string
    graphController: string
    graphEpochManager: string
    graphRewardsManager: string
    graphTokenGateway: string
    graphProxyAdmin: string
    graphCuration: string
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>
  export type Filter = TypedDeferredTopicFilter<Event>
  export type Log = TypedEventLog<Event>
  export type LogDescription = TypedLogDescription<Event>
}

export namespace HorizonStakeDepositedEvent {
  export type InputTuple = [serviceProvider: AddressLike, tokens: BigNumberish]
  export type OutputTuple = [serviceProvider: string, tokens: bigint]
  export interface OutputObject {
    serviceProvider: string
    tokens: bigint
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>
  export type Filter = TypedDeferredTopicFilter<Event>
  export type Log = TypedEventLog<Event>
  export type LogDescription = TypedLogDescription<Event>
}

export namespace RebateCollectedEvent {
  export type InputTuple = [
    assetHolder: AddressLike,
    indexer: AddressLike,
    subgraphDeploymentID: BytesLike,
    allocationID: AddressLike,
    epoch: BigNumberish,
    tokens: BigNumberish,
    protocolTax: BigNumberish,
    curationFees: BigNumberish,
    queryFees: BigNumberish,
    queryRebates: BigNumberish,
    delegationRewards: BigNumberish,
  ]
  export type OutputTuple = [
    assetHolder: string,
    indexer: string,
    subgraphDeploymentID: string,
    allocationID: string,
    epoch: bigint,
    tokens: bigint,
    protocolTax: bigint,
    curationFees: bigint,
    queryFees: bigint,
    queryRebates: bigint,
    delegationRewards: bigint,
  ]
  export interface OutputObject {
    assetHolder: string
    indexer: string
    subgraphDeploymentID: string
    allocationID: string
    epoch: bigint
    tokens: bigint
    protocolTax: bigint
    curationFees: bigint
    queryFees: bigint
    queryRebates: bigint
    delegationRewards: bigint
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>
  export type Filter = TypedDeferredTopicFilter<Event>
  export type Log = TypedEventLog<Event>
  export type LogDescription = TypedLogDescription<Event>
}

export namespace StakeSlashedEvent {
  export type InputTuple = [indexer: AddressLike, tokens: BigNumberish, reward: BigNumberish, beneficiary: AddressLike]
  export type OutputTuple = [indexer: string, tokens: bigint, reward: bigint, beneficiary: string]
  export interface OutputObject {
    indexer: string
    tokens: bigint
    reward: bigint
    beneficiary: string
  }
  export type Event = TypedContractEvent<InputTuple, OutputTuple, OutputObject>
  export type Filter = TypedDeferredTopicFilter<Event>
  export type Log = TypedEventLog<Event>
  export type LogDescription = TypedLogDescription<Event>
}

export interface HorizonStakingExtension extends BaseContract {
  connect(runner?: ContractRunner | null): HorizonStakingExtension
  waitForDeployment(): Promise<this>

  interface: HorizonStakingExtensionInterface

  queryFilter<TCEvent extends TypedContractEvent>(
    event: TCEvent,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined,
  ): Promise<Array<TypedEventLog<TCEvent>>>
  queryFilter<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined,
  ): Promise<Array<TypedEventLog<TCEvent>>>

  on<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>
  on<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>,
  ): Promise<this>

  once<TCEvent extends TypedContractEvent>(event: TCEvent, listener: TypedListener<TCEvent>): Promise<this>
  once<TCEvent extends TypedContractEvent>(
    filter: TypedDeferredTopicFilter<TCEvent>,
    listener: TypedListener<TCEvent>,
  ): Promise<this>

  listeners<TCEvent extends TypedContractEvent>(event: TCEvent): Promise<Array<TypedListener<TCEvent>>>
  listeners(eventName?: string): Promise<Array<Listener>>
  removeAllListeners<TCEvent extends TypedContractEvent>(event?: TCEvent): Promise<this>

  __DEPRECATED_getThawingPeriod: TypedContractMethod<[], [bigint], 'view'>

  acceptProxy: TypedContractMethod<[_proxy: AddressLike], [void], 'nonpayable'>

  acceptProxyAndCall: TypedContractMethod<[_proxy: AddressLike, _data: BytesLike], [void], 'nonpayable'>

  closeAllocation: TypedContractMethod<[allocationID: AddressLike, poi: BytesLike], [void], 'nonpayable'>

  collect: TypedContractMethod<[tokens: BigNumberish, allocationID: AddressLike], [void], 'nonpayable'>

  getAllocation: TypedContractMethod<
    [allocationID: AddressLike],
    [IHorizonStakingExtension.AllocationStructOutput],
    'view'
  >

  getAllocationData: TypedContractMethod<
    [allocationID: AddressLike],
    [[boolean, string, string, bigint, bigint, bigint]],
    'view'
  >

  getAllocationState: TypedContractMethod<[allocationID: AddressLike], [bigint], 'view'>

  getDelegatedTokensAvailable: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    'view'
  >

  getDelegation: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, delegator: AddressLike],
    [IHorizonStakingTypes.DelegationStructOutput],
    'view'
  >

  getDelegationFeeCut: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, paymentType: BigNumberish],
    [bigint],
    'view'
  >

  getDelegationPool: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.DelegationPoolStructOutput],
    'view'
  >

  getIdleStake: TypedContractMethod<[serviceProvider: AddressLike], [bigint], 'view'>

  getIndexerStakedTokens: TypedContractMethod<[indexer: AddressLike], [bigint], 'view'>

  getMaxThawingPeriod: TypedContractMethod<[], [bigint], 'view'>

  getProviderTokensAvailable: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [bigint],
    'view'
  >

  getProvision: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.ProvisionStructOutput],
    'view'
  >

  getServiceProvider: TypedContractMethod<
    [serviceProvider: AddressLike],
    [IHorizonStakingTypes.ServiceProviderStructOutput],
    'view'
  >

  getStake: TypedContractMethod<[serviceProvider: AddressLike], [bigint], 'view'>

  getSubgraphAllocatedTokens: TypedContractMethod<[subgraphDeploymentID: BytesLike], [bigint], 'view'>

  getSubgraphService: TypedContractMethod<[], [string], 'view'>

  getThawRequest: TypedContractMethod<
    [requestType: BigNumberish, thawRequestId: BytesLike],
    [IHorizonStakingTypes.ThawRequestStructOutput],
    'view'
  >

  getThawRequestList: TypedContractMethod<
    [requestType: BigNumberish, serviceProvider: AddressLike, verifier: AddressLike, owner: AddressLike],
    [ILinkedList.ListStructOutput],
    'view'
  >

  getThawedTokens: TypedContractMethod<
    [requestType: BigNumberish, serviceProvider: AddressLike, verifier: AddressLike, owner: AddressLike],
    [bigint],
    'view'
  >

  getTokensAvailable: TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, delegationRatio: BigNumberish],
    [bigint],
    'view'
  >

  hasStake: TypedContractMethod<[indexer: AddressLike], [boolean], 'view'>

  isAllocation: TypedContractMethod<[allocationID: AddressLike], [boolean], 'view'>

  isAllowedLockedVerifier: TypedContractMethod<[verifier: AddressLike], [boolean], 'view'>

  isDelegationSlashingEnabled: TypedContractMethod<[], [boolean], 'view'>

  isOperator: TypedContractMethod<[operator: AddressLike, serviceProvider: AddressLike], [boolean], 'view'>

  legacySlash: TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish, reward: BigNumberish, beneficiary: AddressLike],
    [void],
    'nonpayable'
  >

  multicall: TypedContractMethod<[data: BytesLike[]], [string[]], 'nonpayable'>

  getFunction<T extends ContractMethod = ContractMethod>(key: string | FunctionFragment): T

  getFunction(nameOrSignature: '__DEPRECATED_getThawingPeriod'): TypedContractMethod<[], [bigint], 'view'>
  getFunction(nameOrSignature: 'acceptProxy'): TypedContractMethod<[_proxy: AddressLike], [void], 'nonpayable'>
  getFunction(
    nameOrSignature: 'acceptProxyAndCall',
  ): TypedContractMethod<[_proxy: AddressLike, _data: BytesLike], [void], 'nonpayable'>
  getFunction(
    nameOrSignature: 'closeAllocation',
  ): TypedContractMethod<[allocationID: AddressLike, poi: BytesLike], [void], 'nonpayable'>
  getFunction(
    nameOrSignature: 'collect',
  ): TypedContractMethod<[tokens: BigNumberish, allocationID: AddressLike], [void], 'nonpayable'>
  getFunction(
    nameOrSignature: 'getAllocation',
  ): TypedContractMethod<[allocationID: AddressLike], [IHorizonStakingExtension.AllocationStructOutput], 'view'>
  getFunction(
    nameOrSignature: 'getAllocationData',
  ): TypedContractMethod<[allocationID: AddressLike], [[boolean, string, string, bigint, bigint, bigint]], 'view'>
  getFunction(nameOrSignature: 'getAllocationState'): TypedContractMethod<[allocationID: AddressLike], [bigint], 'view'>
  getFunction(
    nameOrSignature: 'getDelegatedTokensAvailable',
  ): TypedContractMethod<[serviceProvider: AddressLike, verifier: AddressLike], [bigint], 'view'>
  getFunction(
    nameOrSignature: 'getDelegation',
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, delegator: AddressLike],
    [IHorizonStakingTypes.DelegationStructOutput],
    'view'
  >
  getFunction(
    nameOrSignature: 'getDelegationFeeCut',
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, paymentType: BigNumberish],
    [bigint],
    'view'
  >
  getFunction(
    nameOrSignature: 'getDelegationPool',
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.DelegationPoolStructOutput],
    'view'
  >
  getFunction(nameOrSignature: 'getIdleStake'): TypedContractMethod<[serviceProvider: AddressLike], [bigint], 'view'>
  getFunction(nameOrSignature: 'getIndexerStakedTokens'): TypedContractMethod<[indexer: AddressLike], [bigint], 'view'>
  getFunction(nameOrSignature: 'getMaxThawingPeriod'): TypedContractMethod<[], [bigint], 'view'>
  getFunction(
    nameOrSignature: 'getProviderTokensAvailable',
  ): TypedContractMethod<[serviceProvider: AddressLike, verifier: AddressLike], [bigint], 'view'>
  getFunction(
    nameOrSignature: 'getProvision',
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike],
    [IHorizonStakingTypes.ProvisionStructOutput],
    'view'
  >
  getFunction(
    nameOrSignature: 'getServiceProvider',
  ): TypedContractMethod<[serviceProvider: AddressLike], [IHorizonStakingTypes.ServiceProviderStructOutput], 'view'>
  getFunction(nameOrSignature: 'getStake'): TypedContractMethod<[serviceProvider: AddressLike], [bigint], 'view'>
  getFunction(
    nameOrSignature: 'getSubgraphAllocatedTokens',
  ): TypedContractMethod<[subgraphDeploymentID: BytesLike], [bigint], 'view'>
  getFunction(nameOrSignature: 'getSubgraphService'): TypedContractMethod<[], [string], 'view'>
  getFunction(
    nameOrSignature: 'getThawRequest',
  ): TypedContractMethod<
    [requestType: BigNumberish, thawRequestId: BytesLike],
    [IHorizonStakingTypes.ThawRequestStructOutput],
    'view'
  >
  getFunction(
    nameOrSignature: 'getThawRequestList',
  ): TypedContractMethod<
    [requestType: BigNumberish, serviceProvider: AddressLike, verifier: AddressLike, owner: AddressLike],
    [ILinkedList.ListStructOutput],
    'view'
  >
  getFunction(
    nameOrSignature: 'getThawedTokens',
  ): TypedContractMethod<
    [requestType: BigNumberish, serviceProvider: AddressLike, verifier: AddressLike, owner: AddressLike],
    [bigint],
    'view'
  >
  getFunction(
    nameOrSignature: 'getTokensAvailable',
  ): TypedContractMethod<
    [serviceProvider: AddressLike, verifier: AddressLike, delegationRatio: BigNumberish],
    [bigint],
    'view'
  >
  getFunction(nameOrSignature: 'hasStake'): TypedContractMethod<[indexer: AddressLike], [boolean], 'view'>
  getFunction(nameOrSignature: 'isAllocation'): TypedContractMethod<[allocationID: AddressLike], [boolean], 'view'>
  getFunction(
    nameOrSignature: 'isAllowedLockedVerifier',
  ): TypedContractMethod<[verifier: AddressLike], [boolean], 'view'>
  getFunction(nameOrSignature: 'isDelegationSlashingEnabled'): TypedContractMethod<[], [boolean], 'view'>
  getFunction(
    nameOrSignature: 'isOperator',
  ): TypedContractMethod<[operator: AddressLike, serviceProvider: AddressLike], [boolean], 'view'>
  getFunction(
    nameOrSignature: 'legacySlash',
  ): TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish, reward: BigNumberish, beneficiary: AddressLike],
    [void],
    'nonpayable'
  >
  getFunction(nameOrSignature: 'multicall'): TypedContractMethod<[data: BytesLike[]], [string[]], 'nonpayable'>

  getEvent(
    key: 'AllocationClosed',
  ): TypedContractEvent<
    AllocationClosedEvent.InputTuple,
    AllocationClosedEvent.OutputTuple,
    AllocationClosedEvent.OutputObject
  >
  getEvent(
    key: 'GraphDirectoryInitialized',
  ): TypedContractEvent<
    GraphDirectoryInitializedEvent.InputTuple,
    GraphDirectoryInitializedEvent.OutputTuple,
    GraphDirectoryInitializedEvent.OutputObject
  >
  getEvent(
    key: 'HorizonStakeDeposited',
  ): TypedContractEvent<
    HorizonStakeDepositedEvent.InputTuple,
    HorizonStakeDepositedEvent.OutputTuple,
    HorizonStakeDepositedEvent.OutputObject
  >
  getEvent(
    key: 'RebateCollected',
  ): TypedContractEvent<
    RebateCollectedEvent.InputTuple,
    RebateCollectedEvent.OutputTuple,
    RebateCollectedEvent.OutputObject
  >
  getEvent(
    key: 'StakeSlashed',
  ): TypedContractEvent<StakeSlashedEvent.InputTuple, StakeSlashedEvent.OutputTuple, StakeSlashedEvent.OutputObject>

  filters: {
    'AllocationClosed(address,bytes32,uint256,uint256,address,address,bytes32,bool)': TypedContractEvent<
      AllocationClosedEvent.InputTuple,
      AllocationClosedEvent.OutputTuple,
      AllocationClosedEvent.OutputObject
    >
    AllocationClosed: TypedContractEvent<
      AllocationClosedEvent.InputTuple,
      AllocationClosedEvent.OutputTuple,
      AllocationClosedEvent.OutputObject
    >

    'GraphDirectoryInitialized(address,address,address,address,address,address,address,address,address,address)': TypedContractEvent<
      GraphDirectoryInitializedEvent.InputTuple,
      GraphDirectoryInitializedEvent.OutputTuple,
      GraphDirectoryInitializedEvent.OutputObject
    >
    GraphDirectoryInitialized: TypedContractEvent<
      GraphDirectoryInitializedEvent.InputTuple,
      GraphDirectoryInitializedEvent.OutputTuple,
      GraphDirectoryInitializedEvent.OutputObject
    >

    'HorizonStakeDeposited(address,uint256)': TypedContractEvent<
      HorizonStakeDepositedEvent.InputTuple,
      HorizonStakeDepositedEvent.OutputTuple,
      HorizonStakeDepositedEvent.OutputObject
    >
    HorizonStakeDeposited: TypedContractEvent<
      HorizonStakeDepositedEvent.InputTuple,
      HorizonStakeDepositedEvent.OutputTuple,
      HorizonStakeDepositedEvent.OutputObject
    >

    'RebateCollected(address,address,bytes32,address,uint256,uint256,uint256,uint256,uint256,uint256,uint256)': TypedContractEvent<
      RebateCollectedEvent.InputTuple,
      RebateCollectedEvent.OutputTuple,
      RebateCollectedEvent.OutputObject
    >
    RebateCollected: TypedContractEvent<
      RebateCollectedEvent.InputTuple,
      RebateCollectedEvent.OutputTuple,
      RebateCollectedEvent.OutputObject
    >

    'StakeSlashed(address,uint256,uint256,address)': TypedContractEvent<
      StakeSlashedEvent.InputTuple,
      StakeSlashedEvent.OutputTuple,
      StakeSlashedEvent.OutputObject
    >
    StakeSlashed: TypedContractEvent<
      StakeSlashedEvent.InputTuple,
      StakeSlashedEvent.OutputTuple,
      StakeSlashedEvent.OutputObject
    >
  }
}
