github.com/0xPolygon/supernets2-node@v0.0.0-20230711153321-2fe574524eaa/test/contracts/auto/ChainCallLevel2.sol (about)

     1  // SPDX-License-Identifier: GPL-3.0
     2  pragma solidity >=0.7.0 <0.9.0;
     3  
     4  contract ChainCallLevel2 {
     5      function exec(address level3Addr, address level4Addr) public payable {
     6          bool ok;
     7          (ok, ) = level3Addr.call(abi.encodeWithSignature("exec(address)", level4Addr));
     8          require(ok, "failed to perform call to level 3");
     9  
    10          (ok, ) = level3Addr.delegatecall(abi.encodeWithSignature("exec(address)", level4Addr));
    11          require(ok, "failed to perform delegate call to level 3");
    12      }
    13  
    14      function get(address level3Addr, address level4Addr) public view returns (string memory t) {
    15          bool ok;
    16          bytes memory result;
    17          (ok, result) = level3Addr.staticcall(abi.encodeWithSignature("get(address)", level4Addr));
    18          require(ok, "failed to perform static call to level 3");
    19  
    20          t = abi.decode(result, (string));
    21  
    22          (ok, result) = level4Addr.staticcall(abi.encodeWithSignature("get()"));
    23          require(ok, "failed to perform static call to level 4 from level 2");
    24  
    25          t = abi.decode(result, (string));
    26      }
    27  }