{"version":3,"file":"AssetsContractController.mjs","sourceRoot":"","sources":["../src/AssetsContractController.ts"],"names":[],"mappings":"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","sourcesContent":["// import { BigNumber } from '@ethersproject/bignumber';\nimport type { BigNumber } from '@ethersproject/bignumber';\nimport { Contract } from '@ethersproject/contracts';\nimport { Web3Provider } from '@ethersproject/providers';\nimport { IPFS_DEFAULT_GATEWAY_URL } from '@metamask/controller-utils';\nimport type { Messenger } from '@metamask/messenger';\nimport type {\n  NetworkClientId,\n  NetworkControllerGetNetworkClientByIdAction,\n  NetworkControllerGetNetworkConfigurationByNetworkClientId,\n  NetworkControllerGetSelectedNetworkClientAction,\n  NetworkControllerGetStateAction,\n  NetworkControllerNetworkDidChangeEvent,\n  Provider,\n} from '@metamask/network-controller';\nimport type { PreferencesControllerStateChangeEvent } from '@metamask/preferences-controller';\nimport type { Hex } from '@metamask/utils';\nimport type BN from 'bn.js';\nimport abiSingleCallBalancesContract from 'single-call-balance-checker-abi';\n\nimport type { AssetsContractControllerMethodActions } from './AssetsContractController-method-action-types';\nimport {\n  SupportedStakedBalanceNetworks,\n  SupportedTokenDetectionNetworks,\n} from './assetsUtil';\nimport type { Call } from './multicall';\nimport { multicallOrFallback } from './multicall';\nimport { ERC20Standard } from './Standards/ERC20Standard';\nimport { ERC721Standard } from './Standards/NftStandards/ERC721/ERC721Standard';\nimport { ERC1155Standard } from './Standards/NftStandards/ERC1155/ERC1155Standard';\n\n/**\n * Check if token detection is enabled for certain networks\n *\n * @param chainId - ChainID of network\n * @returns Whether the current network supports token detection\n */\nexport const SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID = {\n  [SupportedTokenDetectionNetworks.Mainnet]:\n    '0xb1f8e55c7f64d203c1400b9d8555d050f94adf39',\n  [SupportedTokenDetectionNetworks.Bsc]:\n    '0x2352c63A83f9Fd126af8676146721Fa00924d7e4',\n  [SupportedTokenDetectionNetworks.Polygon]:\n    '0x2352c63A83f9Fd126af8676146721Fa00924d7e4',\n  [SupportedTokenDetectionNetworks.Avax]:\n    '0xD023D153a0DFa485130ECFdE2FAA7e612EF94818',\n  [SupportedTokenDetectionNetworks.Aurora]:\n    '0x1286415D333855237f89Df27D388127181448538',\n  [SupportedTokenDetectionNetworks.LineaGoerli]:\n    '0x10dAd7Ca3921471f616db788D9300DC97Db01783',\n  [SupportedTokenDetectionNetworks.LineaMainnet]:\n    '0xF62e6a41561b3650a69Bb03199C735e3E3328c0D',\n  [SupportedTokenDetectionNetworks.Arbitrum]:\n    '0x151E24A486D7258dd7C33Fb67E4bB01919B7B32c',\n  [SupportedTokenDetectionNetworks.Optimism]:\n    '0xB1c568e9C3E6bdaf755A60c7418C269eb11524FC',\n  [SupportedTokenDetectionNetworks.Base]:\n    '0x6AA75276052D96696134252587894ef5FFA520af',\n  [SupportedTokenDetectionNetworks.Zksync]:\n    '0x458fEd3144680a5b8bcfaa0F9594aa19B4Ea2D34',\n  [SupportedTokenDetectionNetworks.Cronos]:\n    '0x768ca200f0fc702ac9ea502498c18f5eff176378',\n  [SupportedTokenDetectionNetworks.Celo]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n  [SupportedTokenDetectionNetworks.Gnosis]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n  [SupportedTokenDetectionNetworks.Fantom]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n  [SupportedTokenDetectionNetworks.PolygonZkevm]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n  [SupportedTokenDetectionNetworks.Moonbeam]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n  [SupportedTokenDetectionNetworks.Moonriver]:\n    '0x6aa75276052d96696134252587894ef5ffa520af',\n} as const satisfies Record<Hex, string>;\n\nexport const STAKING_CONTRACT_ADDRESS_BY_CHAINID = {\n  [SupportedStakedBalanceNetworks.Mainnet]:\n    '0x4fef9d741011476750a243ac70b9789a63dd47df',\n  [SupportedStakedBalanceNetworks.Hoodi]:\n    '0xe96ac18cfe5a7af8fe1fe7bc37ff110d88bc67ff',\n} as Record<Hex, string>;\n\nexport const MISSING_PROVIDER_ERROR =\n  'AssetsContractController failed to set the provider correctly. A provider must be set for this method to be available';\n\n/**\n * BalanceMap\n *\n * Key value object containing the balance for each tokenAddress\n *\n * [tokenAddress] - Address of the token\n */\nexport type BalanceMap = {\n  [tokenAddress: string]: BN;\n};\n\n/**\n * The name of the {@link AssetsContractController}\n */\nconst name = 'AssetsContractController';\n\n/**\n * The union of all internal messenger actions available to the {@link AssetsContractControllerMessenger}.\n */\nexport type AssetsContractControllerActions =\n  AssetsContractControllerMethodActions;\n\n/**\n * The union of all internal messenger events available to the {@link AssetsContractControllerMessenger}.\n */\nexport type AssetsContractControllerEvents = never;\n\n/**\n * The union of all external messenger actions that must be allowed by the {@link AssetsContractControllerMessenger}.\n */\nexport type AllowedActions =\n  | NetworkControllerGetNetworkClientByIdAction\n  | NetworkControllerGetNetworkConfigurationByNetworkClientId\n  | NetworkControllerGetSelectedNetworkClientAction\n  | NetworkControllerGetStateAction;\n\n/**\n * The union of all external messenger event that must be allowed by the {@link AssetsContractControllerMessenger}.\n */\nexport type AllowedEvents =\n  | PreferencesControllerStateChangeEvent\n  | NetworkControllerNetworkDidChangeEvent;\n\n/**\n * The messenger of the {@link AssetsContractController}.\n */\nexport type AssetsContractControllerMessenger = Messenger<\n  typeof name,\n  AssetsContractControllerActions | AllowedActions,\n  AssetsContractControllerEvents | AllowedEvents\n>;\n\nexport type StakedBalance = string | undefined;\n\nconst MESSENGER_EXPOSED_METHODS = [\n  'getERC20Standard',\n  'getERC721Standard',\n  'getERC1155Standard',\n  'getERC20BalanceOf',\n  'getERC20TokenDecimals',\n  'getERC20TokenName',\n  'getERC721NftTokenId',\n  'getERC721TokenURI',\n  'getERC721AssetName',\n  'getERC721AssetSymbol',\n  'getERC721OwnerOf',\n  'getERC1155TokenURI',\n  'getERC1155BalanceOf',\n  'transferSingleERC1155',\n  'getTokenStandardAndDetails',\n  'getBalancesInSingleCall',\n  'getStakedBalanceForChain',\n] as const;\n\n/**\n * Controller that interacts with contracts on mainnet through web3\n */\nexport class AssetsContractController {\n  readonly name: typeof name = name;\n\n  protected messenger: AssetsContractControllerMessenger;\n\n  #provider: Provider | undefined;\n\n  #ipfsGateway: string;\n\n  #chainId: Hex;\n\n  /**\n   * Creates a AssetsContractController instance.\n   *\n   * @param options - The controller options.\n   * @param options.messenger - The messenger.\n   * @param options.chainId - The chain ID of the current network.\n   */\n  constructor({\n    messenger,\n    chainId: initialChainId,\n  }: {\n    messenger: AssetsContractControllerMessenger;\n    chainId: Hex;\n  }) {\n    this.messenger = messenger;\n    this.#provider = undefined;\n    this.#ipfsGateway = IPFS_DEFAULT_GATEWAY_URL;\n    this.#chainId = initialChainId;\n\n    messenger.registerMethodActionHandlers(this, MESSENGER_EXPOSED_METHODS);\n    this.#registerEventSubscriptions();\n  }\n\n  #registerEventSubscriptions() {\n    this.messenger.subscribe(\n      `PreferencesController:stateChange`,\n      ({ ipfsGateway }) => {\n        this.#ipfsGateway = ipfsGateway;\n      },\n    );\n\n    this.messenger.subscribe(\n      `NetworkController:networkDidChange`,\n      ({ selectedNetworkClientId }) => {\n        const chainId = this.#getCorrectChainId(selectedNetworkClientId);\n\n        if (this.#chainId !== chainId) {\n          this.#chainId = chainId;\n          // @ts-expect-error TODO: remove this annotation once the `Eip1193Provider` class is released\n          this.#provider = this.#getCorrectProvider();\n        }\n      },\n    );\n  }\n\n  /**\n   * Sets a new provider.\n   *\n   * @param provider - Provider used to create a new underlying Web3 instance\n   */\n  setProvider(provider: Provider | undefined) {\n    this.#provider = provider;\n  }\n\n  get ipfsGateway() {\n    return this.#ipfsGateway;\n  }\n\n  get chainId() {\n    return this.#chainId;\n  }\n\n  /**\n   * Get the relevant provider instance.\n   *\n   * @param networkClientId - Network Client ID.\n   * @returns Web3Provider instance.\n   */\n  #getCorrectProvider(networkClientId?: NetworkClientId): Web3Provider {\n    const provider = networkClientId\n      ? this.messenger.call(\n          `NetworkController:getNetworkClientById`,\n          networkClientId,\n        ).provider\n      : (this.messenger.call('NetworkController:getSelectedNetworkClient')\n          ?.provider ?? this.#provider);\n\n    if (provider === undefined) {\n      throw new Error(MISSING_PROVIDER_ERROR);\n    }\n\n    return new Web3Provider(provider);\n  }\n\n  /**\n   * Get the relevant chain ID.\n   *\n   * @param networkClientId - Network Client ID used to get the provider.\n   * @returns Hex chain ID.\n   */\n  #getCorrectChainId(networkClientId?: NetworkClientId): Hex {\n    if (networkClientId) {\n      const networkClientConfiguration = this.messenger.call(\n        'NetworkController:getNetworkConfigurationByNetworkClientId',\n        networkClientId,\n      );\n      if (networkClientConfiguration) {\n        return networkClientConfiguration.chainId;\n      }\n    }\n    const { selectedNetworkClientId } = this.messenger.call(\n      'NetworkController:getState',\n    );\n    const networkClient = this.messenger.call(\n      'NetworkController:getNetworkClientById',\n      selectedNetworkClientId,\n    );\n    return networkClient.configuration?.chainId ?? this.#chainId;\n  }\n\n  /**\n   * Get a ERC20Standard instance using the relevant provider instance.\n   *\n   * @param networkClientId - Network Client ID used to get the provider.\n   * @returns ERC20Standard instance.\n   */\n  getERC20Standard(networkClientId?: NetworkClientId): ERC20Standard {\n    const provider = this.#getCorrectProvider(networkClientId);\n    return new ERC20Standard(provider);\n  }\n\n  /**\n   * Get a ERC721Standard instance using the relevant provider instance.\n   *\n   * @param networkClientId - Network Client ID used to get the provider.\n   * @returns ERC721Standard instance.\n   */\n  getERC721Standard(networkClientId?: NetworkClientId): ERC721Standard {\n    const provider = this.#getCorrectProvider(networkClientId);\n    return new ERC721Standard(provider);\n  }\n\n  /**\n   * Get a ERC1155Standard instance using the relevant provider instance.\n   *\n   * @param networkClientId - Network Client ID used to get the provider.\n   * @returns ERC1155Standard instance.\n   */\n  getERC1155Standard(networkClientId?: NetworkClientId): ERC1155Standard {\n    const provider = this.#getCorrectProvider(networkClientId);\n    return new ERC1155Standard(provider);\n  }\n\n  /**\n   * Get balance or count for current account on specific asset contract.\n   *\n   * @param address - Asset ERC20 contract address.\n   * @param selectedAddress - Current account public address.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to BN object containing balance for current account on specific asset contract.\n   */\n  async getERC20BalanceOf(\n    address: string,\n    selectedAddress: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<BN> {\n    const erc20Standard = this.getERC20Standard(networkClientId);\n    return erc20Standard.getBalanceOf(address, selectedAddress);\n  }\n\n  /**\n   * Query for the decimals for a given ERC20 asset.\n   *\n   * @param address - ERC20 asset contract address.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'decimals'.\n   */\n  async getERC20TokenDecimals(\n    address: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc20Standard = this.getERC20Standard(networkClientId);\n    return erc20Standard.getTokenDecimals(address);\n  }\n\n  /**\n   * Query for the name for a given ERC20 asset.\n   *\n   * @param address - ERC20 asset contract address.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'decimals'.\n   */\n  async getERC20TokenName(\n    address: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc20Standard = this.getERC20Standard(networkClientId);\n    return erc20Standard.getTokenName(address);\n  }\n\n  /**\n   * Enumerate assets assigned to an owner.\n   *\n   * @param address - ERC721 asset contract address.\n   * @param selectedAddress - Current account public address.\n   * @param index - An NFT counter less than `balanceOf(selectedAddress)`.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to token identifier for the 'index'th asset assigned to 'selectedAddress'.\n   */\n  async getERC721NftTokenId(\n    address: string,\n    selectedAddress: string,\n    index: number,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc721Standard = this.getERC721Standard(networkClientId);\n    return erc721Standard.getNftTokenId(address, selectedAddress, index);\n  }\n\n  /**\n   * Enumerate assets assigned to an owner.\n   *\n   * @param tokenAddress - ERC721 asset contract address.\n   * @param userAddress - Current account public address.\n   * @param tokenId - ERC721 asset identifier.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to an object containing the token standard and a set of details which depend on which standard the token supports.\n   */\n  async getTokenStandardAndDetails(\n    tokenAddress: string,\n    userAddress?: string,\n    tokenId?: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<{\n    standard: string;\n    tokenURI?: string | undefined;\n    symbol?: string | undefined;\n    name?: string | undefined;\n    decimals?: string | undefined;\n    balance?: BN | undefined;\n  }> {\n    // Asserts provider is available\n    this.#getCorrectProvider(networkClientId);\n\n    // ERC721\n    try {\n      const erc721Standard = this.getERC721Standard(networkClientId);\n      return {\n        ...(await erc721Standard.getDetails(\n          tokenAddress,\n          this.#ipfsGateway,\n          tokenId,\n        )),\n      };\n    } catch {\n      // Ignore\n    }\n\n    // ERC1155\n    try {\n      const erc1155Standard = this.getERC1155Standard(networkClientId);\n      return {\n        ...(await erc1155Standard.getDetails(\n          tokenAddress,\n          this.#ipfsGateway,\n          tokenId,\n        )),\n      };\n    } catch {\n      // Ignore\n    }\n\n    // ERC20\n    try {\n      const erc20Standard = this.getERC20Standard(networkClientId);\n      return {\n        ...(await erc20Standard.getDetails(tokenAddress, userAddress)),\n      };\n    } catch {\n      // Ignore\n    }\n\n    throw new Error('Unable to determine contract standard');\n  }\n\n  /**\n   * Query for tokenURI for a given ERC721 asset.\n   *\n   * @param address - ERC721 asset contract address.\n   * @param tokenId - ERC721 asset identifier.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'tokenURI'.\n   */\n  async getERC721TokenURI(\n    address: string,\n    tokenId: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc721Standard = this.getERC721Standard(networkClientId);\n    return erc721Standard.getTokenURI(address, tokenId);\n  }\n\n  /**\n   * Query for name for a given asset.\n   *\n   * @param address - ERC721 or ERC20 asset contract address.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'name'.\n   */\n  async getERC721AssetName(\n    address: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc721Standard = this.getERC721Standard(networkClientId);\n    return erc721Standard.getAssetName(address);\n  }\n\n  /**\n   * Query for symbol for a given asset.\n   *\n   * @param address - ERC721 or ERC20 asset contract address.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'symbol'.\n   */\n  async getERC721AssetSymbol(\n    address: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc721Standard = this.getERC721Standard(networkClientId);\n    return erc721Standard.getAssetSymbol(address);\n  }\n\n  /**\n   * Query for owner for a given ERC721 asset.\n   *\n   * @param address - ERC721 asset contract address.\n   * @param tokenId - ERC721 asset identifier.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the owner address.\n   */\n  async getERC721OwnerOf(\n    address: string,\n    tokenId: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc721Standard = this.getERC721Standard(networkClientId);\n    return erc721Standard.getOwnerOf(address, tokenId);\n  }\n\n  /**\n   * Query for tokenURI for a given asset.\n   *\n   * @param address - ERC1155 asset contract address.\n   * @param tokenId - ERC1155 asset identifier.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'tokenURI'.\n   */\n  async getERC1155TokenURI(\n    address: string,\n    tokenId: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<string> {\n    const erc1155Standard = this.getERC1155Standard(networkClientId);\n    return erc1155Standard.getTokenURI(address, tokenId);\n  }\n\n  /**\n   * Query for balance of a given ERC 1155 token.\n   *\n   * @param userAddress - Wallet public address.\n   * @param nftAddress - ERC1155 asset contract address.\n   * @param nftId - ERC1155 asset identifier.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'balanceOf'.\n   */\n  async getERC1155BalanceOf(\n    userAddress: string,\n    nftAddress: string,\n    nftId: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<BN> {\n    const erc1155Standard = this.getERC1155Standard(networkClientId);\n    return erc1155Standard.getBalanceOf(nftAddress, userAddress, nftId);\n  }\n\n  /**\n   * Transfer single ERC1155 token.\n   *\n   * @param nftAddress - ERC1155 token address.\n   * @param senderAddress - ERC1155 token sender.\n   * @param recipientAddress - ERC1155 token recipient.\n   * @param nftId - ERC1155 token id.\n   * @param qty - Quantity of tokens to be sent.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns Promise resolving to the 'transferSingle' ERC1155 token.\n   */\n  async transferSingleERC1155(\n    nftAddress: string,\n    senderAddress: string,\n    recipientAddress: string,\n    nftId: string,\n    qty: string,\n    networkClientId?: NetworkClientId,\n  ): Promise<void> {\n    const erc1155Standard = this.getERC1155Standard(networkClientId);\n    return erc1155Standard.transferSingle(\n      nftAddress,\n      senderAddress,\n      recipientAddress,\n      nftId,\n      qty,\n    );\n  }\n\n  /**\n   * Get the token balance for a list of token addresses in a single call. Only non-zero balances\n   * are returned.\n   *\n   * @param selectedAddress - The address to check token balances for.\n   * @param tokensToDetect - The token addresses to detect balances for.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns The list of non-zero token balances.\n   */\n  async getBalancesInSingleCall(\n    selectedAddress: string,\n    tokensToDetect: string[],\n    networkClientId?: NetworkClientId,\n  ) {\n    const chainId = this.#getCorrectChainId(networkClientId);\n    const provider = this.#getCorrectProvider(networkClientId);\n    if (\n      !((id): id is keyof typeof SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID =>\n        id in SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID)(chainId)\n    ) {\n      // Only fetch balance if contract address exists\n      return {};\n    }\n    const contractAddress = SINGLE_CALL_BALANCES_ADDRESS_BY_CHAINID[chainId];\n\n    const contract = new Contract(\n      contractAddress,\n      abiSingleCallBalancesContract,\n      provider,\n    );\n    const result = await contract.balances([selectedAddress], tokensToDetect);\n    const nonZeroBalances: BalanceMap = {};\n    /* istanbul ignore else */\n    if (result.length > 0) {\n      tokensToDetect.forEach((tokenAddress, index) => {\n        const balance: BN = result[index];\n        /* istanbul ignore else */\n        if (String(balance) !== '0') {\n          nonZeroBalances[tokenAddress] = balance;\n        }\n      });\n    }\n    return nonZeroBalances;\n  }\n\n  /**\n   * Get the staked ethereum balance for multiple addresses in a single call.\n   *\n   * @param addresses - The addresses to check staked ethereum balance for.\n   * @param networkClientId - Network Client ID to fetch the provider with.\n   * @returns The hex staked ethereum balance for address.\n   */\n  async getStakedBalanceForChain(\n    addresses: string[],\n    networkClientId?: NetworkClientId,\n  ): Promise<Record<string, StakedBalance>> {\n    const chainId = this.#getCorrectChainId(networkClientId);\n    const provider = this.#getCorrectProvider(networkClientId);\n\n    const balances = addresses.reduce<Record<string, StakedBalance>>(\n      (accumulator, address) => {\n        accumulator[address] = '0x00';\n        return accumulator;\n      },\n      {},\n    );\n\n    // Only fetch staked balance on supported networks\n    if (\n      ![\n        SupportedStakedBalanceNetworks.Mainnet,\n        SupportedStakedBalanceNetworks.Hoodi,\n      ].includes(chainId as SupportedStakedBalanceNetworks)\n    ) {\n      return {};\n    }\n    // Only fetch staked balance if contract address exists\n    if (\n      !((id): id is keyof typeof STAKING_CONTRACT_ADDRESS_BY_CHAINID =>\n        id in STAKING_CONTRACT_ADDRESS_BY_CHAINID)(chainId)\n    ) {\n      return {};\n    }\n\n    const contractAddress = STAKING_CONTRACT_ADDRESS_BY_CHAINID[chainId];\n    const abi = [\n      {\n        inputs: [{ internalType: 'address', name: 'account', type: 'address' }],\n        name: 'getShares',\n        outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n        stateMutability: 'view',\n        type: 'function',\n      },\n      {\n        inputs: [{ internalType: 'uint256', name: 'shares', type: 'uint256' }],\n        name: 'convertToAssets',\n        outputs: [{ internalType: 'uint256', name: 'assets', type: 'uint256' }],\n        stateMutability: 'view',\n        type: 'function',\n      },\n    ];\n\n    try {\n      const calls = addresses.map((address) => ({\n        contract: new Contract(contractAddress, abi, provider),\n        functionSignature: 'getShares(address)',\n        arguments: [address],\n      }));\n\n      const userShares = await multicallOrFallback(calls, chainId, provider);\n\n      const nonZeroCalls = userShares\n        .map((shares, index) => {\n          if (shares.success && (shares.value as BigNumber).gt(0)) {\n            return {\n              address: addresses[index],\n              call: {\n                contract: new Contract(contractAddress, abi, provider),\n                functionSignature: 'convertToAssets(uint256)',\n                arguments: [(shares.value as BigNumber).toString()],\n              },\n            };\n          }\n          return null;\n        })\n        .filter(Boolean) as { call: Call; address: string }[];\n\n      const nonZeroBalances = await multicallOrFallback(\n        nonZeroCalls.map((call) => call.call),\n        chainId,\n        provider,\n      );\n      nonZeroBalances.forEach((balance, index) => {\n        if (balance.success && balance.value) {\n          const { address } = nonZeroCalls[index];\n          balances[address] = (balance.value as BigNumber).toHexString();\n        }\n      });\n    } catch (error) {\n      // if we get an error, log and return the default value\n      console.error(error);\n    }\n\n    return balances;\n  }\n}\n\nexport default AssetsContractController;\n"]}