# 多次调用合约

By [web3zoom](https://paragraph.com/@web3zoom) · 2025-07-22

---

### **多重调用**

`多重调用`

实现的效果是同一个合约地址在tong'yi

    // SPDX-License-Identifier: GPL-3.0
    
    pragma solidity ^0.8.30;
    
    contract TestMultiCall {
    
        function func1() external view returns(uint, uint){
            return (1, block.timestamp);
        }
    
        function func2() external view returns(uint, uint){
            return (2, block.timestamp);
        }
    
        function getData1() external pure returns (bytes memory){
            return abi.encodeWithSelector(this.func1.selector);
        }
    
        function getData2() external pure returns (bytes memory){
            return abi.encodeWithSelector(this.func2.selector);
        }
    }
    
    contract MultiCall{
        // 保证调用 TestMultiCall的调用方是同一时间获取数据，保证数据一致性
        function multiCall(address[] calldata targets, bytes[] calldata data) 
            external 
            view 
            returns(bytes[] memory)
        {
            require(targets.length == data.length, "target length != data length");
            bytes[] memory results = new bytesUnsupported embed;
    
            for(uint i; i < targets.length; i++){
                (bool success, bytes memory result) = targets[i].staticcall(data[i]);
                require(success, "call failed");
                results[i] = result;
            }
            return results;
        }
    }

---

*Originally published on [web3zoom](https://paragraph.com/@web3zoom/wJNwpO4ATY2OzFSvQq1n)*
