/* 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 PriceOracleInterface extends Interface {
  functions: {
    getAssetPrice: TypedFunctionDescription<{
      encode([_asset]: [string]): string;
    }>;

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

    setAssetPrice: TypedFunctionDescription<{
      encode([_asset, _price]: [string, BigNumberish]): string;
    }>;

    setEthUsdPrice: TypedFunctionDescription<{
      encode([_price]: [BigNumberish]): string;
    }>;
  };

  events: {
    AssetPriceUpdated: TypedEventDescription<{
      encodeTopics([_asset, _price, timestamp]: [null, null, null]): string[];
    }>;

    EthPriceUpdated: TypedEventDescription<{
      encodeTopics([_price, timestamp]: [null, null]): string[];
    }>;
  };
}

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

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

  interface: PriceOracleInterface;

  functions: {
    getAssetPrice(_asset: string): Promise<BigNumber>;

    getEthUsdPrice(): Promise<BigNumber>;

    setAssetPrice(
      _asset: string,
      _price: BigNumberish,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    setEthUsdPrice(
      _price: BigNumberish,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;
  };

  getAssetPrice(_asset: string): Promise<BigNumber>;

  getEthUsdPrice(): Promise<BigNumber>;

  setAssetPrice(
    _asset: string,
    _price: BigNumberish,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  setEthUsdPrice(
    _price: BigNumberish,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  filters: {
    AssetPriceUpdated(_asset: null, _price: null, timestamp: null): EventFilter;

    EthPriceUpdated(_price: null, timestamp: null): EventFilter;
  };

  estimate: {
    getAssetPrice(_asset: string): Promise<BigNumber>;

    getEthUsdPrice(): Promise<BigNumber>;

    setAssetPrice(_asset: string, _price: BigNumberish): Promise<BigNumber>;

    setEthUsdPrice(_price: BigNumberish): Promise<BigNumber>;
  };
}