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

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

interface MultiAssetVAnchorProxyInterface extends ethers.utils.Interface {
  functions: {
    "QueueERC20DepositMap(address,uint256)": FunctionFragment;
    "QueueERC721DepositMap(address,uint256)": FunctionFragment;
    "RewardSpentTreeCommitmentMap(address,uint256)": FunctionFragment;
    "RewardUnspentTreeCommitmentMap(address,uint256)": FunctionFragment;
    "batchDepositERC20s(address,bytes,bytes32,bytes32,bytes32,uint32,uint8)": FunctionFragment;
    "batchDepositERC721s(address,bytes,bytes32,bytes32,bytes32,uint32,uint8)": FunctionFragment;
    "batchInsertRewardSpentTree(address,bytes,bytes32,bytes32,bytes32,uint32,uint8)": FunctionFragment;
    "batchInsertRewardUnspentTree(address,bytes,bytes32,bytes32,bytes32,uint32,uint8)": FunctionFragment;
    "depositRoot()": FunctionFragment;
    "hasher()": FunctionFragment;
    "initialize(address[])": FunctionFragment;
    "initialized()": FunctionFragment;
    "lastProcessedERC20DepositLeaf()": FunctionFragment;
    "lastProcessedERC721DepositLeaf()": FunctionFragment;
    "lastProcessedRewardSpentTreeLeaf()": FunctionFragment;
    "lastProcessedRewardUnspentTreeLeaf()": FunctionFragment;
    "nextQueueERC20DepositIndex(address)": FunctionFragment;
    "nextQueueERC721DepositIndex(address)": FunctionFragment;
    "nextRewardSpentTreeCommitmentIndex(address)": FunctionFragment;
    "nextRewardUnspentTreeCommitmentIndex(address)": FunctionFragment;
    "onERC721Received(address,address,uint256,bytes)": FunctionFragment;
    "previousDepositRoot()": FunctionFragment;
    "previousWithdrawalRoot()": FunctionFragment;
    "queueERC20Deposit((address,address,uint256,uint256,uint256,bytes32,address))": FunctionFragment;
    "queueERC721Deposit((address,address,uint256,uint256,uint256,bytes32,address))": FunctionFragment;
    "queueRewardSpentTreeCommitment(bytes32)": FunctionFragment;
    "queueRewardUnspentTreeCommitment(address,bytes32)": FunctionFragment;
    "validProxiedMASPs(address)": FunctionFragment;
    "withdrawalRoot()": FunctionFragment;
  };

