/* 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 IStakingData {
  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 type RebatesParametersStruct = {
    alphaNumerator: BigNumberish;
    alphaDenominator: BigNumberish;
    lambdaNumerator: BigNumberish;
    lambdaDenominator: BigNumberish;
  };

  export type RebatesParametersStructOutput = [
    alphaNumerator: bigint,
    alphaDenominator: bigint,
    lambdaNumerator: bigint,
    lambdaDenominator: bigint,
  ] & {
    alphaNumerator: bigint;
    alphaDenominator: bigint;
    lambdaNumerator: bigint;
    lambdaDenominator: bigint;
  };
}

export interface IStakingBaseInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "allocate"
      | "allocateFrom"
      | "closeAllocation"
      | "collect"
      | "getAllocation"
      | "getAllocationData"
      | "getAllocationState"
      | "getIndexerCapacity"
      | "getIndexerStakedTokens"
      | "getSubgraphAllocatedTokens"
      | "hasStake"
      | "initialize"
      | "isActiveAllocation"
      | "isAllocation"
      | "isOperator"
      | "setCounterpartStakingAddress"
      | "setCurationPercentage"
      | "setDelegationParameters"
      | "setExtensionImpl"
      | "setMaxAllocationEpochs"
      | "setMinimumIndexerStake"
      | "setOperator"
      | "setProtocolPercentage"
      | "setRebateParameters"
      | "setRewardsDestination"
      | "setThawingPeriod"
      | "stake"
      | "stakeTo"
      | "unstake"
      | "withdraw",
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "AllocationClosed"
      | "AllocationCreated"
      | "DelegationParametersUpdated"
      | "ExtensionImplementationSet"
      | "RebateCollected"
      | "SetOperator"
      | "SetRewardsDestination"
      | "StakeDeposited"
      | "StakeLocked"
      | "StakeWithdrawn",
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "allocate",
    values: [BytesLike, BigNumberish, AddressLike, BytesLike, BytesLike],
  ): string;
  encodeFunctionData(
    functionFragment: "allocateFrom",
    values: [
      AddressLike,
      BytesLike,
      BigNumberish,
      AddressLike,
      BytesLike,
      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: "getIndexerCapacity",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "getIndexerStakedTokens",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "getSubgraphAllocatedTokens",
    values: [BytesLike],
  ): string;
  encodeFunctionData(
    functionFragment: "hasStake",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "initialize",
    values: [
      AddressLike,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      BigNumberish,
      IStakingData.RebatesParametersStruct,
      AddressLike,
    ],
  ): string;
  encodeFunctionData(
    functionFragment: "isActiveAllocation",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "isAllocation",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "isOperator",
    values: [AddressLike, AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "setCounterpartStakingAddress",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "setCurationPercentage",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationParameters",
    values: [BigNumberish, BigNumberish, BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setExtensionImpl",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "setMaxAllocationEpochs",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setMinimumIndexerStake",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setOperator",
    values: [AddressLike, boolean],
  ): string;
  encodeFunctionData(
    functionFragment: "setProtocolPercentage",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setRebateParameters",
    values: [BigNumberish, BigNumberish, BigNumberish, BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setRewardsDestination",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "setThawingPeriod",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(functionFragment: "stake", values: [BigNumberish]): string;
  encodeFunctionData(
    functionFragment: "stakeTo",
    values: [AddressLike, BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "unstake",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(functionFragment: "withdraw", values?: undefined): string;

  decodeFunctionResult(functionFragment: "allocate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "allocateFrom",
    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: "getIndexerCapacity",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "getIndexerStakedTokens",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "getSubgraphAllocatedTokens",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "hasStake", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "isActiveAllocation",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "isAllocation",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "isOperator", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "setCounterpartStakingAddress",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setCurationPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationParameters",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setExtensionImpl",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMaxAllocationEpochs",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setMinimumIndexerStake",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setOperator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setProtocolPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setRebateParameters",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setRewardsDestination",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setThawingPeriod",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "stake", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "stakeTo", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "unstake", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "withdraw", 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 AllocationCreatedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    subgraphDeploymentID: BytesLike,
    epoch: BigNumberish,
    tokens: BigNumberish,
    allocationID: AddressLike,
    metadata: BytesLike,
  ];
  export type OutputTuple = [
    indexer: string,
    subgraphDeploymentID: string,
    epoch: bigint,
    tokens: bigint,
    allocationID: string,
    metadata: string,
  ];
  export interface OutputObject {
    indexer: string;
    subgraphDeploymentID: string;
    epoch: bigint;
    tokens: bigint;
    allocationID: string;
    metadata: 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 DelegationParametersUpdatedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    indexingRewardCut: BigNumberish,
    queryFeeCut: BigNumberish,
    __DEPRECATED_cooldownBlocks: BigNumberish,
  ];
  export type OutputTuple = [
    indexer: string,
    indexingRewardCut: bigint,
    queryFeeCut: bigint,
    __DEPRECATED_cooldownBlocks: bigint,
  ];
  export interface OutputObject {
    indexer: string;
    indexingRewardCut: bigint;
    queryFeeCut: bigint;
    __DEPRECATED_cooldownBlocks: 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 ExtensionImplementationSetEvent {
  export type InputTuple = [extensionImpl: AddressLike];
  export type OutputTuple = [extensionImpl: string];
  export interface OutputObject {
    extensionImpl: 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 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 SetOperatorEvent {
  export type InputTuple = [
    indexer: AddressLike,
    operator: AddressLike,
    allowed: boolean,
  ];
  export type OutputTuple = [
    indexer: string,
    operator: string,
    allowed: boolean,
  ];
  export interface OutputObject {
    indexer: string;
    operator: string;
    allowed: 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 SetRewardsDestinationEvent {
  export type InputTuple = [indexer: AddressLike, destination: AddressLike];
  export type OutputTuple = [indexer: string, destination: string];
  export interface OutputObject {
    indexer: string;
    destination: 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 StakeDepositedEvent {
  export type InputTuple = [indexer: AddressLike, tokens: BigNumberish];
  export type OutputTuple = [indexer: string, tokens: bigint];
  export interface OutputObject {
    indexer: 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 StakeLockedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    tokens: BigNumberish,
    until: BigNumberish,
  ];
  export type OutputTuple = [indexer: string, tokens: bigint, until: bigint];
  export interface OutputObject {
    indexer: string;
    tokens: bigint;
    until: 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 StakeWithdrawnEvent {
  export type InputTuple = [indexer: AddressLike, tokens: BigNumberish];
  export type OutputTuple = [indexer: string, tokens: bigint];
  export interface OutputObject {
    indexer: 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 interface IStakingBase extends BaseContract {
  connect(runner?: ContractRunner | null): IStakingBase;
  waitForDeployment(): Promise<this>;

  interface: IStakingBaseInterface;

  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>;

  allocate: TypedContractMethod<
    [
      subgraphDeploymentID: BytesLike,
      tokens: BigNumberish,
      allocationID: AddressLike,
      metadata: BytesLike,
      proof: BytesLike,
    ],
    [void],
    "nonpayable"
  >;

  allocateFrom: TypedContractMethod<
    [
      indexer: AddressLike,
      subgraphDeploymentID: BytesLike,
      tokens: BigNumberish,
      allocationID: AddressLike,
      metadata: BytesLike,
      proof: BytesLike,
    ],
    [void],
    "nonpayable"
  >;

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

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

  getAllocation: TypedContractMethod<
    [allocationID: AddressLike],
    [IStakingData.AllocationStructOutput],
    "view"
  >;

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

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

  getIndexerCapacity: TypedContractMethod<
    [indexer: AddressLike],
    [bigint],
    "view"
  >;

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

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

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

  initialize: TypedContractMethod<
    [
      controller: AddressLike,
      minimumIndexerStake: BigNumberish,
      thawingPeriod: BigNumberish,
      protocolPercentage: BigNumberish,
      curationPercentage: BigNumberish,
      maxAllocationEpochs: BigNumberish,
      delegationUnbondingPeriod: BigNumberish,
      delegationRatio: BigNumberish,
      rebatesParameters: IStakingData.RebatesParametersStruct,
      extensionImpl: AddressLike,
    ],
    [void],
    "nonpayable"
  >;

  isActiveAllocation: TypedContractMethod<
    [allocationID: AddressLike],
    [boolean],
    "view"
  >;

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

  isOperator: TypedContractMethod<
    [operator: AddressLike, indexer: AddressLike],
    [boolean],
    "view"
  >;

  setCounterpartStakingAddress: TypedContractMethod<
    [counterpart: AddressLike],
    [void],
    "nonpayable"
  >;

  setCurationPercentage: TypedContractMethod<
    [percentage: BigNumberish],
    [void],
    "nonpayable"
  >;

  setDelegationParameters: TypedContractMethod<
    [
      indexingRewardCut: BigNumberish,
      queryFeeCut: BigNumberish,
      arg2: BigNumberish,
    ],
    [void],
    "nonpayable"
  >;

  setExtensionImpl: TypedContractMethod<
    [extensionImpl: AddressLike],
    [void],
    "nonpayable"
  >;

  setMaxAllocationEpochs: TypedContractMethod<
    [maxAllocationEpochs: BigNumberish],
    [void],
    "nonpayable"
  >;

  setMinimumIndexerStake: TypedContractMethod<
    [minimumIndexerStake: BigNumberish],
    [void],
    "nonpayable"
  >;

  setOperator: TypedContractMethod<
    [operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;

  setProtocolPercentage: TypedContractMethod<
    [percentage: BigNumberish],
    [void],
    "nonpayable"
  >;

  setRebateParameters: TypedContractMethod<
    [
      alphaNumerator: BigNumberish,
      alphaDenominator: BigNumberish,
      lambdaNumerator: BigNumberish,
      lambdaDenominator: BigNumberish,
    ],
    [void],
    "nonpayable"
  >;

  setRewardsDestination: TypedContractMethod<
    [destination: AddressLike],
    [void],
    "nonpayable"
  >;

  setThawingPeriod: TypedContractMethod<
    [thawingPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;

  stake: TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;

  stakeTo: TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;

  unstake: TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;

  withdraw: TypedContractMethod<[], [void], "nonpayable">;

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

  getFunction(
    nameOrSignature: "allocate",
  ): TypedContractMethod<
    [
      subgraphDeploymentID: BytesLike,
      tokens: BigNumberish,
      allocationID: AddressLike,
      metadata: BytesLike,
      proof: BytesLike,
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "allocateFrom",
  ): TypedContractMethod<
    [
      indexer: AddressLike,
      subgraphDeploymentID: BytesLike,
      tokens: BigNumberish,
      allocationID: AddressLike,
      metadata: BytesLike,
      proof: 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],
    [IStakingData.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: "getIndexerCapacity",
  ): TypedContractMethod<[indexer: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getIndexerStakedTokens",
  ): TypedContractMethod<[indexer: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "getSubgraphAllocatedTokens",
  ): TypedContractMethod<[subgraphDeploymentID: BytesLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "hasStake",
  ): TypedContractMethod<[indexer: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "initialize",
  ): TypedContractMethod<
    [
      controller: AddressLike,
      minimumIndexerStake: BigNumberish,
      thawingPeriod: BigNumberish,
      protocolPercentage: BigNumberish,
      curationPercentage: BigNumberish,
      maxAllocationEpochs: BigNumberish,
      delegationUnbondingPeriod: BigNumberish,
      delegationRatio: BigNumberish,
      rebatesParameters: IStakingData.RebatesParametersStruct,
      extensionImpl: AddressLike,
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "isActiveAllocation",
  ): TypedContractMethod<[allocationID: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isAllocation",
  ): TypedContractMethod<[allocationID: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "isOperator",
  ): TypedContractMethod<
    [operator: AddressLike, indexer: AddressLike],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "setCounterpartStakingAddress",
  ): TypedContractMethod<[counterpart: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setCurationPercentage",
  ): TypedContractMethod<[percentage: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setDelegationParameters",
  ): TypedContractMethod<
    [
      indexingRewardCut: BigNumberish,
      queryFeeCut: BigNumberish,
      arg2: BigNumberish,
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setExtensionImpl",
  ): TypedContractMethod<[extensionImpl: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setMaxAllocationEpochs",
  ): TypedContractMethod<
    [maxAllocationEpochs: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setMinimumIndexerStake",
  ): TypedContractMethod<
    [minimumIndexerStake: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setOperator",
  ): TypedContractMethod<
    [operator: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setProtocolPercentage",
  ): TypedContractMethod<[percentage: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setRebateParameters",
  ): TypedContractMethod<
    [
      alphaNumerator: BigNumberish,
      alphaDenominator: BigNumberish,
      lambdaNumerator: BigNumberish,
      lambdaDenominator: BigNumberish,
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setRewardsDestination",
  ): TypedContractMethod<[destination: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setThawingPeriod",
  ): TypedContractMethod<[thawingPeriod: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "stake",
  ): TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "stakeTo",
  ): TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "unstake",
  ): TypedContractMethod<[tokens: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "withdraw",
  ): TypedContractMethod<[], [void], "nonpayable">;

  getEvent(
    key: "AllocationClosed",
  ): TypedContractEvent<
    AllocationClosedEvent.InputTuple,
    AllocationClosedEvent.OutputTuple,
    AllocationClosedEvent.OutputObject
  >;
  getEvent(
    key: "AllocationCreated",
  ): TypedContractEvent<
    AllocationCreatedEvent.InputTuple,
    AllocationCreatedEvent.OutputTuple,
    AllocationCreatedEvent.OutputObject
  >;
  getEvent(
    key: "DelegationParametersUpdated",
  ): TypedContractEvent<
    DelegationParametersUpdatedEvent.InputTuple,
    DelegationParametersUpdatedEvent.OutputTuple,
    DelegationParametersUpdatedEvent.OutputObject
  >;
  getEvent(
    key: "ExtensionImplementationSet",
  ): TypedContractEvent<
    ExtensionImplementationSetEvent.InputTuple,
    ExtensionImplementationSetEvent.OutputTuple,
    ExtensionImplementationSetEvent.OutputObject
  >;
  getEvent(
    key: "RebateCollected",
  ): TypedContractEvent<
    RebateCollectedEvent.InputTuple,
    RebateCollectedEvent.OutputTuple,
    RebateCollectedEvent.OutputObject
  >;
  getEvent(
    key: "SetOperator",
  ): TypedContractEvent<
    SetOperatorEvent.InputTuple,
    SetOperatorEvent.OutputTuple,
    SetOperatorEvent.OutputObject
  >;
  getEvent(
    key: "SetRewardsDestination",
  ): TypedContractEvent<
    SetRewardsDestinationEvent.InputTuple,
    SetRewardsDestinationEvent.OutputTuple,
    SetRewardsDestinationEvent.OutputObject
  >;
  getEvent(
    key: "StakeDeposited",
  ): TypedContractEvent<
    StakeDepositedEvent.InputTuple,
    StakeDepositedEvent.OutputTuple,
    StakeDepositedEvent.OutputObject
  >;
  getEvent(
    key: "StakeLocked",
  ): TypedContractEvent<
    StakeLockedEvent.InputTuple,
    StakeLockedEvent.OutputTuple,
    StakeLockedEvent.OutputObject
  >;
  getEvent(
    key: "StakeWithdrawn",
  ): TypedContractEvent<
    StakeWithdrawnEvent.InputTuple,
    StakeWithdrawnEvent.OutputTuple,
    StakeWithdrawnEvent.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
    >;

    "AllocationCreated(address,bytes32,uint256,uint256,address,bytes32)": TypedContractEvent<
      AllocationCreatedEvent.InputTuple,
      AllocationCreatedEvent.OutputTuple,
      AllocationCreatedEvent.OutputObject
    >;
    AllocationCreated: TypedContractEvent<
      AllocationCreatedEvent.InputTuple,
      AllocationCreatedEvent.OutputTuple,
      AllocationCreatedEvent.OutputObject
    >;

    "DelegationParametersUpdated(address,uint32,uint32,uint32)": TypedContractEvent<
      DelegationParametersUpdatedEvent.InputTuple,
      DelegationParametersUpdatedEvent.OutputTuple,
      DelegationParametersUpdatedEvent.OutputObject
    >;
    DelegationParametersUpdated: TypedContractEvent<
      DelegationParametersUpdatedEvent.InputTuple,
      DelegationParametersUpdatedEvent.OutputTuple,
      DelegationParametersUpdatedEvent.OutputObject
    >;

    "ExtensionImplementationSet(address)": TypedContractEvent<
      ExtensionImplementationSetEvent.InputTuple,
      ExtensionImplementationSetEvent.OutputTuple,
      ExtensionImplementationSetEvent.OutputObject
    >;
    ExtensionImplementationSet: TypedContractEvent<
      ExtensionImplementationSetEvent.InputTuple,
      ExtensionImplementationSetEvent.OutputTuple,
      ExtensionImplementationSetEvent.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
    >;

    "SetOperator(address,address,bool)": TypedContractEvent<
      SetOperatorEvent.InputTuple,
      SetOperatorEvent.OutputTuple,
      SetOperatorEvent.OutputObject
    >;
    SetOperator: TypedContractEvent<
      SetOperatorEvent.InputTuple,
      SetOperatorEvent.OutputTuple,
      SetOperatorEvent.OutputObject
    >;

    "SetRewardsDestination(address,address)": TypedContractEvent<
      SetRewardsDestinationEvent.InputTuple,
      SetRewardsDestinationEvent.OutputTuple,
      SetRewardsDestinationEvent.OutputObject
    >;
    SetRewardsDestination: TypedContractEvent<
      SetRewardsDestinationEvent.InputTuple,
      SetRewardsDestinationEvent.OutputTuple,
      SetRewardsDestinationEvent.OutputObject
    >;

    "StakeDeposited(address,uint256)": TypedContractEvent<
      StakeDepositedEvent.InputTuple,
      StakeDepositedEvent.OutputTuple,
      StakeDepositedEvent.OutputObject
    >;
    StakeDeposited: TypedContractEvent<
      StakeDepositedEvent.InputTuple,
      StakeDepositedEvent.OutputTuple,
      StakeDepositedEvent.OutputObject
    >;

    "StakeLocked(address,uint256,uint256)": TypedContractEvent<
      StakeLockedEvent.InputTuple,
      StakeLockedEvent.OutputTuple,
      StakeLockedEvent.OutputObject
    >;
    StakeLocked: TypedContractEvent<
      StakeLockedEvent.InputTuple,
      StakeLockedEvent.OutputTuple,
      StakeLockedEvent.OutputObject
    >;

    "StakeWithdrawn(address,uint256)": TypedContractEvent<
      StakeWithdrawnEvent.InputTuple,
      StakeWithdrawnEvent.OutputTuple,
      StakeWithdrawnEvent.OutputObject
    >;
    StakeWithdrawn: TypedContractEvent<
      StakeWithdrawnEvent.InputTuple,
      StakeWithdrawnEvent.OutputTuple,
      StakeWithdrawnEvent.OutputObject
    >;
  };
}
