通常我們呼叫智能合約的 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()
]);
// 發現這次的呼叫是一次打包兩個事情,所以會在同一個區塊,不會分成兩個

由上面的範例我們可以知道,這樣把一定的事物流程打包成一個集合執行,其實都是有相對的好處的。

(後面想到補充)

13. Utils-其它

有任何問題可反饋: [email protected]