`

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这样的远程节点,这将...

    hardhat-multicall

    "hardhat-multicall" 是一个专为智能合约部署设计的工具,主要应用于以太坊的孟买测试网络。在区块链开发中,Hardhat 是一个强大的开发环境,它提供了编译、部署、测试和调试智能合约的一系列功能。在这个特定的项目...

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

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

    multicall:多重通话

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

    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#委托实例,尤其是关于`SimpleDelegate`的使用和`MultiCall`方法的重复调用。 首先,我们要了解什么是委托。在C#中,委托是一个类,它继承自`System.Delegate`,用于封装一个或多个具有相同签名的...

    Python基于xmlrpc的webservice服务以及在odoo中的使用

    multicall = xmlrpc.client.MultiCall(server) try: multicall.division(2, 5) multicall.add(2, 0) result = multicall() print(type(result)) print("2/5=%d, 2+0=%d" % tuple(result)) except xmlrpc....

    xmlrpc 导入的Lib

    - `MultiCall`: 支持一次发送多个XMLRPC调用,将它们打包到单个HTTP请求中,提高效率。 2. **xmlrpc.server** - `SimpleXMLRPCServer`: 简单的XMLRPC服务器实现,适用于快速搭建测试环境或简单的生产环境。 - `...

    人工智能-项目实践-数据预处理-java后台 预处理 solidity数据,签名,验证,查询,ens解析

    java后台 预处理 solidity数据,签名,验证,查询,ens解析

    网络编程第三版与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) 多重调用是一种使程序仅根据其名称执行不同的操作,并赋予其不同的副本和链接不同的名称的方法。 随着在现代最小型容器中的基本命令的普及,这种方法已引起的最多关注。...

    使用XML库的方式,实现RPC通信的方法(推荐)

    2. 注册一些辅助函数,如`register_introspection_functions()`用于提供服务器的元数据,`register_multicall_functions()`支持批量调用。 3. 注册实际的RPC服务函数,如`addtogether`、`quadratic`和`remote_repr`...

Global site tag (gtag.js) - Google Analytics