@dahlia-labs/use-ethers
Version:
Multicall extensions to ethers.
16 lines • 960 B
JavaScript
import chunk from "lodash/chunk";
import MULTICALL_ABI from "./abis/multicall2.json";
import { MulticallAddress } from "./constants";
import { getContract } from "./contracts";
export const getMulticall = (provider, chain) => getContract(MulticallAddress[chain], MULTICALL_ABI, provider);
export async function fetchMulticalls(multicalls, multicallContract, maxChunk = 100) {
const data = await fetchCalls(multicalls.map((m) => m.call), multicallContract, maxChunk);
return data.map((v, i) => {
return multicalls[i].parseReturn(v);
});
}
export const fetchCalls = async (calls, multicallContract, maxChunk = 100) => {
const callChunks = chunk(calls, maxChunk);
return (await Promise.all(callChunks.map((c) => multicallContract === null || multicallContract === void 0 ? void 0 : multicallContract.callStatic.aggregate(c)))).flatMap((c) => c === null || c === void 0 ? void 0 : c.returnData);
};
//# sourceMappingURL=multicall.js.map