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

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

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

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

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

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

    getAnswer: TypedFunctionDescription<{
      encode([_roundId]: [BigNumberish]): string;
    }>;

    getRoundData: TypedFunctionDescription<{
      encode([_roundId]: [BigNumberish]): string;
    }>;

    getTimestamp: TypedFunctionDescription<{
      encode([_roundId]: [BigNumberish]): string;
    }>;

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

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

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

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

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

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

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

    proposedGetRoundData: TypedFunctionDescription<{
      encode([_roundId]: [BigNumberish]): string;
    }>;

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

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

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

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

  events: {
    AnswerUpdated: TypedEventDescription<{
      encodeTopics([current, roundId, timestamp]: [
        BigNumberish | null,
        BigNumberish | null,
        null
      ]): string[];
    }>;

    NewRound: TypedEventDescription<{
      encodeTopics([roundId, startedBy, startedAt]: [
        BigNumberish | null,
        string | null,
        null
      ]): string[];
    }>;

    OwnershipTransferRequested: TypedEventDescription<{
      encodeTopics([from, to]: [string | null, string | null]): string[];
    }>;

    OwnershipTransferred: TypedEventDescription<{
      encodeTopics([from, to]: [string | null, string | null]): string[];
    }>;
  };
}

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

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

  interface: EACAggregatorProxyInterface;

  functions: {
    acceptOwnership(
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    accessController(): Promise<string>;

    aggregator(): Promise<string>;

    confirmAggregator(
      _aggregator: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    decimals(): Promise<number>;

    description(): Promise<string>;

    getAnswer(_roundId: BigNumberish): Promise<BigNumber>;

    getRoundData(
      _roundId: BigNumberish
    ): Promise<{
      roundId: BigNumber;
      answer: BigNumber;
      startedAt: BigNumber;
      updatedAt: BigNumber;
      answeredInRound: BigNumber;
      0: BigNumber;
      1: BigNumber;
      2: BigNumber;
      3: BigNumber;
      4: BigNumber;
    }>;

    getTimestamp(_roundId: BigNumberish): Promise<BigNumber>;

    latestAnswer(): Promise<BigNumber>;

    latestRound(): Promise<BigNumber>;

    latestRoundData(): Promise<{
      roundId: BigNumber;
      answer: BigNumber;
      startedAt: BigNumber;
      updatedAt: BigNumber;
      answeredInRound: BigNumber;
      0: BigNumber;
      1: BigNumber;
      2: BigNumber;
      3: BigNumber;
      4: BigNumber;
    }>;

    latestTimestamp(): Promise<BigNumber>;

    owner(): Promise<string>;

    proposeAggregator(
      _aggregator: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    proposedAggregator(): Promise<string>;

    proposedGetRoundData(
      _roundId: BigNumberish
    ): Promise<{
      roundId: BigNumber;
      answer: BigNumber;
      startedAt: BigNumber;
      updatedAt: BigNumber;
      answeredInRound: BigNumber;
      0: BigNumber;
      1: BigNumber;
      2: BigNumber;
      3: BigNumber;
      4: BigNumber;
    }>;

    proposedLatestRoundData(): Promise<{
      roundId: BigNumber;
      answer: BigNumber;
      startedAt: BigNumber;
      updatedAt: BigNumber;
      answeredInRound: BigNumber;
      0: BigNumber;
      1: BigNumber;
      2: BigNumber;
      3: BigNumber;
      4: BigNumber;
    }>;

    setController(
      _accessController: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    transferOwnership(
      _to: string,
      overrides?: TransactionOverrides
    ): Promise<ContractTransaction>;

    version(): Promise<BigNumber>;
  };

  acceptOwnership(
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  accessController(): Promise<string>;

  aggregator(): Promise<string>;

  confirmAggregator(
    _aggregator: string,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  decimals(): Promise<number>;

  description(): Promise<string>;

  getAnswer(_roundId: BigNumberish): Promise<BigNumber>;

  getRoundData(
    _roundId: BigNumberish
  ): Promise<{
    roundId: BigNumber;
    answer: BigNumber;
    startedAt: BigNumber;
    updatedAt: BigNumber;
    answeredInRound: BigNumber;
    0: BigNumber;
    1: BigNumber;
    2: BigNumber;
    3: BigNumber;
    4: BigNumber;
  }>;

  getTimestamp(_roundId: BigNumberish): Promise<BigNumber>;

  latestAnswer(): Promise<BigNumber>;

  latestRound(): Promise<BigNumber>;

  latestRoundData(): Promise<{
    roundId: BigNumber;
    answer: BigNumber;
    startedAt: BigNumber;
    updatedAt: BigNumber;
    answeredInRound: BigNumber;
    0: BigNumber;
    1: BigNumber;
    2: BigNumber;
    3: BigNumber;
    4: BigNumber;
  }>;

  latestTimestamp(): Promise<BigNumber>;

  owner(): Promise<string>;

  proposeAggregator(
    _aggregator: string,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  proposedAggregator(): Promise<string>;

  proposedGetRoundData(
    _roundId: BigNumberish
  ): Promise<{
    roundId: BigNumber;
    answer: BigNumber;
    startedAt: BigNumber;
    updatedAt: BigNumber;
    answeredInRound: BigNumber;
    0: BigNumber;
    1: BigNumber;
    2: BigNumber;
    3: BigNumber;
    4: BigNumber;
  }>;

  proposedLatestRoundData(): Promise<{
    roundId: BigNumber;
    answer: BigNumber;
    startedAt: BigNumber;
    updatedAt: BigNumber;
    answeredInRound: BigNumber;
    0: BigNumber;
    1: BigNumber;
    2: BigNumber;
    3: BigNumber;
    4: BigNumber;
  }>;

  setController(
    _accessController: string,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  transferOwnership(
    _to: string,
    overrides?: TransactionOverrides
  ): Promise<ContractTransaction>;

  version(): Promise<BigNumber>;

  filters: {
    AnswerUpdated(
      current: BigNumberish | null,
      roundId: BigNumberish | null,
      timestamp: null
    ): EventFilter;

    NewRound(
      roundId: BigNumberish | null,
      startedBy: string | null,
      startedAt: null
    ): EventFilter;

    OwnershipTransferRequested(
      from: string | null,
      to: string | null
    ): EventFilter;

    OwnershipTransferred(from: string | null, to: string | null): EventFilter;
  };

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

    accessController(): Promise<BigNumber>;

    aggregator(): Promise<BigNumber>;

    confirmAggregator(_aggregator: string): Promise<BigNumber>;

    decimals(): Promise<BigNumber>;

    description(): Promise<BigNumber>;

    getAnswer(_roundId: BigNumberish): Promise<BigNumber>;

    getRoundData(_roundId: BigNumberish): Promise<BigNumber>;

    getTimestamp(_roundId: BigNumberish): Promise<BigNumber>;

    latestAnswer(): Promise<BigNumber>;

    latestRound(): Promise<BigNumber>;

    latestRoundData(): Promise<BigNumber>;

    latestTimestamp(): Promise<BigNumber>;

    owner(): Promise<BigNumber>;

    proposeAggregator(_aggregator: string): Promise<BigNumber>;

    proposedAggregator(): Promise<BigNumber>;

    proposedGetRoundData(_roundId: BigNumberish): Promise<BigNumber>;

    proposedLatestRoundData(): Promise<BigNumber>;

    setController(_accessController: string): Promise<BigNumber>;

    transferOwnership(_to: string): Promise<BigNumber>;

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