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

import {
  ethers,
  EventFilter,
  Signer,
  BigNumber,
  BigNumberish,
  PopulatedTransaction,
  BaseContract,
  ContractTransaction,
  Overrides,
  CallOverrides,
} from "ethers";
import { BytesLike } from "@ethersproject/bytes";
import { Listener, Provider } from "@ethersproject/providers";
import { FunctionFragment, EventFragment, Result } from "@ethersproject/abi";
import { TypedEventFilter, TypedEvent, TypedListener } from "./commons";

interface RevenueRecipientInterface extends ethers.utils.Interface {
  functions: {
    "BAL()": FunctionFragment;
    "approveAsset(address)": FunctionFragment;
    "depositToPool(address[],uint256[])": FunctionFragment;
    "mBPT()": FunctionFragment;
    "migrate(address)": FunctionFragment;
    "minOut(address)": FunctionFragment;
    "nexus()": FunctionFragment;
    "notifyRedistributionAmount(address,uint256)": FunctionFragment;
    "reinvestBAL(address,address,uint256,uint256,uint256)": FunctionFragment;
    "updateAmountOut(address,uint256)": FunctionFragment;
  };

  encodeFunctionData(functionFragment: "BAL", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "approveAsset",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "depositToPool",
    values: [string[], BigNumberish[]]
  ): string;
  encodeFunctionData(functionFragment: "mBPT", values?: undefined): string;
  encodeFunctionData(functionFragment: "migrate", values: [string]): string;
  encodeFunctionData(functionFragment: "minOut", values: [string]): string;
  encodeFunctionData(functionFragment: "nexus", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "notifyRedistributionAmount",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "reinvestBAL",
    values: [string, string, BigNumberish, BigNumberish, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "updateAmountOut",
    values: [string, BigNumberish]
  ): string;

  decodeFunctionResult(functionFragment: "BAL", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "approveAsset",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "depositToPool",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "mBPT", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "migrate", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "minOut", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "nexus", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "notifyRedistributionAmount",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "reinvestBAL",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "updateAmountOut",
    data: BytesLike
  ): Result;

  events: {
    "RevenueDeposited(address,uint256,uint256)": EventFragment;
    "RevenueReceived(address,uint256)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "RevenueDeposited"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "RevenueReceived"): EventFragment;
}

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

  listeners<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter?: TypedEventFilter<EventArgsArray, EventArgsObject>
  ): Array<TypedListener<EventArgsArray, EventArgsObject>>;
  off<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  on<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  once<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  removeListener<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>,
    listener: TypedListener<EventArgsArray, EventArgsObject>
  ): this;
  removeAllListeners<EventArgsArray extends Array<any>, EventArgsObject>(
    eventFilter: TypedEventFilter<EventArgsArray, EventArgsObject>
  ): this;

  listeners(eventName?: string): Array<Listener>;
  off(eventName: string, listener: Listener): this;
  on(eventName: string, listener: Listener): this;
  once(eventName: string, listener: Listener): this;
  removeListener(eventName: string, listener: Listener): this;
  removeAllListeners(eventName?: string): this;

  queryFilter<EventArgsArray extends Array<any>, EventArgsObject>(
    event: TypedEventFilter<EventArgsArray, EventArgsObject>,
    fromBlockOrBlockhash?: string | number | undefined,
    toBlock?: string | number | undefined
  ): Promise<Array<TypedEvent<EventArgsArray & EventArgsObject>>>;

  interface: RevenueRecipientInterface;

  functions: {
    BAL(overrides?: CallOverrides): Promise<[string]>;

    approveAsset(
      asset: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    depositToPool(
      _mAssets: string[],
      _percentages: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    mBPT(overrides?: CallOverrides): Promise<[string]>;

    migrate(
      _recipient: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    minOut(arg0: string, overrides?: CallOverrides): Promise<[BigNumber]>;

    nexus(overrides?: CallOverrides): Promise<[string]>;

    notifyRedistributionAmount(
      _mAsset: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    reinvestBAL(
      _pool: string,
      _output: string,
      _minAmountOut: BigNumberish,
      _maxPrice: BigNumberish,
      _pct: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    updateAmountOut(
      _asset: string,
      _minOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;
  };

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

  approveAsset(
    asset: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  depositToPool(
    _mAssets: string[],
    _percentages: BigNumberish[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

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

  migrate(
    _recipient: string,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  minOut(arg0: string, overrides?: CallOverrides): Promise<BigNumber>;

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

  notifyRedistributionAmount(
    _mAsset: string,
    _amount: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  reinvestBAL(
    _pool: string,
    _output: string,
    _minAmountOut: BigNumberish,
    _maxPrice: BigNumberish,
    _pct: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  updateAmountOut(
    _asset: string,
    _minOut: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

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

    approveAsset(asset: string, overrides?: CallOverrides): Promise<void>;

    depositToPool(
      _mAssets: string[],
      _percentages: BigNumberish[],
      overrides?: CallOverrides
    ): Promise<void>;

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

    migrate(_recipient: string, overrides?: CallOverrides): Promise<void>;

    minOut(arg0: string, overrides?: CallOverrides): Promise<BigNumber>;

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

    notifyRedistributionAmount(
      _mAsset: string,
      _amount: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    reinvestBAL(
      _pool: string,
      _output: string,
      _minAmountOut: BigNumberish,
      _maxPrice: BigNumberish,
      _pct: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    updateAmountOut(
      _asset: string,
      _minOut: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;
  };

  filters: {
    RevenueDeposited(
      mAsset?: string | null,
      amountIn?: null,
      amountOut?: null
    ): TypedEventFilter<
      [string, BigNumber, BigNumber],
      { mAsset: string; amountIn: BigNumber; amountOut: BigNumber }
    >;

    RevenueReceived(
      mAsset?: string | null,
      amountIn?: null
    ): TypedEventFilter<
      [string, BigNumber],
      { mAsset: string; amountIn: BigNumber }
    >;
  };

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

    approveAsset(
      asset: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    depositToPool(
      _mAssets: string[],
      _percentages: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

    migrate(
      _recipient: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    minOut(arg0: string, overrides?: CallOverrides): Promise<BigNumber>;

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

    notifyRedistributionAmount(
      _mAsset: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    reinvestBAL(
      _pool: string,
      _output: string,
      _minAmountOut: BigNumberish,
      _maxPrice: BigNumberish,
      _pct: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    updateAmountOut(
      _asset: string,
      _minOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;
  };

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

    approveAsset(
      asset: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    depositToPool(
      _mAssets: string[],
      _percentages: BigNumberish[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

    migrate(
      _recipient: string,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    minOut(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

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

    notifyRedistributionAmount(
      _mAsset: string,
      _amount: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    reinvestBAL(
      _pool: string,
      _output: string,
      _minAmountOut: BigNumberish,
      _maxPrice: BigNumberish,
      _pct: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    updateAmountOut(
      _asset: string,
      _minOut: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;
  };
}
