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

import { Contract, ContractTransaction, EventFilter, Signer } from "ethers";
import { Listener, Provider } from "ethers/providers";
import { Arrayish, BigNumber, BigNumberish, Interface } from "ethers/utils";
import {
  TransactionOverrides,
  TypedEventDescription,
  TypedFunctionDescription
} from ".";

interface MockOneSplitInterface extends Interface {
  functions: {
    FLAG_AAVE: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_BANCOR: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_BDAI: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_CHAI: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_COMPOUND: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_FULCRUM: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_IEARN: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_KYBER: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_KYBER_BANCOR_RESERVE: TypedFunctionDescription<{
      encode([]: []): string;
    }>;

    FLAG_KYBER_OASIS_RESERVE: TypedFunctionDescription<{
      encode([]: []): string;
    }>;

    FLAG_KYBER_UNISWAP_RESERVE: TypedFunctionDescription<{
      encode([]: []): string;
    }>;

    FLAG_MULTI_PATH_ETH: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_OASIS: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_SMART_TOKEN: TypedFunctionDescription<{ encode([]: []): string }>;

    FLAG_UNISWAP: TypedFunctionDescription<{ encode([]: []): string }>;

    getExpectedReturn: TypedFunctionDescription<{
      encode([fromToken, toToken, amount, parts, disableFlags]: [
        string,
        string,
        BigNumberish,
        BigNumberish,
        BigNumberish
      ]): string;
    }>;

    goodSwap: TypedFunctionDescription<{
      encode([fromToken, toToken, amount, minReturn, parts, disableFlags]: [
        string,
        string,
        BigNumberish,
        BigNumberish,
        BigNumberish,
        BigNumberish
      ]): string;
    }>;

    swap: TypedFunctionDescription<{
      encode([
        fromToken,
        toToken,
        amount,
        minReturn,
        distribution,
        disableFlags
      ]: [
        string,
        string,
        BigNumberish,
        BigNumberish,
        BigNumberish[],
        BigNumberish
      ]): string;
    }>;

    tokenToBurn: TypedFunctionDescription<{ encode([]: []): string }>;
  };

  events: {};
}

export class MockOneSplit extends Contract {
  connect(signerOrProvider: Signer | Provider | string): MockOneSplit;
  attach(addressOrName: string): MockOneSplit;
  deployed(): Promise<MockOneSplit>;

  on(event: EventFilter | string, listener: Listener): MockOneSplit;
  once(event: EventFilter | string, listener: Listener): MockOneSplit;
  addListener(
    eventName: EventFilter | string,
    listener: Listener
  ): MockOneSplit;
  removeAllListeners(eventName: EventFilter | string): MockOneSplit;
  removeListener(eventName: any, listener: Listener): MockOneSplit;

  interface: MockOneSplitInterface;

