介绍
支持以太坊EVM协议的任意网络(github有合约代码,如果默认配置没有你的网络可以进行合约发布再将地址配置到工具中)
默认支持 ETH,BSC,HECO,MATIC
相对于传统multicall
-
传统multicall:有并发限制,不支持同时多链,不支持请求失败,每一次请求都发rpc
-
新插件:支持动态配置参数,支持超高并发,支持同时请求多条链,支持配置允许请求失败(合约处理报错),自动聚合多个请求发rpc
npm: https://www.npmjs.com/package/@chainstarter/multicall-client.js
github: https://github.com/ChainStarter/multicall-client.js
欢迎star
使用 下载npm i @chainstarter/multicall-client.js
config
import {config, ChainId} from "@chainstarter/multicall-client.js";
ChainId.rinkeby = 4
const multicallConfig = config(
{
defaultChainId: 1,
delay: 100,//debounce
timeout: 20000,//ms
maxCalls: 500,//Single request contains call
allowFailure: true,//The result structure is different
rpc: {
[ChainId.ETH]: {
url: '',// rpc url
address: '',//multicall2 address
},
[ChainId.rinkeby]: {
url: 'https://rinkeby.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161',
address: '0x5ba1e12693dc8f9c48aad8770482f4739beed696'
}
}
}
)
send calls
import {Contract, multicallClient} from "@chainstarter/multicall-client.js";
const contractBSC = new Contract(abi, address, ChainId.BSC);
const contractHECO = new Contract(abi, address, ChainId.HECO);
const contractETH = new Contract(abi, address, ChainId.ETH);
const calls = [
contractBSC.balanceOf(account),
contractHECO.balanceOf(account),
contractETH.balanceOf(account)
]
multicallClient(calls).then(result => {
// allowFailure = true
// result type = [[success, call1result], [success, call2result], [success, call3result]]
// allowFailure = false
// result type = [call1result, call2result, call3result]
})
multicall contract callData
import {multicallClient} from "@chainstarter/multicall-client.js";
multicallClient.getBlockInfo(ChainId.ETH).then(blockInfo =>{
// blockInfo: {number, difficulty, gasLimit, Timestamp, hash}
})
multicallClient.getEthBalance(account, ChainId.ETH).then(ethBalance =>{
})
multicallClient.getBlockHash(135484, ChainId.ETH).then(blockHash =>{
})