@morpho-labs/ethers-multicall
TypeScript icon, indicating that this package has built-in type declarations

3.0.4Β β€’Β PublicΒ β€’Β Published

ethers-multicall

npm package Build Status Downloads Issues Commitizen Friendly Semantic Release

βš‘πŸš€ Call multiple view functions, from multiple Smart Contracts, in a single RPC query!

Querying an RPC endpoint can be very costly (100+ queries) when loading data from multiple smart contracts. With multicall, batch these queries into a single, on-chain query, without additional over-head!

This is the standalone package of the library formerly created & used by Zapper.

Install

npm install @morpho-labs/ethers-multicall
yarn add @morpho-labs/ethers-multicall

Usage

import { ethers } from "ethers";

import { EthersMulticall } from "@morpho-labs/ethers-multicall";

const provider = new ethers.providers.JsonRpcBatchProvider("...");
const multicall = new EthersMulticall(provider);

const uni = multicall.wrap(
  new ethers.Contract("0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", UniswapAbi)
); // make sure to always wrap contracts to benefit from multicalls

Promise.all([uni.name(), uni.symbol(), uni.decimals()]).then(console.log);

Limitations

  • When performing calls in parallel, a single incorrect call may revert and make the aggregated call to the Multicall contract revert ; effectively throwing multiple errors in your code. The following example illustrates this limitation:
const performCall = async (address: string) => {
  const erc20 = await multicall.wrap(new ethers.Contract(address, ERC20Abi));

  try {
    const symbol = await erc20.symbol();
  } catch {
    return console.error("An error occurred while fetching the symbol of token:", address);
  }
};

Promise.all(
  [
    "0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd", // valid GUSD token address
    "0x0000000000000000000000000000000000000000", // invalid ERC20 token address
  ].map(performCall)
);

// prints 2 errors:
// An error occurred while fetching the symbol of token: 0x056Fd409E1d7A124BD7017459dFEa2F387b6d5Cd
// An error occurred while fetching the symbol of token: 0x0000000000000000000000000000000000000000

Package Sidebar

Install

npm i @morpho-labs/ethers-multicall

Weekly Downloads

20

Version

3.0.4

License

MIT

Unpacked Size

52.3 kB

Total Files

17

Last publish

Collaborators

  • merlin-egalite
  • julien-devatom
  • mathisgd
  • rubilmax