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

import { Contract, ContractTransaction, EventFilter } from "ethers";
import { Provider } from "ethers/providers";
import { BigNumber } from "ethers/utils";
import { TransactionOverrides } from ".";

export class IUniswapExchange extends Contract {
  functions: {
    getInputPrice(
      input_amount: number | string | BigNumber,
      input_reserve: number | string | BigNumber,
      output_reserve: number | string | BigNumber
    ): Promise<BigNumber>;

    getOutputPrice(
      output_amount: number | string | BigNumber,
      input_reserve: number | string | BigNumber,
      output_reserve: number | string | BigNumber
    ): Promise<BigNumber>;

    getEthToTokenInputPrice(
      eth_sold: number | string | BigNumber
    ): Promise<BigNumber>;

    getEthToTokenOutputPrice(
      tokens_bought: number | string | BigNumber
    ): Promise<BigNumber>;

    getTokenToEthInputPrice(
      tokens_sold: number | string | BigNumber
    ): Promise<BigNumber>;

    getTokenToEthOutputPrice(
      eth_bought: number | string | BigNumber
    ): Promise<BigNumber>;

    ethToTokenSwapInput(
      min_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    ethToTokenTransferInput(
      min_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    ethToTokenSwapOutput(
      tokens_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    ethToTokenTransferOutput(
      tokens_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToEthSwapInput(
      tokens_sold: number | string | BigNumber,
      min_eth: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToEthTransferInput(
      tokens_sold: number | string | BigNumber,
      min_eth: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToEthSwapOutput(
      eth_bought: number | string | BigNumber,
      max_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToEthTransferOutput(
      eth_bought: number | string | BigNumber,
      max_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToTokenSwapInput(
      tokens_sold: number | string | BigNumber,
      min_tokens_bought: number | string | BigNumber,
      min_eth_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      token_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToTokenTransferInput(
      tokens_sold: number | string | BigNumber,
      min_tokens_bought: number | string | BigNumber,
      min_eth_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      token_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToTokenSwapOutput(
      tokens_bought: number | string | BigNumber,
      max_tokens_sold: number | string | BigNumber,
      max_eth_sold: number | string | BigNumber,
      deadline: number | string | BigNumber,
      token_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToTokenTransferOutput(
      tokens_bought: number | string | BigNumber,
      max_tokens_sold: number | string | BigNumber,
      max_eth_sold: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      token_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToExchangeSwapInput(
      tokens_sold: number | string | BigNumber,
      min_tokens_bought: number | string | BigNumber,
      min_eth_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      exchange_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToExchangeTransferInput(
      tokens_sold: number | string | BigNumber,
      min_tokens_bought: number | string | BigNumber,
      min_eth_bought: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      exchange_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToExchangeSwapOutput(
      tokens_bought: number | string | BigNumber,
      max_tokens_sold: number | string | BigNumber,
      max_eth_sold: number | string | BigNumber,
      deadline: number | string | BigNumber,
      exchange_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenToExchangeTransferOutput(
      tokens_bought: number | string | BigNumber,
      max_tokens_sold: number | string | BigNumber,
      max_eth_sold: number | string | BigNumber,
      deadline: number | string | BigNumber,
      recipient: string,
      exchange_addr: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    addLiquidity(
      min_liquidity: number | string | BigNumber,
      max_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    removeLiquidity(
      amount: number | string | BigNumber,
      min_eth: number | string | BigNumber,
      min_tokens: number | string | BigNumber,
      deadline: number | string | BigNumber,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    tokenAddress(): Promise<string>;
    factoryAddress(): Promise<string>;
  };
  filters: {
    TokenPurchase(
      buyer: string | null,
      eth_sold: number | string | BigNumber | null,
      tokens_bought: number | string | BigNumber | null
    ): EventFilter;

    EthPurchase(
      buyer: string | null,
      tokens_sold: number | string | BigNumber | null,
      eth_bought: number | string | BigNumber | null
    ): EventFilter;

    AddLiquidity(
      provider: string | null,
      eth_amount: number | string | BigNumber | null,
      token_amount: number | string | BigNumber | null
    ): EventFilter;

    RemoveLiquidity(
      provider: string | null,
      eth_amount: number | string | BigNumber | null,
      token_amount: number | string | BigNumber | null
    ): EventFilter;
  };
}
