/* 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 interface ProtocolStakerMockInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "addDelegation"
      | "addValidation"
      | "decreaseStake"
      | "delegations"
      | "firstActive"
      | "firstQueued"
      | "getDelegation"
      | "getDelegationPeriodDetails"
      | "getDelegatorsRewards"
      | "getValidation"
      | "getValidationPeriodDetails"
      | "getValidationTotals"
      | "getValidationsNum"
      | "getWithdrawable"
      | "helper__setDelegationIsLocked"
      | "helper__setDelegationStartPeriod"
      | "helper__setDelegationValidator"
      | "helper__setStargate"
      | "helper__setValidationCompletedPeriods"
      | "helper__setValidationExitBlock"
      | "helper__setValidatorStatus"
      | "increaseStake"
      | "issuance"
      | "next"
      | "queuedStake"
      | "setBeneficiary"
      | "signalDelegationExit"
      | "signalExit"
      | "totalStake"
      | "validations"
      | "withdrawDelegation"
      | "withdrawStake"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "BeneficiarySet"
      | "DelegationAdded"
      | "DelegationSignaledExit"
      | "DelegationWithdrawn"
      | "StakeDecreased"
      | "StakeIncreased"
      | "ValidationQueued"
      | "ValidationSignaledExit"
      | "ValidationWithdrawn"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "addDelegation",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "addValidation",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "decreaseStake",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "delegations",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "firstActive",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "firstQueued",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegation",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegationPeriodDetails",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegatorsRewards",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "getValidation",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getValidationPeriodDetails",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getValidationTotals",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getValidationsNum",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getWithdrawable",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setDelegationIsLocked",
    values: [BigNumberish, boolean]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setDelegationStartPeriod",
    values: [BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setDelegationValidator",
    values: [BigNumberish, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setStargate",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setValidationCompletedPeriods",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setValidationExitBlock",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "helper__setValidatorStatus",
    values: [AddressLike, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "increaseStake",
    values: [AddressLike]
  ): string;
  encodeFunctionData(functionFragment: "issuance", values?: undefined): string;
  encodeFunctionData(functionFragment: "next", values: [AddressLike]): string;
  encodeFunctionData(
    functionFragment: "queuedStake",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "setBeneficiary",
    values: [AddressLike, AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "signalDelegationExit",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "signalExit",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "totalStake",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "validations",
    values: [AddressLike]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawDelegation",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawStake",
    values: [AddressLike]
  ): string;

  decodeFunctionResult(
    functionFragment: "addDelegation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "addValidation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "decreaseStake",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "delegations",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "firstActive",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "firstQueued",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegationPeriodDetails",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getDelegatorsRewards",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getValidation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getValidationPeriodDetails",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getValidationTotals",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getValidationsNum",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getWithdrawable",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setDelegationIsLocked",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setDelegationStartPeriod",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setDelegationValidator",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setStargate",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setValidationCompletedPeriods",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setValidationExitBlock",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "helper__setValidatorStatus",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "increaseStake",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "issuance", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "next", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "queuedStake",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setBeneficiary",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "signalDelegationExit",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "signalExit", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "totalStake", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "validations",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawDelegation",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawStake",
    data: BytesLike
  ): Result;
}

export namespace BeneficiarySetEvent {
  export type InputTuple = [validator: AddressLike, beneficiary: AddressLike];
  export type OutputTuple = [validator: string, beneficiary: string];
  export interface OutputObject {
    validator: string;
    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 namespace DelegationAddedEvent {
  export type InputTuple = [
    validator: AddressLike,
    delegationID: BigNumberish,
    stake: BigNumberish,
    multiplier: BigNumberish
  ];
  export type OutputTuple = [
    validator: string,
    delegationID: bigint,
    stake: bigint,
    multiplier: bigint
  ];
  export interface OutputObject {
    validator: string;
    delegationID: bigint;
    stake: bigint;
    multiplier: 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 DelegationSignaledExitEvent {
  export type InputTuple = [delegationID: BigNumberish];
  export type OutputTuple = [delegationID: bigint];
  export interface OutputObject {
    delegationID: 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 DelegationWithdrawnEvent {
  export type InputTuple = [delegationID: BigNumberish, stake: BigNumberish];
  export type OutputTuple = [delegationID: bigint, stake: bigint];
  export interface OutputObject {
    delegationID: bigint;
    stake: 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 StakeDecreasedEvent {
  export type InputTuple = [validator: AddressLike, removed: BigNumberish];
  export type OutputTuple = [validator: string, removed: bigint];
  export interface OutputObject {
    validator: string;
    removed: 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 StakeIncreasedEvent {
  export type InputTuple = [validator: AddressLike, added: BigNumberish];
  export type OutputTuple = [validator: string, added: bigint];
  export interface OutputObject {
    validator: string;
    added: 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 ValidationQueuedEvent {
  export type InputTuple = [
    validator: AddressLike,
    endorser: AddressLike,
    period: BigNumberish,
    stake: BigNumberish
  ];
  export type OutputTuple = [
    validator: string,
    endorser: string,
    period: bigint,
    stake: bigint
  ];
  export interface OutputObject {
    validator: string;
    endorser: string;
    period: bigint;
    stake: 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 ValidationSignaledExitEvent {
  export type InputTuple = [validator: AddressLike];
  export type OutputTuple = [validator: string];
  export interface OutputObject {
    validator: 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 ValidationWithdrawnEvent {
  export type InputTuple = [validator: AddressLike, stake: BigNumberish];
  export type OutputTuple = [validator: string, stake: bigint];
  export interface OutputObject {
    validator: string;
    stake: 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 ProtocolStakerMock extends BaseContract {
  connect(runner?: ContractRunner | null): ProtocolStakerMock;
  waitForDeployment(): Promise<this>;

  interface: ProtocolStakerMockInterface;

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

  addDelegation: TypedContractMethod<
    [_validator: AddressLike, _multiplier: BigNumberish],
    [bigint],
    "payable"
  >;

  addValidation: TypedContractMethod<
    [_validator: AddressLike, _period: BigNumberish],
    [void],
    "payable"
  >;

  decreaseStake: TypedContractMethod<
    [_validator: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;

  delegations: TypedContractMethod<
    [arg0: BigNumberish],
    [
      [string, bigint, bigint, boolean, bigint, bigint] & {
        validator: string;
        stake: bigint;
        multiplier: bigint;
        isLocked: boolean;
        startPeriod: bigint;
        endPeriod: bigint;
      }
    ],
    "view"
  >;

  firstActive: TypedContractMethod<[], [string], "view">;

  firstQueued: TypedContractMethod<[], [string], "view">;

  getDelegation: TypedContractMethod<
    [_delegationID: BigNumberish],
    [
      [string, bigint, bigint, boolean] & {
        validator: string;
        stake: bigint;
        multiplier: bigint;
        isLocked: boolean;
      }
    ],
    "view"
  >;

  getDelegationPeriodDetails: TypedContractMethod<
    [_delegationID: BigNumberish],
    [[bigint, bigint] & { startPeriod: bigint; endPeriod: bigint }],
    "view"
  >;

  getDelegatorsRewards: TypedContractMethod<
    [_validator: AddressLike, _stakingPeriod: BigNumberish],
    [bigint],
    "view"
  >;

  getValidation: TypedContractMethod<
    [_validator: AddressLike],
    [
      [string, bigint, bigint, bigint, bigint, bigint] & {
        _endorser: string;
        _stake: bigint;
        _weight: bigint;
        _queuedStake: bigint;
        _status: bigint;
        _offlineBlock: bigint;
      }
    ],
    "view"
  >;

  getValidationPeriodDetails: TypedContractMethod<
    [_validator: AddressLike],
    [
      [bigint, bigint, bigint, bigint] & {
        period: bigint;
        startBlock: bigint;
        exitBlock: bigint;
        completedPeriods: bigint;
      }
    ],
    "view"
  >;

  getValidationTotals: TypedContractMethod<
    [_validator: AddressLike],
    [
      [bigint, bigint, bigint, bigint, bigint] & {
        lockedVET: bigint;
        lockedWeight: bigint;
        queuedVET: bigint;
        exitingVET: bigint;
        nextPeriodWeight: bigint;
      }
    ],
    "view"
  >;

  getValidationsNum: TypedContractMethod<
    [],
    [[bigint, bigint] & { activeCount: bigint; queuedCount: bigint }],
    "view"
  >;

  getWithdrawable: TypedContractMethod<[_id: AddressLike], [bigint], "view">;

  helper__setDelegationIsLocked: TypedContractMethod<
    [_delegationID: BigNumberish, _isLocked: boolean],
    [void],
    "nonpayable"
  >;

  helper__setDelegationStartPeriod: TypedContractMethod<
    [_delegationID: BigNumberish, _startPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;

  helper__setDelegationValidator: TypedContractMethod<
    [_delegationID: BigNumberish, _validator: AddressLike],
    [void],
    "nonpayable"
  >;

  helper__setStargate: TypedContractMethod<
    [_stargate: AddressLike],
    [void],
    "nonpayable"
  >;

  helper__setValidationCompletedPeriods: TypedContractMethod<
    [_validator: AddressLike, _completedPeriods: BigNumberish],
    [void],
    "nonpayable"
  >;

  helper__setValidationExitBlock: TypedContractMethod<
    [_validator: AddressLike, _exitBlock: BigNumberish],
    [void],
    "nonpayable"
  >;

  helper__setValidatorStatus: TypedContractMethod<
    [_validator: AddressLike, _validatorStatus: BigNumberish],
    [void],
    "nonpayable"
  >;

  increaseStake: TypedContractMethod<
    [_validator: AddressLike],
    [void],
    "payable"
  >;

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

  next: TypedContractMethod<[_prev: AddressLike], [string], "view">;

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

  setBeneficiary: TypedContractMethod<
    [_validator: AddressLike, _beneficiary: AddressLike],
    [void],
    "nonpayable"
  >;

  signalDelegationExit: TypedContractMethod<
    [_delegationID: BigNumberish],
    [void],
    "nonpayable"
  >;

  signalExit: TypedContractMethod<
    [_validator: AddressLike],
    [void],
    "nonpayable"
  >;

  totalStake: TypedContractMethod<
    [],
    [[bigint, bigint] & { _totalStake: bigint; _totalWeight: bigint }],
    "view"
  >;

  validations: TypedContractMethod<
    [arg0: AddressLike],
    [
      [bigint, bigint, bigint, bigint, bigint] & {
        startBlock: bigint;
        period: bigint;
        status: bigint;
        exitBlock: bigint;
        completedPeriods: bigint;
      }
    ],
    "view"
  >;

  withdrawDelegation: TypedContractMethod<
    [_delegationID: BigNumberish],
    [void],
    "nonpayable"
  >;

  withdrawStake: TypedContractMethod<
    [_validator: AddressLike],
    [void],
    "nonpayable"
  >;

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

  getFunction(
    nameOrSignature: "addDelegation"
  ): TypedContractMethod<
    [_validator: AddressLike, _multiplier: BigNumberish],
    [bigint],
    "payable"
  >;
  getFunction(
    nameOrSignature: "addValidation"
  ): TypedContractMethod<
    [_validator: AddressLike, _period: BigNumberish],
    [void],
    "payable"
  >;
  getFunction(
    nameOrSignature: "decreaseStake"
  ): TypedContractMethod<
    [_validator: AddressLike, _amount: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "delegations"
  ): TypedContractMethod<
    [arg0: BigNumberish],
    [
      [string, bigint, bigint, boolean, bigint, bigint] & {
        validator: string;
        stake: bigint;
        multiplier: bigint;
        isLocked: boolean;
        startPeriod: bigint;
        endPeriod: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "firstActive"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "firstQueued"
  ): TypedContractMethod<[], [string], "view">;
  getFunction(
    nameOrSignature: "getDelegation"
  ): TypedContractMethod<
    [_delegationID: BigNumberish],
    [
      [string, bigint, bigint, boolean] & {
        validator: string;
        stake: bigint;
        multiplier: bigint;
        isLocked: boolean;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "getDelegationPeriodDetails"
  ): TypedContractMethod<
    [_delegationID: BigNumberish],
    [[bigint, bigint] & { startPeriod: bigint; endPeriod: bigint }],
    "view"
  >;
  getFunction(
    nameOrSignature: "getDelegatorsRewards"
  ): TypedContractMethod<
    [_validator: AddressLike, _stakingPeriod: BigNumberish],
    [bigint],
    "view"
  >;
  getFunction(
    nameOrSignature: "getValidation"
  ): TypedContractMethod<
    [_validator: AddressLike],
    [
      [string, bigint, bigint, bigint, bigint, bigint] & {
        _endorser: string;
        _stake: bigint;
        _weight: bigint;
        _queuedStake: bigint;
        _status: bigint;
        _offlineBlock: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "getValidationPeriodDetails"
  ): TypedContractMethod<
    [_validator: AddressLike],
    [
      [bigint, bigint, bigint, bigint] & {
        period: bigint;
        startBlock: bigint;
        exitBlock: bigint;
        completedPeriods: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "getValidationTotals"
  ): TypedContractMethod<
    [_validator: AddressLike],
    [
      [bigint, bigint, bigint, bigint, bigint] & {
        lockedVET: bigint;
        lockedWeight: bigint;
        queuedVET: bigint;
        exitingVET: bigint;
        nextPeriodWeight: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "getValidationsNum"
  ): TypedContractMethod<
    [],
    [[bigint, bigint] & { activeCount: bigint; queuedCount: bigint }],
    "view"
  >;
  getFunction(
    nameOrSignature: "getWithdrawable"
  ): TypedContractMethod<[_id: AddressLike], [bigint], "view">;
  getFunction(
    nameOrSignature: "helper__setDelegationIsLocked"
  ): TypedContractMethod<
    [_delegationID: BigNumberish, _isLocked: boolean],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "helper__setDelegationStartPeriod"
  ): TypedContractMethod<
    [_delegationID: BigNumberish, _startPeriod: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "helper__setDelegationValidator"
  ): TypedContractMethod<
    [_delegationID: BigNumberish, _validator: AddressLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "helper__setStargate"
  ): TypedContractMethod<[_stargate: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "helper__setValidationCompletedPeriods"
  ): TypedContractMethod<
    [_validator: AddressLike, _completedPeriods: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "helper__setValidationExitBlock"
  ): TypedContractMethod<
    [_validator: AddressLike, _exitBlock: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "helper__setValidatorStatus"
  ): TypedContractMethod<
    [_validator: AddressLike, _validatorStatus: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "increaseStake"
  ): TypedContractMethod<[_validator: AddressLike], [void], "payable">;
  getFunction(
    nameOrSignature: "issuance"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "next"
  ): TypedContractMethod<[_prev: AddressLike], [string], "view">;
  getFunction(
    nameOrSignature: "queuedStake"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "setBeneficiary"
  ): TypedContractMethod<
    [_validator: AddressLike, _beneficiary: AddressLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "signalDelegationExit"
  ): TypedContractMethod<[_delegationID: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "signalExit"
  ): TypedContractMethod<[_validator: AddressLike], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "totalStake"
  ): TypedContractMethod<
    [],
    [[bigint, bigint] & { _totalStake: bigint; _totalWeight: bigint }],
    "view"
  >;
  getFunction(
    nameOrSignature: "validations"
  ): TypedContractMethod<
    [arg0: AddressLike],
    [
      [bigint, bigint, bigint, bigint, bigint] & {
        startBlock: bigint;
        period: bigint;
        status: bigint;
        exitBlock: bigint;
        completedPeriods: bigint;
      }
    ],
    "view"
  >;
  getFunction(
    nameOrSignature: "withdrawDelegation"
  ): TypedContractMethod<[_delegationID: BigNumberish], [void], "nonpayable">;
  getFunction(
    nameOrSignature: "withdrawStake"
  ): TypedContractMethod<[_validator: AddressLike], [void], "nonpayable">;

  getEvent(
    key: "BeneficiarySet"
  ): TypedContractEvent<
    BeneficiarySetEvent.InputTuple,
    BeneficiarySetEvent.OutputTuple,
    BeneficiarySetEvent.OutputObject
  >;
  getEvent(
    key: "DelegationAdded"
  ): TypedContractEvent<
    DelegationAddedEvent.InputTuple,
    DelegationAddedEvent.OutputTuple,
    DelegationAddedEvent.OutputObject
  >;
  getEvent(
    key: "DelegationSignaledExit"
  ): TypedContractEvent<
    DelegationSignaledExitEvent.InputTuple,
    DelegationSignaledExitEvent.OutputTuple,
    DelegationSignaledExitEvent.OutputObject
  >;
  getEvent(
    key: "DelegationWithdrawn"
  ): TypedContractEvent<
    DelegationWithdrawnEvent.InputTuple,
    DelegationWithdrawnEvent.OutputTuple,
    DelegationWithdrawnEvent.OutputObject
  >;
  getEvent(
    key: "StakeDecreased"
  ): TypedContractEvent<
    StakeDecreasedEvent.InputTuple,
    StakeDecreasedEvent.OutputTuple,
    StakeDecreasedEvent.OutputObject
  >;
  getEvent(
    key: "StakeIncreased"
  ): TypedContractEvent<
    StakeIncreasedEvent.InputTuple,
    StakeIncreasedEvent.OutputTuple,
    StakeIncreasedEvent.OutputObject
  >;
  getEvent(
    key: "ValidationQueued"
  ): TypedContractEvent<
    ValidationQueuedEvent.InputTuple,
    ValidationQueuedEvent.OutputTuple,
    ValidationQueuedEvent.OutputObject
  >;
  getEvent(
    key: "ValidationSignaledExit"
  ): TypedContractEvent<
    ValidationSignaledExitEvent.InputTuple,
    ValidationSignaledExitEvent.OutputTuple,
    ValidationSignaledExitEvent.OutputObject
  >;
  getEvent(
    key: "ValidationWithdrawn"
  ): TypedContractEvent<
    ValidationWithdrawnEvent.InputTuple,
    ValidationWithdrawnEvent.OutputTuple,
    ValidationWithdrawnEvent.OutputObject
  >;

  filters: {
    "BeneficiarySet(address,address)": TypedContractEvent<
      BeneficiarySetEvent.InputTuple,
      BeneficiarySetEvent.OutputTuple,
      BeneficiarySetEvent.OutputObject
    >;
    BeneficiarySet: TypedContractEvent<
      BeneficiarySetEvent.InputTuple,
      BeneficiarySetEvent.OutputTuple,
      BeneficiarySetEvent.OutputObject
    >;

    "DelegationAdded(address,uint256,uint256,uint8)": TypedContractEvent<
      DelegationAddedEvent.InputTuple,
      DelegationAddedEvent.OutputTuple,
      DelegationAddedEvent.OutputObject
    >;
    DelegationAdded: TypedContractEvent<
      DelegationAddedEvent.InputTuple,
      DelegationAddedEvent.OutputTuple,
      DelegationAddedEvent.OutputObject
    >;

    "DelegationSignaledExit(uint256)": TypedContractEvent<
      DelegationSignaledExitEvent.InputTuple,
      DelegationSignaledExitEvent.OutputTuple,
      DelegationSignaledExitEvent.OutputObject
    >;
    DelegationSignaledExit: TypedContractEvent<
      DelegationSignaledExitEvent.InputTuple,
      DelegationSignaledExitEvent.OutputTuple,
      DelegationSignaledExitEvent.OutputObject
    >;

    "DelegationWithdrawn(uint256,uint256)": TypedContractEvent<
      DelegationWithdrawnEvent.InputTuple,
      DelegationWithdrawnEvent.OutputTuple,
      DelegationWithdrawnEvent.OutputObject
    >;
    DelegationWithdrawn: TypedContractEvent<
      DelegationWithdrawnEvent.InputTuple,
      DelegationWithdrawnEvent.OutputTuple,
      DelegationWithdrawnEvent.OutputObject
    >;

    "StakeDecreased(address,uint256)": TypedContractEvent<
      StakeDecreasedEvent.InputTuple,
      StakeDecreasedEvent.OutputTuple,
      StakeDecreasedEvent.OutputObject
    >;
    StakeDecreased: TypedContractEvent<
      StakeDecreasedEvent.InputTuple,
      StakeDecreasedEvent.OutputTuple,
      StakeDecreasedEvent.OutputObject
    >;

    "StakeIncreased(address,uint256)": TypedContractEvent<
      StakeIncreasedEvent.InputTuple,
      StakeIncreasedEvent.OutputTuple,
      StakeIncreasedEvent.OutputObject
    >;
    StakeIncreased: TypedContractEvent<
      StakeIncreasedEvent.InputTuple,
      StakeIncreasedEvent.OutputTuple,
      StakeIncreasedEvent.OutputObject
    >;

    "ValidationQueued(address,address,uint32,uint256)": TypedContractEvent<
      ValidationQueuedEvent.InputTuple,
      ValidationQueuedEvent.OutputTuple,
      ValidationQueuedEvent.OutputObject
    >;
    ValidationQueued: TypedContractEvent<
      ValidationQueuedEvent.InputTuple,
      ValidationQueuedEvent.OutputTuple,
      ValidationQueuedEvent.OutputObject
    >;

    "ValidationSignaledExit(address)": TypedContractEvent<
      ValidationSignaledExitEvent.InputTuple,
      ValidationSignaledExitEvent.OutputTuple,
      ValidationSignaledExitEvent.OutputObject
    >;
    ValidationSignaledExit: TypedContractEvent<
      ValidationSignaledExitEvent.InputTuple,
      ValidationSignaledExitEvent.OutputTuple,
      ValidationSignaledExitEvent.OutputObject
    >;

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