/* Generated by ts-generator ver. 0.0.8 */
/* tslint:disable */

import BN from "bn.js";
import { Contract, ContractOptions, EventOptions } from "web3-eth-contract";
import { EventLog } from "web3-core";
import { EventEmitter } from "events";
import { Callback, ContractEvent, TransactionObject } from "./types";

export class Invoker extends Contract {
  constructor(
    jsonInterface: any[],
    address?: string,
    options?: ContractOptions
  );
  clone(): Invoker;
  methods: {
    owner(): TransactionObject<string>;

    renounceOwnership(): TransactionObject<void>;

    transferOwnership(newOwner: string): TransactionObject<void>;

    invoke(
      invokeTo: string,
      invokeData: string | number[],
      tokenAddress: string,
      tokenAmount: number | string
    ): TransactionObject<void>;

    invokeCallback(): TransactionObject<void>;

    currentSender(): TransactionObject<string>;

    currentTokenAddress(): TransactionObject<string>;

    currentTokenAmount(): TransactionObject<BN>;

    currentRepaymentAmount(): TransactionObject<BN>;

    estimateRepaymentAmount(
      tokenAddress: string,
      tokenAmount: number | string
    ): TransactionObject<BN>;

    poolReward(): TransactionObject<BN>;

    poolRewardAddress(tokenAddress: string): TransactionObject<string>;

    platformReward(): TransactionObject<BN>;

    platformVaultAddress(): TransactionObject<string>;

    setPoolReward(poolRewardBips: number | string): TransactionObject<void>;

    setPoolRewardAddress(
      tokenAddress: string,
      newPoolRewardAddress: string
    ): TransactionObject<void>;

    setPlatformReward(
      platformRewardBips: number | string
    ): TransactionObject<void>;

    setPlatformVaultAddress(
      newPlatformVaultAddress: string
    ): TransactionObject<void>;

    setLiquidityProxies(
      tokenAddress: string,
      liquidityProxies: string[]
    ): TransactionObject<void>;

    liquidityProxies(tokenAddress: string): TransactionObject<string[]>;

    isTokenAddressRegistered(tokenAddress: string): TransactionObject<boolean>;

    totalLiquidity(tokenAddress: string): TransactionObject<BN>;

    removeStuckTokens(
      tokenAddress: string,
      amount: number | string
    ): TransactionObject<boolean>;
  };
  events: {
    Invocation: ContractEvent<{
      invokeTo: string;
      invokeValue: BN;
      invokeDataHash: string;
      underlyingAmount: BN;
      0: string;
      1: BN;
      2: string;
      3: BN;
    }>;
    OwnershipTransferred: ContractEvent<{
      previousOwner: string;
      newOwner: string;
      0: string;
      1: string;
    }>;
    Reward: ContractEvent<{
      poolReward: BN;
      platformReward: BN;
      tokenAddress: string;
      0: BN;
      1: BN;
      2: string;
    }>;
    allEvents: (
      options?: EventOptions,
      cb?: Callback<EventLog>
    ) => EventEmitter;
  };
}
