/* 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 DelegationStruct = {
    shares: BigNumberish;
    tokensLocked: BigNumberish;
    tokensLockedUntil: BigNumberish;
  };

  export type DelegationStructOutput = [
    shares: bigint,
    tokensLocked: bigint,
    tokensLockedUntil: bigint,
  ] & { shares: bigint; tokensLocked: bigint; tokensLockedUntil: bigint };
}

export declare namespace IStakingExtension {
  export type DelegationPoolReturnStruct = {
    __DEPRECATED_cooldownBlocks: BigNumberish;
    indexingRewardCut: BigNumberish;
    queryFeeCut: BigNumberish;
    updatedAtBlock: BigNumberish;
    tokens: BigNumberish;
    shares: BigNumberish;
  };

  export type DelegationPoolReturnStructOutput = [
    __DEPRECATED_cooldownBlocks: bigint,
    indexingRewardCut: bigint,
    queryFeeCut: bigint,
    updatedAtBlock: bigint,
    tokens: bigint,
    shares: bigint,
  ] & {
    __DEPRECATED_cooldownBlocks: bigint;
    indexingRewardCut: bigint;
    queryFeeCut: bigint;
    updatedAtBlock: bigint;
    tokens: bigint;
    shares: bigint;
  };
}

export declare namespace IStakes {
  export type IndexerStruct = {
    tokensStaked: BigNumberish;
    tokensAllocated: BigNumberish;
    tokensLocked: BigNumberish;
    tokensLockedUntil: BigNumberish;
  };

  export type IndexerStructOutput = [
    tokensStaked: bigint,
    tokensAllocated: bigint,
    tokensLocked: bigint,
    tokensLockedUntil: bigint,
  ] & {
    tokensStaked: bigint;
    tokensAllocated: bigint;
    tokensLocked: bigint;
    tokensLockedUntil: bigint;
  };
}

export interface IStakingExtensionInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "allocations"
      | "alphaDenominator"
      | "alphaNumerator"
      | "curationPercentage"
      | "delegate"
      | "delegationPools"
      | "delegationRatio"
      | "delegationTaxPercentage"
      | "delegationUnbondingPeriod"
      | "getDelegation"
      | "getWithdraweableDelegatedTokens"
      | "isDelegator"
      | "lambdaDenominator"
      | "lambdaNumerator"
      | "maxAllocationEpochs"
      | "minimumIndexerStake"
      | "operatorAuth"
      | "protocolPercentage"
      | "rewardsDestination"
      | "setDelegationRatio"
      | "setDelegationTaxPercentage"
      | "setDelegationUnbondingPeriod"
      | "setSlasher"
      | "slash"
      | "slashers"
      | "stakes"
      | "subgraphAllocations"
      | "thawingPeriod"
      | "undelegate"
      | "withdrawDelegated",
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "SlasherUpdate"
      | "StakeDelegated"
      | "StakeDelegatedLocked"
      | "StakeDelegatedWithdrawn"
      | "StakeSlashed",
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "allocations",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "alphaDenominator",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "alphaNumerator",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "curationPercentage",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "delegate",
    values: [AddressLike, BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "delegationPools",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "delegationRatio",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "delegationTaxPercentage",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "delegationUnbondingPeriod",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegation",
    values: [AddressLike, AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "getWithdraweableDelegatedTokens",
    values: [IStakingData.DelegationStruct],
  ): string;
  encodeFunctionData(
    functionFragment: "isDelegator",
    values: [AddressLike, AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "lambdaDenominator",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "lambdaNumerator",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "maxAllocationEpochs",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "minimumIndexerStake",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "operatorAuth",
    values: [AddressLike, AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "protocolPercentage",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "rewardsDestination",
    values: [AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationRatio",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationTaxPercentage",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setDelegationUnbondingPeriod",
    values: [BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "setSlasher",
    values: [AddressLike, boolean],
  ): string;
  encodeFunctionData(
    functionFragment: "slash",
    values: [AddressLike, BigNumberish, BigNumberish, AddressLike],
  ): string;
  encodeFunctionData(
    functionFragment: "slashers",
    values: [AddressLike],
  ): string;
  encodeFunctionData(functionFragment: "stakes", values: [AddressLike]): string;
  encodeFunctionData(
    functionFragment: "subgraphAllocations",
    values: [BytesLike],
  ): string;
  encodeFunctionData(
    functionFragment: "thawingPeriod",
    values?: undefined,
  ): string;
  encodeFunctionData(
    functionFragment: "undelegate",
    values: [AddressLike, BigNumberish],
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawDelegated",
    values: [AddressLike, AddressLike],
  ): string;

  decodeFunctionResult(
    functionFragment: "allocations",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "alphaDenominator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "alphaNumerator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "curationPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "delegate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "delegationPools",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "delegationRatio",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "delegationTaxPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "delegationUnbondingPeriod",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegation",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "getWithdraweableDelegatedTokens",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "isDelegator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "lambdaDenominator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "lambdaNumerator",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "maxAllocationEpochs",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "minimumIndexerStake",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "operatorAuth",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "protocolPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "rewardsDestination",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationRatio",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationTaxPercentage",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "setDelegationUnbondingPeriod",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "setSlasher", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "slash", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "slashers", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "stakes", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "subgraphAllocations",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(
    functionFragment: "thawingPeriod",
    data: BytesLike,
  ): Result;
  decodeFunctionResult(functionFragment: "undelegate", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "withdrawDelegated",
    data: BytesLike,
  ): Result;
}

export namespace SlasherUpdateEvent {
  export type InputTuple = [
    caller: AddressLike,
    slasher: AddressLike,
    allowed: boolean,
  ];
  export type OutputTuple = [caller: string, slasher: string, allowed: boolean];
  export interface OutputObject {
    caller: string;
    slasher: 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 StakeDelegatedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish,
    shares: BigNumberish,
  ];
  export type OutputTuple = [
    indexer: string,
    delegator: string,
    tokens: bigint,
    shares: bigint,
  ];
  export interface OutputObject {
    indexer: string;
    delegator: string;
    tokens: bigint;
    shares: 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 StakeDelegatedLockedEvent {
  export type InputTuple = [
    indexer: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish,
    shares: BigNumberish,
    until: BigNumberish,
  ];
  export type OutputTuple = [
    indexer: string,
    delegator: string,
    tokens: bigint,
    shares: bigint,
    until: bigint,
  ];
  export interface OutputObject {
    indexer: string;
    delegator: string;
    tokens: bigint;
    shares: 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 StakeDelegatedWithdrawnEvent {
  export type InputTuple = [
    indexer: AddressLike,
    delegator: AddressLike,
    tokens: BigNumberish,
  ];
  export type OutputTuple = [
    indexer: string,
    delegator: string,
    tokens: bigint,
  ];
  export interface OutputObject {
    indexer: string;
    delegator: 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 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 IStakingExtension extends BaseContract {
  connect(runner?: ContractRunner | null): IStakingExtension;
  waitForDeployment(): Promise<this>;

  interface: IStakingExtensionInterface;

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

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

  alphaDenominator: TypedContractMethod<[], [bigint], "view">;

  alphaNumerator: TypedContractMethod<[], [bigint], "view">;

  curationPercentage: TypedContractMethod<[], [bigint], "view">;

  delegate: TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish],
    [bigint],
    "nonpayable"
  >;

  delegationPools: TypedContractMethod<
    [indexer: AddressLike],
    [IStakingExtension.DelegationPoolReturnStructOutput],
    "view"
  >;

  delegationRatio: TypedContractMethod<[], [bigint], "view">;

  delegationTaxPercentage: TypedContractMethod<[], [bigint], "view">;

  delegationUnbondingPeriod: TypedContractMethod<[], [bigint], "view">;

  getDelegation: TypedContractMethod<
    [indexer: AddressLike, delegator: AddressLike],
    [IStakingData.DelegationStructOutput],
    "view"
  >;

  getWithdraweableDelegatedTokens: TypedContractMethod<
    [delegation: IStakingData.DelegationStruct],
    [bigint],
    "view"
  >;

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

  lambdaDenominator: TypedContractMethod<[], [bigint], "view">;

  lambdaNumerator: TypedContractMethod<[], [bigint], "view">;

  maxAllocationEpochs: TypedContractMethod<[], [bigint], "view">;

  minimumIndexerStake: TypedContractMethod<[], [bigint], "view">;

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

  protocolPercentage: TypedContractMethod<[], [bigint], "view">;

  rewardsDestination: TypedContractMethod<
    [indexer: AddressLike],
    [string],
    "view"
  >;

  setDelegationRatio: TypedContractMethod<
    [delegationRatio: BigNumberish],
    [void],
    "nonpayable"
  >;

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

  setDelegationUnbondingPeriod: TypedContractMethod<
    [delegationUnbondingPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;

  setSlasher: TypedContractMethod<
    [slasher: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;

  slash: TypedContractMethod<
    [
      indexer: AddressLike,
      tokens: BigNumberish,
      reward: BigNumberish,
      beneficiary: AddressLike,
    ],
    [void],
    "nonpayable"
  >;

  slashers: TypedContractMethod<[maybeSlasher: AddressLike], [boolean], "view">;

  stakes: TypedContractMethod<
    [indexer: AddressLike],
    [IStakes.IndexerStructOutput],
    "view"
  >;

  subgraphAllocations: TypedContractMethod<
    [subgraphDeploymentId: BytesLike],
    [bigint],
    "view"
  >;

  thawingPeriod: TypedContractMethod<[], [bigint], "view">;

  undelegate: TypedContractMethod<
    [indexer: AddressLike, shares: BigNumberish],
    [bigint],
    "nonpayable"
  >;

  withdrawDelegated: TypedContractMethod<
    [indexer: AddressLike, newIndexer: AddressLike],
    [bigint],
    "nonpayable"
  >;

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

  getFunction(
    nameOrSignature: "allocations",
  ): TypedContractMethod<
    [allocationID: AddressLike],
    [IStakingData.AllocationStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "alphaDenominator",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "alphaNumerator",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "curationPercentage",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "delegate",
  ): TypedContractMethod<
    [indexer: AddressLike, tokens: BigNumberish],
    [bigint],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "delegationPools",
  ): TypedContractMethod<
    [indexer: AddressLike],
    [IStakingExtension.DelegationPoolReturnStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "delegationRatio",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "delegationTaxPercentage",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "delegationUnbondingPeriod",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "getDelegation",
  ): TypedContractMethod<
    [indexer: AddressLike, delegator: AddressLike],
    [IStakingData.DelegationStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "getWithdraweableDelegatedTokens",
  ): TypedContractMethod<
    [delegation: IStakingData.DelegationStruct],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "isDelegator",
  ): TypedContractMethod<
    [indexer: AddressLike, delegator: AddressLike],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "lambdaDenominator",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "lambdaNumerator",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "maxAllocationEpochs",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "minimumIndexerStake",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "operatorAuth",
  ): TypedContractMethod<
    [indexer: AddressLike, maybeOperator: AddressLike],
    [boolean],
    "view"
  >;
  getFunction(
    nameOrSignature: "protocolPercentage",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "rewardsDestination",
  ): TypedContractMethod<[indexer: AddressLike], [string], "view">;
  getFunction(
    nameOrSignature: "setDelegationRatio",
  ): TypedContractMethod<[delegationRatio: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setDelegationTaxPercentage",
  ): TypedContractMethod<[percentage: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "setDelegationUnbondingPeriod",
  ): TypedContractMethod<
    [delegationUnbondingPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "setSlasher",
  ): TypedContractMethod<
    [slasher: AddressLike, allowed: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "slash",
  ): TypedContractMethod<
    [
      indexer: AddressLike,
      tokens: BigNumberish,
      reward: BigNumberish,
      beneficiary: AddressLike,
    ],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "slashers",
  ): TypedContractMethod<[maybeSlasher: AddressLike], [boolean], "view">;
  getFunction(
    nameOrSignature: "stakes",
  ): TypedContractMethod<
    [indexer: AddressLike],
    [IStakes.IndexerStructOutput],
    "view"
  >;
  getFunction(
    nameOrSignature: "subgraphAllocations",
  ): TypedContractMethod<[subgraphDeploymentId: BytesLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "thawingPeriod",
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "undelegate",
  ): TypedContractMethod<
    [indexer: AddressLike, shares: BigNumberish],
    [bigint],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "withdrawDelegated",
  ): TypedContractMethod<
    [indexer: AddressLike, newIndexer: AddressLike],
    [bigint],
    "nonpayable"
  >;

  getEvent(
    key: "SlasherUpdate",
  ): TypedContractEvent<
    SlasherUpdateEvent.InputTuple,
    SlasherUpdateEvent.OutputTuple,
    SlasherUpdateEvent.OutputObject
  >;
  getEvent(
    key: "StakeDelegated",
  ): TypedContractEvent<
    StakeDelegatedEvent.InputTuple,
    StakeDelegatedEvent.OutputTuple,
    StakeDelegatedEvent.OutputObject
  >;
  getEvent(
    key: "StakeDelegatedLocked",
  ): TypedContractEvent<
    StakeDelegatedLockedEvent.InputTuple,
    StakeDelegatedLockedEvent.OutputTuple,
    StakeDelegatedLockedEvent.OutputObject
  >;
  getEvent(
    key: "StakeDelegatedWithdrawn",
  ): TypedContractEvent<
    StakeDelegatedWithdrawnEvent.InputTuple,
    StakeDelegatedWithdrawnEvent.OutputTuple,
    StakeDelegatedWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "StakeSlashed",
  ): TypedContractEvent<
    StakeSlashedEvent.InputTuple,
    StakeSlashedEvent.OutputTuple,
    StakeSlashedEvent.OutputObject
  >;

  filters: {
    "SlasherUpdate(address,address,bool)": TypedContractEvent<
      SlasherUpdateEvent.InputTuple,
      SlasherUpdateEvent.OutputTuple,
      SlasherUpdateEvent.OutputObject
    >;
    SlasherUpdate: TypedContractEvent<
      SlasherUpdateEvent.InputTuple,
      SlasherUpdateEvent.OutputTuple,
      SlasherUpdateEvent.OutputObject
    >;

    "StakeDelegated(address,address,uint256,uint256)": TypedContractEvent<
      StakeDelegatedEvent.InputTuple,
      StakeDelegatedEvent.OutputTuple,
      StakeDelegatedEvent.OutputObject
    >;
    StakeDelegated: TypedContractEvent<
      StakeDelegatedEvent.InputTuple,
      StakeDelegatedEvent.OutputTuple,
      StakeDelegatedEvent.OutputObject
    >;

    "StakeDelegatedLocked(address,address,uint256,uint256,uint256)": TypedContractEvent<
      StakeDelegatedLockedEvent.InputTuple,
      StakeDelegatedLockedEvent.OutputTuple,
      StakeDelegatedLockedEvent.OutputObject
    >;
    StakeDelegatedLocked: TypedContractEvent<
      StakeDelegatedLockedEvent.InputTuple,
      StakeDelegatedLockedEvent.OutputTuple,
      StakeDelegatedLockedEvent.OutputObject
    >;

    "StakeDelegatedWithdrawn(address,address,uint256)": TypedContractEvent<
      StakeDelegatedWithdrawnEvent.InputTuple,
      StakeDelegatedWithdrawnEvent.OutputTuple,
      StakeDelegatedWithdrawnEvent.OutputObject
    >;
    StakeDelegatedWithdrawn: TypedContractEvent<
      StakeDelegatedWithdrawnEvent.InputTuple,
      StakeDelegatedWithdrawnEvent.OutputTuple,
      StakeDelegatedWithdrawnEvent.OutputObject
    >;

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