Multicall
將多個合約請求組合成一個 RPC 請求,其為一個代理合約。
https://github.com/makerdao/multicall
範例:
可參考他人封裝的模組,直接快速使用:
import {
Multicall,
ContractCallResults,
ContractCallContext,
} from 'ethereum-multicall';
import Web3 from 'web3';
const web3 = new Web3('https://some.local-or-remote.node:8546');
const multicall = new Multicall({ web3Instance: web3, tryAggregate: true });
const contractCallContext: ContractCallContext[] = [
{
reference: 'testContract',
contractAddress: '0x6795b15f3b16Cf8fB3E56499bbC07F6261e9b0C3',
abi: [ { name: 'foo', type: 'function', inputs: [ { name: 'example', type: 'uint256' } ], outputs: [ { name: 'amounts', type: 'uint256' }] } ],
calls: [{ reference: 'fooCall', methodName: 'foo', methodParameters: [42] }]
},
{
reference: 'testContract2',
contractAddress: '0x66BF8e2E890eA0392e158e77C6381b34E0771318',
abi: [ { name: 'fooTwo', type: 'function', inputs: [ { name: 'example', type: 'uint256' } ], outputs: [ { name: 'amounts', type: 'uint256', name: "path", "type": "address[]" }] } ],
calls: [{ reference: 'fooTwoCall', methodName: 'fooTwo', methodParameters: [42] }]
}
];
const results: ContractCallResults = await multicall.call(contractCallContext);
console.log(results);
Last updated