  functions: {
    FLAG_AAVE(): Promise<BigNumber>;

    FLAG_BANCOR(): Promise<BigNumber>;

    FLAG_BDAI(): Promise<BigNumber>;

    FLAG_CHAI(): Promise<BigNumber>;

    FLAG_COMPOUND(): Promise<BigNumber>;

    FLAG_FULCRUM(): Promise<BigNumber>;

    FLAG_IEARN(): Promise<BigNumber>;

    FLAG_KYBER(): Promise<BigNumber>;

    FLAG_KYBER_BANCOR_RESERVE(): Promise<BigNumber>;

    FLAG_KYBER_OASIS_RESERVE(): Promise<BigNumber>;

    FLAG_KYBER_UNISWAP_RESERVE(): Promise<BigNumber>;

    FLAG_MULTI_PATH_ETH(): Promise<BigNumber>;

    FLAG_OASIS(): Promise<BigNumber>;

    FLAG_SMART_TOKEN(): Promise<BigNumber>;

    FLAG_UNISWAP(): Promise<BigNumber>;

    getExpectedReturn(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      parts: BigNumberish,
      disableFlags: BigNumberish
    ): Promise<{
      returnAmount: BigNumber;
      distribution: BigNumber[];
      0: BigNumber;
      1: BigNumber[];
    }>;

    goodSwap(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      minReturn: BigNumberish,
      parts: BigNumberish,
      disableFlags: BigNumberish,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    swap(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      minReturn: BigNumberish,
      distribution: BigNumberish[],
      disableFlags: BigNumberish,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToBurn(): Promise<string>;
  };

  FLAG_AAVE(): Promise<BigNumber>;

  FLAG_BANCOR(): Promise<BigNumber>;

  FLAG_BDAI(): Promise<BigNumber>;

  FLAG_CHAI(): Promise<BigNumber>;

  FLAG_COMPOUND(): Promise<BigNumber>;

  FLAG_FULCRUM(): Promise<BigNumber>;

  FLAG_IEARN(): Promise<BigNumber>;

  FLAG_KYBER(): Promise<BigNumber>;

  FLAG_KYBER_BANCOR_RESERVE(): Promise<BigNumber>;

  FLAG_KYBER_OASIS_RESERVE(): Promise<BigNumber>;

  FLAG_KYBER_UNISWAP_RESERVE(): Promise<BigNumber>;

  FLAG_MULTI_PATH_ETH(): Promise<BigNumber>;

  FLAG_OASIS(): Promise<BigNumber>;

  FLAG_SMART_TOKEN(): Promise<BigNumber>;

  FLAG_UNISWAP(): Promise<BigNumber>;

  getExpectedReturn(
    fromToken: string,
    toToken: string,
    amount: BigNumberish,
    parts: BigNumberish,
    disableFlags: BigNumberish
  ): Promise<{
    returnAmount: BigNumber;
    distribution: BigNumber[];
    0: BigNumber;
    1: BigNumber[];
  }>;

  goodSwap(
    fromToken: string,
    toToken: string,
    amount: BigNumberish,
    minReturn: BigNumberish,
    parts: BigNumberish,
    disableFlags: BigNumberish,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  swap(
    fromToken: string,
    toToken: string,
    amount: BigNumberish,
    minReturn: BigNumberish,
    distribution: BigNumberish[],
    disableFlags: BigNumberish,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  tokenToBurn(): Promise<string>;

  filters: {};

  estimate: {
    FLAG_AAVE(): Promise<BigNumber>;

    FLAG_BANCOR(): Promise<BigNumber>;

    FLAG_BDAI(): Promise<BigNumber>;

    FLAG_CHAI(): Promise<BigNumber>;

    FLAG_COMPOUND(): Promise<BigNumber>;

    FLAG_FULCRUM(): Promise<BigNumber>;

    FLAG_IEARN(): Promise<BigNumber>;

    FLAG_KYBER(): Promise<BigNumber>;

    FLAG_KYBER_BANCOR_RESERVE(): Promise<BigNumber>;

    FLAG_KYBER_OASIS_RESERVE(): Promise<BigNumber>;

    FLAG_KYBER_UNISWAP_RESERVE(): Promise<BigNumber>;

    FLAG_MULTI_PATH_ETH(): Promise<BigNumber>;

    FLAG_OASIS(): Promise<BigNumber>;

    FLAG_SMART_TOKEN(): Promise<BigNumber>;

    FLAG_UNISWAP(): Promise<BigNumber>;

    getExpectedReturn(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      parts: BigNumberish,
      disableFlags: BigNumberish
    ): Promise<BigNumber>;

    goodSwap(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      minReturn: BigNumberish,
      parts: BigNumberish,
      disableFlags: BigNumberish
    ): Promise<BigNumber>;

    swap(
      fromToken: string,
      toToken: string,
      amount: BigNumberish,
      minReturn: BigNumberish,
      distribution: BigNumberish[],
      disableFlags: BigNumberish
    ): Promise<BigNumber>;

    tokenToBurn(): Promise<BigNumber>;
  };
}