`

multicall

 
阅读更多
multicall的solidity调用与ethers.js调用
// contracts/Box.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

import "@openzeppelin/contracts/utils/Multicall.sol";
import "hardhat/console.sol";

contract TestMulticall {
    function testMulticall(address addr) external {
        MyMulticall myMulticall = MyMulticall(addr);
        bytes[] memory calls = new bytes[](2);
        calls[0] = abi.encodeWithSelector(MyMulticall.foo.selector);
        calls[1] = abi.encodeWithSelector(MyMulticall.bar.selector, 100);
        myMulticall.multicall(calls);
    }
}

contract MyMulticall is Multicall {
    function foo() view external {
        console.log("foo");
    }

    function bar(uint i) view external {
        console.log("bar",i);
    }
}


const { ethers } = require("hardhat")

contractName = "MyMulticall";
contractName2 = "TestMulticall";

describe(contractName, function () {
  it("test ", async function () {
    const Contract = await ethers.getContractFactory(contractName);
    const contract = await Contract.deploy();
    let interfaceFoo = new ethers.utils.Interface([
        "function foo()"
    ]);
    let dataFoo = interfaceFoo.encodeFunctionData("foo", [])
 
    let dataBar = new ethers.utils.Interface([
        "function bar(uint)"
    ]).encodeFunctionData("bar", [10]);

    await contract.multicall([
        dataFoo,
        dataBar
    ])

    const Contract2 = await ethers.getContractFactory(contractName2);
    const contract2 = await Contract2.deploy();
    await contract2.testMulticall(contract.address);
  });
});


  MyMulticall
foo
bar 10
foo
bar 100
分享到:
评论

相关推荐

    multicall.js:Multicall.js

    Multicall.js Multicall.js是一个轻量级JavaScript库,用于与智能合约进行交互。 多重调用允许将多个智能合约常量函数调用分组为单个调用,并将结果汇​​总为单个结果。 如果使用像Infura这样的远程节点,这将...

    multicall:用于静态多次调用的Solidity Contract和Typescript库

    @ indexed-finance / multicall 用于静态多次调用的Solidity Contract和Typescript库。 MultiCall.sol合同在其构造函数内执行多个调用,并将结果作为ABI编码的字节数组返回。 当初始化代码作为eth_call操作发送到0...

    multicall:多重通话

    多重通话 多调用聚合来自多个合同常量函数调用的结果。 这减少了需要发送的单独JSON RPC请求的数量(如果使用像Infura这样的远程节点,则特别有用),同时还保证返回的所有值都来自同一块(例如原子读取)并返回块...

    hardhat-multicall

    孟买的多方通话部署 这是一个将合同部署到孟买的安全帽项目。 部署 hardhat deploy --network mumbai

    网络编程第三版与18节Python代码

    Python网络编程第三版.pdf ├─chapter01 │ getname.py │ README.md ...│ xmlrpc_multicall.py │ xmlrpc_server.py │ └─tools │ run.sh │ two.sh │ └─monkeys _bootlocale.py

    3G的标准与原理相关资料

    93. MultiCALL与多方通话关系如何? 71 94. 综合预付费业务的主要功能和实现方式? 71 95. 预付费漫游怎样实现机制如何? 72 96. 移动智能网和固网智能网的主要区别? 72 97. 主要的3G智能网协议有那些? 72 98. 3G...

    lab-multicall

    学习多通话二进制文件(如BusyBox,CmdBox) 多重调用是一种使程序仅根据其名称执行不同的操作,并赋予其不同的副本和链接不同的名称的方法。 随着在现代最小型容器中的基本命令的普及,这种方法已引起的最多关注。...

    Wordpress-XMLRPC-Brute-Force-Exploit:Wordpress XMLRPC系统多方调用蛮力利用(0天)by 1N3 @ C​​rowdShield

    1N3的Wordpress XMLRPC System Multicall蛮力利用漏洞,最近更新:20170215 关于: 这是对Wordpress xmlrpc.php系统多重调用功能的一种利用,影响了最新版本的Wordpress(3.5.1)。 该漏洞利用通过向xmlrpc.php发送...

    C#委托实例简单分析与应用

    C#语言有很多值得学习的地方,这里我们主要介绍C#委托实例,包括介绍重复调用 SimpleDelegate 的 MultiCall 方法等方面。 委托适用于那种在某些其他语言中需用函数指针来解决的情况(场合)。但是,与函数指针不同,...

Global site tag (gtag.js) - Google Analytics