ethers-multicall-provider-fork-lumi
TypeScript icon, indicating that this package has built-in type declarations

3.1.5 • Public • Published

ethers-multicall-provider

npm package Build Status Downloads Issues Commitizen Friendly Semantic Release

⚡🚀 Call any set of functions from any set of smart contracts in a single RPC query, seamlessly using ethers' providers API!

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!

  • Integrates both Multicall2 & Multicall3, enabling faster queries up to block #12_336_033 on mainnet
  • Natively supports 25+ EVM-compatible chains on which Multicall3 & Multicall2 are deployed
  • Enables 10x faster off-chain data queries, making UIs faster to render and reload
  • Built-in support for blockTag-specific contract calls, batching all calls made at the same block tag (if applicable)
  • Only fails specific failing smart contract calls when batching, which makes debugging as easy as with native ethers

ethers-multicall-provider is a drop-in solution batching ALL smart contract calls!

-  const provider = getDefaultProvider("...");
+  const provider = MulticallWrapper.wrap(getDefaultProvider("..."));

Installation

npm install ethers-multicall-provider
yarn add ethers-multicall-provider

Usage

Wrap any ethers provider using MulticallWrapper.wrap and use the wrapped provider anywhere you want to batch calls!

import { ethers } from "ethers";
import { MulticallWrapper } from "ethers-multicall-provider";

const provider = MulticallWrapper.wrap(getDefaultProvider("..."));

MulticallWrapper.isMulticallProvider(provider); // Returns true, only useful for type safety.

let uni = new ethers.Contract("0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", UniAbi, provider);

// Calls performed simultaneously are automatically batched when using the multicall provider.
Promise.all([
  uni.name(),
  uni.symbol(),
  uni.decimals(),
  uni.inexistantFunction().catch(() => "default value"),
]).then(console.log);

// When batching calls is no longer expected, just disable it.
provider.isMulticallEnabled = false;

// Calls performed simultaneously will still perform 2 separate on-chain calls.
Promise.all([uni.name(), uni.symbol()]).then(console.log);

Limits

Because calls are batched through the Multicall contract, all calls will inherently have the Multicall contract as msg.sender. This has no impact on most queries, because most of the time msg.sender is not used in view functions ; but it may introduce unexpected behaviors in specific smart contracts.

To circumvent this, just use the default ethers provider in places where you don't want msg.sender to be overriden.

Package Sidebar

Install

npm i ethers-multicall-provider-fork-lumi

Weekly Downloads

3

Version

3.1.5

License

MIT

Unpacked Size

106 kB

Total Files

29

Last publish

Collaborators

  • 0xsodium1