creation_sourcecode: {{
    "language": "Solidity",
    "sources": {
      "contracts/MultiRewardCall.sol": {
        "content": "// SPDX-License-Identifier: GPL-3.0-or-later\r\npragma solidity ^0.8.20;\r\n\r\ncontract MultiRewardCall {\r\n    struct Call {\r\n        address target;\r\n        bytes callData;\r\n    }\r\n\r\n    /// @notice Claim multiple rewards\r\n    /// @param calls An array of Call structs\r\n    /// @return blockNumber The block number where the calls were executed\r\n    /// @return returnData An array of bytes containing the responses\r\n    function claim(Call[] calldata calls) public payable returns (uint256 blockNumber, bytes[] memory returnData) {\r\n        blockNumber = block.number;\r\n        uint256 length = calls.length;\r\n        returnData = new bytes[](length);\r\n        Call calldata call;\r\n        for (uint256 i = 0; i < length;) {\r\n            bool success;\r\n            call = calls[i];\r\n            (success, returnData[i]) = call.target.call(call.callData);\r\n            require(success, \"MultiRewardCall: call failed\");\r\n            unchecked {\r\n                ++i;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "evmVersion": "paris",
      "outputSelection": {
        "*": {
          "*": [
            "evm.bytecode",
            "evm.deployedBytecode",
            "devdoc",
            "userdoc",
            "metadata",
            "abi"
          ]
        }
      },
      "libraries": {}
    }
  }}