Utilising the Ethereum Multi-call contract, this package helps engages with it by automatically flattening, encoding, decoding and un-flattening.
yarn add eth-multicall
Constructor params
import { MultiCall } from 'eth-multicall'
const web3 = new Web3(...)
const multiCallContract = '0x5Eb3fa2DFECdDe21C950813C665E9364fa609bD2'
const multicall = new MultiCall(web3, multiCallContract);
const addresses = [
"0x960b236A07cf122663c4303350609A66A7B288C0",
"0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c",
];
const tokens = addresses.map((address) => {
const token = new web3.eth.Contract(ABIERC20Token, address);
return {
symbol: token.methods.symbol(),
decimals: token.methods.decimals(),
};
});
const [tokensRes] = await multiCall.all([tokens]);
[
{
symbol: "ANT",
decimals: "18",
},
{
symbol: "BNT",
decimals: "18",
}
]
{
symbol: token.methods.symbol(),
decimals: token.methods.decimals(),
tokenAddress: 'originAddress'
}
=>
{
symbol: "ANT",
decimals: "18",
tokenAddress: "0x960b236A07cf122663c4303350609A66A7B288C0"
}
{
symbol: token.methods.symbol(),
decimals: token.methods.decimals(),
tokenAddress: 'originAddress'
foo: 'bar'
}
=>
{
symbol: "ANT",
decimals: "18",
tokenAddress: "0x960b236A07cf122663c4303350609A66A7B288C0",
foo: 'bar'
}
undefined
with no sign or indication of error.