  encodeFunctionData(
    functionFragment: "QueueERC20DepositMap",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "QueueERC721DepositMap",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "RewardSpentTreeCommitmentMap",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "RewardUnspentTreeCommitmentMap",
    values: [string, BigNumberish]
  ): string;
  encodeFunctionData(
    functionFragment: "batchDepositERC20s",
    values: [
      string,
      BytesLike,
      BytesLike,
      BytesLike,
      BytesLike,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "batchDepositERC721s",
    values: [
      string,
      BytesLike,
      BytesLike,
      BytesLike,
      BytesLike,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "batchInsertRewardSpentTree",
    values: [
      string,
      BytesLike,
      BytesLike,
      BytesLike,
      BytesLike,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "batchInsertRewardUnspentTree",
    values: [
      string,
      BytesLike,
      BytesLike,
      BytesLike,
      BytesLike,
      BigNumberish,
      BigNumberish
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "depositRoot",
    values?: undefined
  ): string;
  encodeFunctionData(functionFragment: "hasher", values?: undefined): string;
  encodeFunctionData(
    functionFragment: "initialize",
    values: [string[]]
  ): string;
  encodeFunctionData(
    functionFragment: "initialized",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "lastProcessedERC20DepositLeaf",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "lastProcessedERC721DepositLeaf",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "lastProcessedRewardSpentTreeLeaf",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "lastProcessedRewardUnspentTreeLeaf",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "nextQueueERC20DepositIndex",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "nextQueueERC721DepositIndex",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "nextRewardSpentTreeCommitmentIndex",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "nextRewardUnspentTreeCommitmentIndex",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "onERC721Received",
    values: [string, string, BigNumberish, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "previousDepositRoot",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "previousWithdrawalRoot",
    values?: undefined
  ): string;
  encodeFunctionData(
    functionFragment: "queueERC20Deposit",
    values: [
      {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      }
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "queueERC721Deposit",
    values: [
      {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      }
    ]
  ): string;
  encodeFunctionData(
    functionFragment: "queueRewardSpentTreeCommitment",
    values: [BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "queueRewardUnspentTreeCommitment",
    values: [string, BytesLike]
  ): string;
  encodeFunctionData(
    functionFragment: "validProxiedMASPs",
    values: [string]
  ): string;
  encodeFunctionData(
    functionFragment: "withdrawalRoot",
    values?: undefined
  ): string;

  decodeFunctionResult(
    functionFragment: "QueueERC20DepositMap",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "QueueERC721DepositMap",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "RewardSpentTreeCommitmentMap",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "RewardUnspentTreeCommitmentMap",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchDepositERC20s",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchDepositERC721s",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchInsertRewardSpentTree",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "batchInsertRewardUnspentTree",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "depositRoot",
    data: BytesLike
  ): Result;
  decodeFunctionResult(functionFragment: "hasher", data: BytesLike): Result;
  decodeFunctionResult(functionFragment: "initialize", data: BytesLike): Result;
  decodeFunctionResult(
    functionFragment: "initialized",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lastProcessedERC20DepositLeaf",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lastProcessedERC721DepositLeaf",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lastProcessedRewardSpentTreeLeaf",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "lastProcessedRewardUnspentTreeLeaf",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "nextQueueERC20DepositIndex",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "nextQueueERC721DepositIndex",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "nextRewardSpentTreeCommitmentIndex",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "nextRewardUnspentTreeCommitmentIndex",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "onERC721Received",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "previousDepositRoot",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "previousWithdrawalRoot",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "queueERC20Deposit",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "queueERC721Deposit",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "queueRewardSpentTreeCommitment",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "queueRewardUnspentTreeCommitment",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "validProxiedMASPs",
    data: BytesLike
  ): Result;
  decodeFunctionResult(
    functionFragment: "withdrawalRoot",
    data: BytesLike
  ): Result;

  events: {
    "BatchInsertERC20s(uint256,address,bytes32)": EventFragment;
    "BatchInsertNFTs(uint256,address,bytes32)": EventFragment;
    "BatchInsertRewardSpentTree(uint256,address,bytes32)": EventFragment;
    "BatchInsertRewardUnspentTree(uint256,address,bytes32)": EventFragment;
    "QueueDeposit(uint256,address)": EventFragment;
    "QueueRewardSpentTree(uint256,address)": EventFragment;
    "QueueRewardUnspentTree(uint256,address)": EventFragment;
  };

  getEvent(nameOrSignatureOrTopic: "BatchInsertERC20s"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "BatchInsertNFTs"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "BatchInsertRewardSpentTree"): EventFragment;
  getEvent(
    nameOrSignatureOrTopic: "BatchInsertRewardUnspentTree"
  ): EventFragment;
  getEvent(nameOrSignatureOrTopic: "QueueDeposit"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "QueueRewardSpentTree"): EventFragment;
  getEvent(nameOrSignatureOrTopic: "QueueRewardUnspentTree"): EventFragment;
}

export type BatchInsertERC20sEvent = TypedEvent<
  [BigNumber, string, string] & {
    lastProcessedDepositLeaf: BigNumber;
    proxiedMASP: string;
    newRoot: string;
  }
>;

export type BatchInsertNFTsEvent = TypedEvent<
  [BigNumber, string, string] & {
    lastProcessedNFTLeaf: BigNumber;
    proxiedMASP: string;
    newRoot: string;
  }
>;

export type BatchInsertRewardSpentTreeEvent = TypedEvent<
  [BigNumber, string, string] & {
    lastProcessedRewardSpentTreeLeaf: BigNumber;
    proxiedMASP: string;
    newRoot: string;
  }
>;

export type BatchInsertRewardUnspentTreeEvent = TypedEvent<
  [BigNumber, string, string] & {
    lastProcessedRewardUnspentTreeLeaf: BigNumber;
    proxiedMASP: string;
    newRoot: string;
  }
>;

export type QueueDepositEvent = TypedEvent<
  [BigNumber, string] & { depositIndex: BigNumber; proxiedMASP: string }
>;

export type QueueRewardSpentTreeEvent = TypedEvent<
  [BigNumber, string] & { rewardSpentTreeIndex: BigNumber; proxiedMASP: string }
>;

export type QueueRewardUnspentTreeEvent = TypedEvent<
  [BigNumber, string] & {
    rewardUnspentTreeIndex: BigNumber;
    proxiedMASP: string;
  }
>;

export class MultiAssetVAnchorProxy 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: MultiAssetVAnchorProxyInterface;

  functions: {
    QueueERC20DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumber;
        assetID: BigNumber;
        tokenID: BigNumber;
        depositPartialCommitment: string;
        proxiedMASP: string;
      }
    >;

    QueueERC721DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumber;
        assetID: BigNumber;
        tokenID: BigNumber;
        depositPartialCommitment: string;
        proxiedMASP: string;
      }
    >;

    RewardSpentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[string]>;

    RewardUnspentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<[string]>;

    batchDepositERC20s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    batchDepositERC721s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    batchInsertRewardSpentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    batchInsertRewardUnspentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

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

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

    initialize(
      _validProxiedMASPs: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    initialized(overrides?: CallOverrides): Promise<[boolean]>;

    lastProcessedERC20DepositLeaf(
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    lastProcessedERC721DepositLeaf(
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    lastProcessedRewardSpentTreeLeaf(
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

    lastProcessedRewardUnspentTreeLeaf(
      overrides?: CallOverrides
    ): Promise<[BigNumber]>;

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

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

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

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

    onERC721Received(
      operator: string,
      from: string,
      tokenId: BigNumberish,
      data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

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

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

    queueERC20Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    queueERC721Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    queueRewardSpentTreeCommitment(
      rewardSpentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    queueRewardUnspentTreeCommitment(
      proxiedMASP: string,
      rewardUnspentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<ContractTransaction>;

    validProxiedMASPs(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<[boolean]>;

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

  QueueERC20DepositMap(
    arg0: string,
    arg1: BigNumberish,
    overrides?: CallOverrides
  ): Promise<
    [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
      unwrappedToken: string;
      wrappedToken: string;
      amount: BigNumber;
      assetID: BigNumber;
      tokenID: BigNumber;
      depositPartialCommitment: string;
      proxiedMASP: string;
    }
  >;

  QueueERC721DepositMap(
    arg0: string,
    arg1: BigNumberish,
    overrides?: CallOverrides
  ): Promise<
    [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
      unwrappedToken: string;
      wrappedToken: string;
      amount: BigNumber;
      assetID: BigNumber;
      tokenID: BigNumber;
      depositPartialCommitment: string;
      proxiedMASP: string;
    }
  >;

  RewardSpentTreeCommitmentMap(
    arg0: string,
    arg1: BigNumberish,
    overrides?: CallOverrides
  ): Promise<string>;

  RewardUnspentTreeCommitmentMap(
    arg0: string,
    arg1: BigNumberish,
    overrides?: CallOverrides
  ): Promise<string>;

  batchDepositERC20s(
    proxiedMASP: string,
    _proof: BytesLike,
    _argsHash: BytesLike,
    _currentRoot: BytesLike,
    _newRoot: BytesLike,
    _pathIndices: BigNumberish,
    _batchHeight: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  batchDepositERC721s(
    proxiedMASP: string,
    _proof: BytesLike,
    _argsHash: BytesLike,
    _currentRoot: BytesLike,
    _newRoot: BytesLike,
    _pathIndices: BigNumberish,
    _batchHeight: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  batchInsertRewardSpentTree(
    proxiedMASP: string,
    _proof: BytesLike,
    _argsHash: BytesLike,
    _currentRoot: BytesLike,
    _newRoot: BytesLike,
    _pathIndices: BigNumberish,
    _batchHeight: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  batchInsertRewardUnspentTree(
    proxiedMASP: string,
    _proof: BytesLike,
    _argsHash: BytesLike,
    _currentRoot: BytesLike,
    _newRoot: BytesLike,
    _pathIndices: BigNumberish,
    _batchHeight: BigNumberish,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

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

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

  initialize(
    _validProxiedMASPs: string[],
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  initialized(overrides?: CallOverrides): Promise<boolean>;

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

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

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

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

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

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

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

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

  onERC721Received(
    operator: string,
    from: string,
    tokenId: BigNumberish,
    data: BytesLike,
    overrides?: Overrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

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

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

  queueERC20Deposit(
    depositInfo: {
      unwrappedToken: string;
      wrappedToken: string;
      amount: BigNumberish;
      assetID: BigNumberish;
      tokenID: BigNumberish;
      depositPartialCommitment: BytesLike;
      proxiedMASP: string;
    },
    overrides?: PayableOverrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  queueERC721Deposit(
    depositInfo: {
      unwrappedToken: string;
      wrappedToken: string;
      amount: BigNumberish;
      assetID: BigNumberish;
      tokenID: BigNumberish;
      depositPartialCommitment: BytesLike;
      proxiedMASP: string;
    },
    overrides?: PayableOverrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  queueRewardSpentTreeCommitment(
    rewardSpentTreeCommitment: BytesLike,
    overrides?: PayableOverrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  queueRewardUnspentTreeCommitment(
    proxiedMASP: string,
    rewardUnspentTreeCommitment: BytesLike,
    overrides?: PayableOverrides & { from?: string | Promise<string> }
  ): Promise<ContractTransaction>;

  validProxiedMASPs(arg0: string, overrides?: CallOverrides): Promise<boolean>;

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

  callStatic: {
    QueueERC20DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumber;
        assetID: BigNumber;
        tokenID: BigNumber;
        depositPartialCommitment: string;
        proxiedMASP: string;
      }
    >;

    QueueERC721DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<
      [string, string, BigNumber, BigNumber, BigNumber, string, string] & {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumber;
        assetID: BigNumber;
        tokenID: BigNumber;
        depositPartialCommitment: string;
        proxiedMASP: string;
      }
    >;

    RewardSpentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    RewardUnspentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<string>;

    batchDepositERC20s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    batchDepositERC721s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    batchInsertRewardSpentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

    batchInsertRewardUnspentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: CallOverrides
    ): Promise<void>;

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

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

    initialize(
      _validProxiedMASPs: string[],
      overrides?: CallOverrides
    ): Promise<void>;

    initialized(overrides?: CallOverrides): Promise<boolean>;

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

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

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

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

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

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

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

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

    onERC721Received(
      operator: string,
      from: string,
      tokenId: BigNumberish,
      data: BytesLike,
      overrides?: CallOverrides
    ): Promise<string>;

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

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

    queueERC20Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: CallOverrides
    ): Promise<void>;

    queueERC721Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: CallOverrides
    ): Promise<void>;

    queueRewardSpentTreeCommitment(
      rewardSpentTreeCommitment: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    queueRewardUnspentTreeCommitment(
      proxiedMASP: string,
      rewardUnspentTreeCommitment: BytesLike,
      overrides?: CallOverrides
    ): Promise<void>;

    validProxiedMASPs(
      arg0: string,
      overrides?: CallOverrides
    ): Promise<boolean>;

    withdrawalRoot(overrides?: CallOverrides): Promise<string>;
  };

  filters: {
    "BatchInsertERC20s(uint256,address,bytes32)"(
      lastProcessedDepositLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedDepositLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    BatchInsertERC20s(
      lastProcessedDepositLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedDepositLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    "BatchInsertNFTs(uint256,address,bytes32)"(
      lastProcessedNFTLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      { lastProcessedNFTLeaf: BigNumber; proxiedMASP: string; newRoot: string }
    >;

    BatchInsertNFTs(
      lastProcessedNFTLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      { lastProcessedNFTLeaf: BigNumber; proxiedMASP: string; newRoot: string }
    >;

    "BatchInsertRewardSpentTree(uint256,address,bytes32)"(
      lastProcessedRewardSpentTreeLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedRewardSpentTreeLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    BatchInsertRewardSpentTree(
      lastProcessedRewardSpentTreeLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedRewardSpentTreeLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    "BatchInsertRewardUnspentTree(uint256,address,bytes32)"(
      lastProcessedRewardUnspentTreeLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedRewardUnspentTreeLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    BatchInsertRewardUnspentTree(
      lastProcessedRewardUnspentTreeLeaf?: BigNumberish | null,
      proxiedMASP?: null,
      newRoot?: null
    ): TypedEventFilter<
      [BigNumber, string, string],
      {
        lastProcessedRewardUnspentTreeLeaf: BigNumber;
        proxiedMASP: string;
        newRoot: string;
      }
    >;

    "QueueDeposit(uint256,address)"(
      depositIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { depositIndex: BigNumber; proxiedMASP: string }
    >;

    QueueDeposit(
      depositIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { depositIndex: BigNumber; proxiedMASP: string }
    >;

    "QueueRewardSpentTree(uint256,address)"(
      rewardSpentTreeIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { rewardSpentTreeIndex: BigNumber; proxiedMASP: string }
    >;

    QueueRewardSpentTree(
      rewardSpentTreeIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { rewardSpentTreeIndex: BigNumber; proxiedMASP: string }
    >;

    "QueueRewardUnspentTree(uint256,address)"(
      rewardUnspentTreeIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { rewardUnspentTreeIndex: BigNumber; proxiedMASP: string }
    >;

    QueueRewardUnspentTree(
      rewardUnspentTreeIndex?: BigNumberish | null,
      proxiedMASP?: null
    ): TypedEventFilter<
      [BigNumber, string],
      { rewardUnspentTreeIndex: BigNumber; proxiedMASP: string }
    >;
  };

  estimateGas: {
    QueueERC20DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    QueueERC721DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    RewardSpentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    RewardUnspentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<BigNumber>;

    batchDepositERC20s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    batchDepositERC721s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    batchInsertRewardSpentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    batchInsertRewardUnspentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

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

    initialize(
      _validProxiedMASPs: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

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

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

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

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

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

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

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

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

    onERC721Received(
      operator: string,
      from: string,
      tokenId: BigNumberish,
      data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

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

    queueERC20Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    queueERC721Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    queueRewardSpentTreeCommitment(
      rewardSpentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

    queueRewardUnspentTreeCommitment(
      proxiedMASP: string,
      rewardUnspentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<BigNumber>;

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

    withdrawalRoot(overrides?: CallOverrides): Promise<BigNumber>;
  };

  populateTransaction: {
    QueueERC20DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    QueueERC721DepositMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    RewardSpentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    RewardUnspentTreeCommitmentMap(
      arg0: string,
      arg1: BigNumberish,
      overrides?: CallOverrides
    ): Promise<PopulatedTransaction>;

    batchDepositERC20s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    batchDepositERC721s(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    batchInsertRewardSpentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    batchInsertRewardUnspentTree(
      proxiedMASP: string,
      _proof: BytesLike,
      _argsHash: BytesLike,
      _currentRoot: BytesLike,
      _newRoot: BytesLike,
      _pathIndices: BigNumberish,
      _batchHeight: BigNumberish,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

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

    initialize(
      _validProxiedMASPs: string[],
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

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

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

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

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

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

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

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

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

    onERC721Received(
      operator: string,
      from: string,
      tokenId: BigNumberish,
      data: BytesLike,
      overrides?: Overrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

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

    queueERC20Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    queueERC721Deposit(
      depositInfo: {
        unwrappedToken: string;
        wrappedToken: string;
        amount: BigNumberish;
        assetID: BigNumberish;
        tokenID: BigNumberish;
        depositPartialCommitment: BytesLike;
        proxiedMASP: string;
      },
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    queueRewardSpentTreeCommitment(
      rewardSpentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

    queueRewardUnspentTreeCommitment(
      proxiedMASP: string,
      rewardUnspentTreeCommitment: BytesLike,
      overrides?: PayableOverrides & { from?: string | Promise<string> }
    ): Promise<PopulatedTransaction>;

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

    withdrawalRoot(overrides?: CallOverrides): Promise<PopulatedTransaction>;
  };
}
