通常我們呼叫智能合約的 function 的時候都是一次性的呼叫,還記得如果每一次呼叫幾個動作
1.打包 → 2.消耗gas → 3. 礦工解析 → 區塊是否成功
而這些都是發生在我們網頁前端的操作產生了一連串的動作,想到這裡....
所以OpenZeppeline 提供了一個合約 Multicall 來解決這樣的情況
// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/utils/Multicall.sol";
contract Box is Multicall {
function foo() public {
...
}
function bar() public {
...
}
}
前端使用(這裡是用truffle 來建制)
const Box = artifacts.require('Box');
const instance = await Box.new();
await instance.multicall([
instance.contract.methods.foo().encodeABI(),
instance.contract.methods.bar().encodeABI()
]);
// 發現這次的呼叫是一次打包兩個事情,所以會在同一個區塊,不會分成兩個
由上面的範例我們可以知道,這樣把一定的事物流程打包成一個集合執行,其實都是有相對的好處的。
(後面想到補充)
有任何問題可反饋: [email protected]