/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import BN from "bn.js";
import { ContractOptions } from "web3-eth-contract";
import { EventLog } from "web3-core";
import { EventEmitter } from "events";
import {
  Callback,
  PayableTransactionObject,
  NonPayableTransactionObject,
  BlockType,
  ContractEventLog,
  BaseContract,
} from "./types";

interface EventOptions {
  filter?: object;
  fromBlock?: BlockType;
  topics?: string[];
}

export type Deposited = ContractEventLog<{
  paymaster: string;
  from: string;
  amount: string;
  0: string;
  1: string;
  2: string;
}>;
export type HubDeprecated = ContractEventLog<{
  fromBlock: string;
  0: string;
}>;
export type RelayHubConfigured = ContractEventLog<{
  config: [
    string,
    string,
    string,
    string,
    string,
    string,
    string,
    string,
    string
  ];
  0: [string, string, string, string, string, string, string, string, string];
}>;
export type RelayServerRegistered = ContractEventLog<{
  relayManager: string;
  baseRelayFee: string;
  pctRelayFee: string;
  relayUrl: string;
  0: string;
  1: string;
  2: string;
  3: string;
}>;
export type RelayWorkersAdded = ContractEventLog<{
  relayManager: string;
  newRelayWorkers: string[];
  workersCount: string;
  0: string;
  1: string[];
  2: string;
}>;
export type TransactionRejectedByPaymaster = ContractEventLog<{
  relayManager: string;
  paymaster: string;
  from: string;
  to: string;
  relayWorker: string;
  selector: string;
  innerGasUsed: string;
  reason: string;
  0: string;
  1: string;
  2: string;
  3: string;
  4: string;
  5: string;
  6: string;
  7: string;
}>;
export type TransactionRelayed = ContractEventLog<{
  relayManager: string;
  relayWorker: string;
  from: string;
  to: string;
  paymaster: string;
  selector: string;
  status: string;
  charge: string;
  0: string;
  1: string;
  2: string;
  3: string;
  4: string;
  5: string;
  6: string;
  7: string;
}>;
export type TransactionResult = ContractEventLog<{
  status: string;
  returnValue: string;
  0: string;
  1: string;
}>;
export type Withdrawn = ContractEventLog<{
  account: string;
  dest: string;
  amount: string;
  0: string;
  1: string;
  2: string;
}>;

