/* 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 IDataServiceFeesInterface extends Interface {
  getFunction(
    nameOrSignature:
      | "acceptProvisionPendingParameters"
      | "collect"
      | "getDelegationRatio"
      | "getProvisionTokensRange"
      | "getThawingPeriodRange"
      | "getVerifierCutRange"
      | "register"
      | "releaseStake"
      | "slash"
      | "startService"
      | "stopService"
  ): FunctionFragment;

  getEvent(
    nameOrSignatureOrTopic:
      | "ProvisionPendingParametersAccepted"
      | "ServicePaymentCollected"
      | "ServiceProviderRegistered"
      | "ServiceProviderSlashed"
      | "ServiceStarted"
      | "ServiceStopped"
      | "StakeClaimLocked"
      | "StakeClaimReleased"
      | "StakeClaimsReleased"
  ): EventFragment;

  encodeFunctionData(
    functionFragment: "acceptProvisionPendingParameters",
    values: [AddressLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "collect",
    values: [AddressLike, BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "getDelegationRatio",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getProvisionTokensRange",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getThawingPeriodRange",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getVerifierCutRange",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "register",
    values: [AddressLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "releaseStake",
    values: [BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "slash",
    values: [AddressLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "startService",
    values: [AddressLike, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "stopService",
    values: [AddressLike, BytesLike]
  ): string;

  decodeFunctionResult(
    functionFragment: "acceptProvisionPendingParameters",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "collect", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "getDelegationRatio",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getProvisionTokensRange",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getThawingPeriodRange",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getVerifierCutRange",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "register", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "releaseStake",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "slash", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "startService",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "stopService",
    data: BytesLike
  ): Result;
}

export namespace ProvisionPendingParametersAcceptedEvent {
  export type InputTuple = [serviceProvider: AddressLike];
  export type OutputTuple = [serviceProvider: string];
  export interface OutputObject {
    serviceProvider: 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 ServicePaymentCollectedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    feeType: BigNumberish,
    tokens: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    feeType: bigint,
    tokens: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    feeType: bigint;
    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 ServiceProviderRegisteredEvent {
  export type InputTuple = [serviceProvider: AddressLike, data: BytesLike];
  export type OutputTuple = [serviceProvider: string, data: string];
  export interface OutputObject {
    serviceProvider: string;
    data: 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 ServiceProviderSlashedEvent {
  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 ServiceStartedEvent {
  export type InputTuple = [serviceProvider: AddressLike, data: BytesLike];
  export type OutputTuple = [serviceProvider: string, data: string];
  export interface OutputObject {
    serviceProvider: string;
    data: 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 ServiceStoppedEvent {
  export type InputTuple = [serviceProvider: AddressLike, data: BytesLike];
  export type OutputTuple = [serviceProvider: string, data: string];
  export interface OutputObject {
    serviceProvider: string;
    data: 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 StakeClaimLockedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    claimId: BytesLike,
    tokens: BigNumberish,
    unlockTimestamp: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    claimId: string,
    tokens: bigint,
    unlockTimestamp: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    claimId: string;
    tokens: bigint;
    unlockTimestamp: 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 StakeClaimReleasedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    claimId: BytesLike,
    tokens: BigNumberish,
    releasableAt: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    claimId: string,
    tokens: bigint,
    releasableAt: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    claimId: string;
    tokens: bigint;
    releasableAt: 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 StakeClaimsReleasedEvent {
  export type InputTuple = [
    serviceProvider: AddressLike,
    claimsCount: BigNumberish,
    tokensReleased: BigNumberish
  ];
  export type OutputTuple = [
    serviceProvider: string,
    claimsCount: bigint,
    tokensReleased: bigint
  ];
  export interface OutputObject {
    serviceProvider: string;
    claimsCount: bigint;
    tokensReleased: 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 IDataServiceFees extends BaseContract {
  connect(runner?: ContractRunner | null): IDataServiceFees;
  waitForDeployment(): Promise<this>;

  interface: IDataServiceFeesInterface;

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

  acceptProvisionPendingParameters: TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

  collect: TypedContractMethod<
    [serviceProvider: AddressLike, feeType: BigNumberish, data: BytesLike],
    [bigint],
    "nonpayable"
  >;

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

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

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

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

  register: TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

  releaseStake: TypedContractMethod<
    [numClaimsToRelease: BigNumberish],
    [void],
    "nonpayable"
  >;

  slash: TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

  startService: TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

  stopService: TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

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

  getFunction(
    nameOrSignature: "acceptProvisionPendingParameters"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "collect"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, feeType: BigNumberish, data: BytesLike],
    [bigint],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "getDelegationRatio"
  ): TypedContractMethod<[], [bigint], "view">;
  getFunction(
    nameOrSignature: "getProvisionTokensRange"
  ): TypedContractMethod<[], [[bigint, bigint]], "view">;
  getFunction(
    nameOrSignature: "getThawingPeriodRange"
  ): TypedContractMethod<[], [[bigint, bigint]], "view">;
  getFunction(
    nameOrSignature: "getVerifierCutRange"
  ): TypedContractMethod<[], [[bigint, bigint]], "view">;
  getFunction(
    nameOrSignature: "register"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "releaseStake"
  ): TypedContractMethod<
    [numClaimsToRelease: BigNumberish],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "slash"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "startService"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;
  getFunction(
    nameOrSignature: "stopService"
  ): TypedContractMethod<
    [serviceProvider: AddressLike, data: BytesLike],
    [void],
    "nonpayable"
  >;

  getEvent(
    key: "ProvisionPendingParametersAccepted"
  ): TypedContractEvent<
    ProvisionPendingParametersAcceptedEvent.InputTuple,
    ProvisionPendingParametersAcceptedEvent.OutputTuple,
    ProvisionPendingParametersAcceptedEvent.OutputObject
  >;
  getEvent(
    key: "ServicePaymentCollected"
  ): TypedContractEvent<
    ServicePaymentCollectedEvent.InputTuple,
    ServicePaymentCollectedEvent.OutputTuple,
    ServicePaymentCollectedEvent.OutputObject
  >;
  getEvent(
    key: "ServiceProviderRegistered"
  ): TypedContractEvent<
    ServiceProviderRegisteredEvent.InputTuple,
    ServiceProviderRegisteredEvent.OutputTuple,
    ServiceProviderRegisteredEvent.OutputObject
  >;
  getEvent(
    key: "ServiceProviderSlashed"
  ): TypedContractEvent<
    ServiceProviderSlashedEvent.InputTuple,
    ServiceProviderSlashedEvent.OutputTuple,
    ServiceProviderSlashedEvent.OutputObject
  >;
  getEvent(
    key: "ServiceStarted"
  ): TypedContractEvent<
    ServiceStartedEvent.InputTuple,
    ServiceStartedEvent.OutputTuple,
    ServiceStartedEvent.OutputObject
  >;
  getEvent(
    key: "ServiceStopped"
  ): TypedContractEvent<
    ServiceStoppedEvent.InputTuple,
    ServiceStoppedEvent.OutputTuple,
    ServiceStoppedEvent.OutputObject
  >;
  getEvent(
    key: "StakeClaimLocked"
  ): TypedContractEvent<
    StakeClaimLockedEvent.InputTuple,
    StakeClaimLockedEvent.OutputTuple,
    StakeClaimLockedEvent.OutputObject
  >;
  getEvent(
    key: "StakeClaimReleased"
  ): TypedContractEvent<
    StakeClaimReleasedEvent.InputTuple,
    StakeClaimReleasedEvent.OutputTuple,
    StakeClaimReleasedEvent.OutputObject
  >;
  getEvent(
    key: "StakeClaimsReleased"
  ): TypedContractEvent<
    StakeClaimsReleasedEvent.InputTuple,
    StakeClaimsReleasedEvent.OutputTuple,
    StakeClaimsReleasedEvent.OutputObject
  >;

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

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

    "ServiceProviderRegistered(address,bytes)": TypedContractEvent<
      ServiceProviderRegisteredEvent.InputTuple,
      ServiceProviderRegisteredEvent.OutputTuple,
      ServiceProviderRegisteredEvent.OutputObject
    >;
    ServiceProviderRegistered: TypedContractEvent<
      ServiceProviderRegisteredEvent.InputTuple,
      ServiceProviderRegisteredEvent.OutputTuple,
      ServiceProviderRegisteredEvent.OutputObject
    >;

    "ServiceProviderSlashed(address,uint256)": TypedContractEvent<
      ServiceProviderSlashedEvent.InputTuple,
      ServiceProviderSlashedEvent.OutputTuple,
      ServiceProviderSlashedEvent.OutputObject
    >;
    ServiceProviderSlashed: TypedContractEvent<
      ServiceProviderSlashedEvent.InputTuple,
      ServiceProviderSlashedEvent.OutputTuple,
      ServiceProviderSlashedEvent.OutputObject
    >;

    "ServiceStarted(address,bytes)": TypedContractEvent<
      ServiceStartedEvent.InputTuple,
      ServiceStartedEvent.OutputTuple,
      ServiceStartedEvent.OutputObject
    >;
    ServiceStarted: TypedContractEvent<
      ServiceStartedEvent.InputTuple,
      ServiceStartedEvent.OutputTuple,
      ServiceStartedEvent.OutputObject
    >;

    "ServiceStopped(address,bytes)": TypedContractEvent<
      ServiceStoppedEvent.InputTuple,
      ServiceStoppedEvent.OutputTuple,
      ServiceStoppedEvent.OutputObject
    >;
    ServiceStopped: TypedContractEvent<
      ServiceStoppedEvent.InputTuple,
      ServiceStoppedEvent.OutputTuple,
      ServiceStoppedEvent.OutputObject
    >;

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

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

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