Siblearn Academy siblearn academy

Multi Call

نمونه ای از قرارداد که چندین پرس و جو را با استفاده از حلقه for و جمع می کند استاتیکی.

قرارداد برای آزمایش چند تماس


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract MultiCall {
    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 bytes[](data.length);

        for (uint256 i; i < targets.length; i++) {
            (bool success, bytes memory result) = targets[i].staticcall(data[i]);
            require(success, "call failed");
            results[i] = result;
        }

        return results;
    }
}
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

contract TestMultiCall {
    function test(uint256 _i) external pure returns (uint256) {
        return _i;
    }

    function getData(uint256 _i) external pure returns (bytes memory) {
        return abi.encodeWithSelector(this.test.selector, _i);
    }
}

روی محیط توسعه ی Remix امتحان بکنید

  • MultiCall.sol
  • TestMultiCall.sol
  • بازگشت به لیست