/* Autogenerated file. Do not edit manually. */
/* tslint:disable */
/* eslint-disable */

import {
  ethers,
  EventFilter,
  Signer,
  BigNumber,
  BigNumberish,
  PopulatedTransaction,
} from "ethers";
import {
  Contract,
  ContractTransaction,
  Overrides,
  CallOverrides,
} from "@ethersproject/contracts";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";

interface DepositTokenMockInterface extends ethers.utils.Interface {
  functions: {
    "_aic()": FunctionFragment;
    "cleanUserState()": FunctionFragment;
    "getScaledUserBalanceAndSupply(address)": FunctionFragment;
    "handleActionOnAic(address,uint256,uint256,uint256)": FunctionFragment;
    "scaledBalanceOf(address)": FunctionFragment;
    "scaledTotalSupply()": FunctionFragment;
    "setUserBalanceAndSupply(uint256,uint256)": FunctionFragment;
  };

  encodeFunctionData(functionFragment: "_aic", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "cleanUserState",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "getScaledUserBalanceAndSupply",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "handleActionOnAic",
    values: [string, BigNumberish, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "scaledBalanceOf",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "scaledTotalSupply",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "setUserBalanceAndSupply",
    values: [BigNumberish, BigNumberish]
  ): string;

  decodeFunctionResult(functionFragment: "_aic", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "cleanUserState",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "getScaledUserBalanceAndSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "handleActionOnAic",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "scaledBalanceOf",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "scaledTotalSupply",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "setUserBalanceAndSupply",
    data: BytesLike
  ): Result;

  events: {
    "AssetConfigUpdated(address,uint256)": EventFragment;
    "AssetIndexUpdated(address,uint256)": EventFragment;
    "RewardsAccrued(address,uint256)": EventFragment;
    "UserIndexUpdated(address,address,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "AssetConfigUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "AssetIndexUpdated"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RewardsAccrued"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "UserIndexUpdated"): EventFragment;
}

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

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

  interface: DepositTokenMockInterface;

  functions: {
    _aic(
      overrides?: CallOverrides
    ): Promise<{
      0: string;
    }>;

    "_aic()"(
      overrides?: CallOverrides
    ): Promise<{
      0: string;
    }>;

    cleanUserState(overrides?: Overrides): Promise<ContractTransaction>;

    "cleanUserState()"(overrides?: Overrides): Promise<ContractTransaction>;

    getScaledUserBalanceAndSupply(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
      1: BigNumber;
    }>;

    "getScaledUserBalanceAndSupply(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
      1: BigNumber;
    }>;

    handleActionOnAic(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "handleActionOnAic(address,uint256,uint256,uint256)"(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    scaledBalanceOf(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
    }>;

    "scaledBalanceOf(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
    }>;

    scaledTotalSupply(
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
    }>;

    "scaledTotalSupply()"(
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
    }>;

    setUserBalanceAndSupply(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;

    "setUserBalanceAndSupply(uint256,uint256)"(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<ContractTransaction>;
  };

  _aic(overrides?: CallOverrides): Promise<string>;

  "_aic()"(overrides?: CallOverrides): Promise<string>;

  cleanUserState(overrides?: Overrides): Promise<ContractTransaction>;

  "cleanUserState()"(overrides?: Overrides): Promise<ContractTransaction>;

  getScaledUserBalanceAndSupply(
    user: string,
    overrides?: CallOverrides
  ): Promise<{
    0: BigNumber;
    1: BigNumber;
  }>;

  "getScaledUserBalanceAndSupply(address)"(
    user: string,
    overrides?: CallOverrides
  ): Promise<{
    0: BigNumber;
    1: BigNumber;
  }>;

  handleActionOnAic(
    user: string,
    oldBalance: BigNumberish,
    newBalance: BigNumberish,
    totalSupply: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "handleActionOnAic(address,uint256,uint256,uint256)"(
    user: string,
    oldBalance: BigNumberish,
    newBalance: BigNumberish,
    totalSupply: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  scaledBalanceOf(user: string, overrides?: CallOverrides): Promise<BigNumber>;

  "scaledBalanceOf(address)"(
    user: string,
    overrides?: CallOverrides
  ): Promise<BigNumber>;

  scaledTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

  "scaledTotalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

  setUserBalanceAndSupply(
    userBalance: BigNumberish,
    totalSupply: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  "setUserBalanceAndSupply(uint256,uint256)"(
    userBalance: BigNumberish,
    totalSupply: BigNumberish,
    overrides?: Overrides
  ): Promise<ContractTransaction>;

  callStatic: {
    _aic(overrides?: CallOverrides): Promise<string>;

    "_aic()"(overrides?: CallOverrides): Promise<string>;

    cleanUserState(overrides?: CallOverrides): Promise<void>;

    "cleanUserState()"(overrides?: CallOverrides): Promise<void>;

    getScaledUserBalanceAndSupply(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
      1: BigNumber;
    }>;

    "getScaledUserBalanceAndSupply(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<{
      0: BigNumber;
      1: BigNumber;
    }>;

    handleActionOnAic(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    "handleActionOnAic(address,uint256,uint256,uint256)"(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    scaledBalanceOf(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "scaledBalanceOf(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    scaledTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    "scaledTotalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

    setUserBalanceAndSupply(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    "setUserBalanceAndSupply(uint256,uint256)"(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;
  };

  filters: {
    AssetConfigUpdated(asset: string | null, emission: null): EventFilter;

    AssetIndexUpdated(asset: string | null, index: null): EventFilter;

    RewardsAccrued(user: string | null, amount: null): EventFilter;

    UserIndexUpdated(
      user: string | null,
      asset: string | null,
      index: null
    ): EventFilter;
  };

  estimateGas: {
    _aic(overrides?: CallOverrides): Promise<BigNumber>;

    "_aic()"(overrides?: CallOverrides): Promise<BigNumber>;

    cleanUserState(overrides?: Overrides): Promise<BigNumber>;

    "cleanUserState()"(overrides?: Overrides): Promise<BigNumber>;

    getScaledUserBalanceAndSupply(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "getScaledUserBalanceAndSupply(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    handleActionOnAic(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "handleActionOnAic(address,uint256,uint256,uint256)"(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    scaledBalanceOf(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    "scaledBalanceOf(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    scaledTotalSupply(overrides?: CallOverrides): Promise<BigNumber>;

    "scaledTotalSupply()"(overrides?: CallOverrides): Promise<BigNumber>;

    setUserBalanceAndSupply(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;

    "setUserBalanceAndSupply(uint256,uint256)"(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<BigNumber>;
  };

  populateTransaction: {
    _aic(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    "_aic()"(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    cleanUserState(overrides?: Overrides): Promise<PopulatedTransaction>;

    "cleanUserState()"(overrides?: Overrides): Promise<PopulatedTransaction>;

    getScaledUserBalanceAndSupply(
      user: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    "getScaledUserBalanceAndSupply(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    handleActionOnAic(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "handleActionOnAic(address,uint256,uint256,uint256)"(
      user: string,
      oldBalance: BigNumberish,
      newBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    scaledBalanceOf(
      user: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    "scaledBalanceOf(address)"(
      user: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    scaledTotalSupply(overrides?: CallOverrides): Promise<PopulatedTransaction>;

    "scaledTotalSupply()"(
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    setUserBalanceAndSupply(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;

    "setUserBalanceAndSupply(uint256,uint256)"(
      userBalance: BigNumberish,
      totalSupply: BigNumberish,
      overrides?: Overrides
    ): Promise<PopulatedTransaction>;
  };
}