export interface IRelayHub extends BaseContract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  ): IRelayHub;
  clone(): IRelayHub;
  methods: {
    addRelayWorkers(
      newRelayWorkers: string[]
    ): NonPayableTransactionObject<void>;

    registerRelayServer(
      baseRelayFee: number | string | BN,
      pctRelayFee: number | string | BN,
      url: string
    ): NonPayableTransactionObject<void>;

    depositFor(target: string): PayableTransactionObject<void>;

    withdraw(
      amount: number | string | BN,
      dest: string
    ): NonPayableTransactionObject<void>;

    relayCall(
      maxAcceptanceBudget: number | string | BN,
      relayRequest: [
        [
          string,
          string,
          number | string | BN,
          number | string | BN,
          number | string | BN,
          string | number[],
          number | string | BN
        ],
        [
          number | string | BN,
          number | string | BN,
          number | string | BN,
          string,
          string,
          string,
          string | number[],
          number | string | BN
        ]
      ],
      signature: string | number[],
      approvalData: string | number[],
      externalGasLimit: number | string | BN
    ): NonPayableTransactionObject<{
      paymasterAccepted: boolean;
      returnValue: string;
      0: boolean;
      1: string;
    }>;

    penalize(
      relayWorker: string,
      beneficiary: string
    ): NonPayableTransactionObject<void>;

    setConfiguration(
      _config: [
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN,
        number | string | BN
      ]
    ): NonPayableTransactionObject<void>;

    deprecateHub(
      fromBlock: number | string | BN
    ): NonPayableTransactionObject<void>;

    calculateCharge(
      gasUsed: number | string | BN,
      relayData: [
        number | string | BN,
        number | string | BN,
        number | string | BN,
        string,
        string,
        string,
        string | number[],
        number | string | BN
      ]
    ): NonPayableTransactionObject<string>;

    getConfiguration(): NonPayableTransactionObject<
      [string, string, string, string, string, string, string, string, string]
    >;

    calldataGasCost(
      length: number | string | BN
    ): NonPayableTransactionObject<string>;

    workerToManager(worker: string): NonPayableTransactionObject<string>;

    workerCount(manager: string): NonPayableTransactionObject<string>;

    balanceOf(target: string): NonPayableTransactionObject<string>;

    stakeManager(): NonPayableTransactionObject<string>;

    penalizer(): NonPayableTransactionObject<string>;

    isRelayManagerStaked(
      relayManager: string
    ): NonPayableTransactionObject<boolean>;

    isDeprecated(): NonPayableTransactionObject<boolean>;

    deprecationBlock(): NonPayableTransactionObject<string>;

    versionHub(): NonPayableTransactionObject<string>;
  };
  events: {
    Deposited(cb?: Callback<Deposited>): EventEmitter;
    Deposited(options?: EventOptions, cb?: Callback<Deposited>): EventEmitter;

    HubDeprecated(cb?: Callback<HubDeprecated>): EventEmitter;
    HubDeprecated(
      options?: EventOptions,
      cb?: Callback<HubDeprecated>
    ): EventEmitter;

    RelayHubConfigured(cb?: Callback<RelayHubConfigured>): EventEmitter;
    RelayHubConfigured(
      options?: EventOptions,
      cb?: Callback<RelayHubConfigured>
    ): EventEmitter;

    RelayServerRegistered(cb?: Callback<RelayServerRegistered>): EventEmitter;
    RelayServerRegistered(
      options?: EventOptions,
      cb?: Callback<RelayServerRegistered>
    ): EventEmitter;

    RelayWorkersAdded(cb?: Callback<RelayWorkersAdded>): EventEmitter;
    RelayWorkersAdded(
      options?: EventOptions,
      cb?: Callback<RelayWorkersAdded>
    ): EventEmitter;

    TransactionRejectedByPaymaster(
      cb?: Callback<TransactionRejectedByPaymaster>
    ): EventEmitter;
    TransactionRejectedByPaymaster(
      options?: EventOptions,
      cb?: Callback<TransactionRejectedByPaymaster>
    ): EventEmitter;

    TransactionRelayed(cb?: Callback<TransactionRelayed>): EventEmitter;
    TransactionRelayed(
      options?: EventOptions,
      cb?: Callback<TransactionRelayed>
    ): EventEmitter;

    TransactionResult(cb?: Callback<TransactionResult>): EventEmitter;
    TransactionResult(
      options?: EventOptions,
      cb?: Callback<TransactionResult>
    ): EventEmitter;

    Withdrawn(cb?: Callback<Withdrawn>): EventEmitter;
    Withdrawn(options?: EventOptions, cb?: Callback<Withdrawn>): EventEmitter;

    allEvents(options?: EventOptions, cb?: Callback<EventLog>): EventEmitter;
  };

  once(event: "Deposited", cb: Callback<Deposited>): void;
  once(
    event: "Deposited",
    options: EventOptions,
    cb: Callback<Deposited>
  ): void;

  once(event: "HubDeprecated", cb: Callback<HubDeprecated>): void;
  once(
    event: "HubDeprecated",
    options: EventOptions,
    cb: Callback<HubDeprecated>
  ): void;

  once(event: "RelayHubConfigured", cb: Callback<RelayHubConfigured>): void;
  once(
    event: "RelayHubConfigured",
    options: EventOptions,
    cb: Callback<RelayHubConfigured>
  ): void;

  once(
    event: "RelayServerRegistered",
    cb: Callback<RelayServerRegistered>
  ): void;
  once(
    event: "RelayServerRegistered",
    options: EventOptions,
    cb: Callback<RelayServerRegistered>
  ): void;

  once(event: "RelayWorkersAdded", cb: Callback<RelayWorkersAdded>): void;
  once(
    event: "RelayWorkersAdded",
    options: EventOptions,
    cb: Callback<RelayWorkersAdded>
  ): void;

  once(
    event: "TransactionRejectedByPaymaster",
    cb: Callback<TransactionRejectedByPaymaster>
  ): void;
  once(
    event: "TransactionRejectedByPaymaster",
    options: EventOptions,
    cb: Callback<TransactionRejectedByPaymaster>
  ): void;

  once(event: "TransactionRelayed", cb: Callback<TransactionRelayed>): void;
  once(
    event: "TransactionRelayed",
    options: EventOptions,
    cb: Callback<TransactionRelayed>
  ): void;

  once(event: "TransactionResult", cb: Callback<TransactionResult>): void;
  once(
    event: "TransactionResult",
    options: EventOptions,
    cb: Callback<TransactionResult>
  ): void;

  once(event: "Withdrawn", cb: Callback<Withdrawn>): void;
  once(
    event: "Withdrawn",
    options: EventOptions,
    cb: Callback<Withdrawn>
  ): void;
}
