Socket
Book a DemoInstallSign in
Socket

@morpho-labs/ethers-multicall

Package Overview
Dependencies
Maintainers
4
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@morpho-labs/ethers-multicall

⚡🚀 Call multiple view functions, from multiple Smart Contracts, in a single RPC query!

latest
Source
npmnpm
Version
3.0.4
Version published
Weekly downloads
220
2.8%
Maintainers
4
Weekly downloads
 
Created
Source

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

Keywords

ethers

FAQs

Package last updated on 21 Feb 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts