ReactorHelper

Description:

Smart contract deployed on Ethereum with Factory features.

Blockchain: Ethereum

Source Code: View Code On The Blockchain

Solidity Source Code:

{{
  "language": "Solidity",
  "sources": {
    "contracts/interfaces/IReactorHelper.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.28;

struct ReactorParameter {
    string name;
    string value;
}

struct ReactorWebRequest {
    string method;
    string url;
    string body;
    ReactorParameter[] headers;
}

interface IReactorHelper {
    function decodeGenerateRandomNumbersRequestData(bytes memory _payload) external returns (uint256);
    function decodeGenerateRandomNumbersResponseData(bytes memory _payload) external returns (uint256[] memory);
    function decodePayloadAndReactorParameters(bytes memory _payload) external pure returns (bytes memory, ReactorParameter[] memory);
    function decodePayloadAndStringParameters(bytes memory _payload) external pure returns (bytes memory, string[] memory, string[] memory);
    function decodeWebRequestAndReactorParameters(bytes memory _payload) external pure returns (string memory, string memory, string memory, ReactorParameter[] memory);
    function decodeWebRequestAndStringParameters(bytes memory _payload) external pure returns (string memory, string memory, string memory, string[] memory, string[] memory);
    function decodeWebRequestData(bytes memory _payload) external pure returns (string memory,string memory, string memory);
    function decodeWebResponseData(bytes memory _payload) external pure returns (uint256, string memory, string[] memory, string[] memory);
    function encodeGenerateRandomNumbersRequestAndStringParameters(uint256 _number_of_randoms_to_create, string[] memory _parameterNames, string[] memory _parameterValues) external returns(bytes memory);
    function encodeGenerateRandomNumbersRequestData(uint256 _number_of_randoms_to_create) external returns(bytes memory);
    function encodePayloadAndReactorParameters(bytes memory _payload, ReactorParameter[] memory _parameters) external pure returns(bytes memory);
    function encodePayloadAndStringParameters(bytes memory _payload, string[] memory _parameterNames, string[] memory _parameterValues) external pure returns(bytes memory);
    function encodeWebRequestAndReactorParameters(string calldata _method, string calldata _url, string calldata _body, ReactorParameter[] memory _headers, ReactorParameter[] memory _parameters) external pure returns(bytes memory);
    function encodeWebRequestAndStringParameters(string calldata _method, string calldata _url, string calldata _body, string[] memory _headerNames, string[] memory _headerValues, string[] memory _parameterNames, string[] memory _parameterValues) external pure returns(bytes memory);
    function encodeWebRequestData(string calldata _method, string calldata _url, string calldata _body) external pure returns(bytes memory);
    function encodeWebRequestFromReactorWebRequest(ReactorWebRequest calldata _request, ReactorParameter[] calldata _parameters) external pure returns(bytes memory);
}"
    },
    "contracts/ReactorHelper.sol": {
      "content": "// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.28;

import {IReactorHelper, ReactorWebRequest, ReactorParameter} from "./interfaces/IReactorHelper.sol";

contract ReactorHelper is IReactorHelper
{
    function decodePayloadAndStringParameters(bytes memory _payload) public pure returns (bytes memory, string[] memory, string[] memory)
    {
        return abi.decode(_payload, (bytes, string[], string[]));
    }
    
    function decodePayloadAndReactorParameters(bytes memory _payload) public pure returns (bytes memory, ReactorParameter[] memory)
    {
        (bytes memory payload, string[] memory parameterNames, string[] memory parameterValues) = decodePayloadAndStringParameters(_payload);
        require(parameterNames.length == parameterValues.length, "Parameter name and value lengths must match");
        
        ReactorParameter[] memory parameters = new ReactorParameter[](parameterNames.length);
        for (uint256 i = 0; i < parameterNames.length; i++ ) {
            require(bytes(parameterNames[i]).length > 0, "Empty parameter name");
            require(bytes(parameterValues[i]).length > 0, "Empty parameter value");
            
            parameters[i] = ReactorParameter({name: parameterNames[i], value: parameterValues[i]});
        }
        
        return (payload, parameters);
    }
    
    function decodeWebRequestAndStringParameters(bytes memory _payload) public pure returns (string memory, string memory, string memory, string[] memory, string[] memory)
    {
        (bytes memory payload, string[] memory parameterNames, string[] memory parameterValues) = decodePayloadAndStringParameters(_payload);
        (string memory method, string memory url, string memory body) = abi.decode(payload, (string, string, string));
        return (method, url, body, parameterNames, parameterValues);
    }
    
    function decodeWebRequestAndReactorParameters(bytes memory _payload) public pure returns (string memory, string memory, string memory, ReactorParameter[] memory)
    {
        (bytes memory payload, ReactorParameter[] memory parameters) = decodePayloadAndReactorParameters(_payload);
        (string memory method, string memory url, string memory body) = abi.decode(payload, (string, string, string));
        return (method, url, body, parameters);
    }
    
    function decodeWebRequestData(bytes memory _payload) public pure returns (string memory,string memory, string memory)
    {
        return abi.decode(_payload, (string, string, string));
    }
    
    function decodeGenerateRandomNumbersResponseData(bytes memory _payload) public pure returns (uint256[] memory)
    {
        return abi.decode(_payload, (uint256[]));
    }
    
    function decodeGenerateRandomNumbersRequestData(bytes memory _payload) public pure returns (uint256)
    {
        return abi.decode(_payload, (uint256));
    }
    
    function decodeWebResponseData(bytes memory _payload) public pure returns (uint256, string memory, string[] memory, string[] memory)
    {
        return abi.decode(_payload, (uint256, string, string[], string[]));
    }
    
    function encodePayloadAndStringParameters(bytes memory _payload, string[] memory _parameterNames, string[] memory _parameterValues) public pure returns(bytes memory)
    {
        require(_parameterNames.length == _parameterValues.length, "Parameter name and value lengths must match");

        for (uint256 i = 0; i < _parameterNames.length; i++ ) {
            require(bytes(_parameterNames[i]).length > 0, "Empty parameter name");
            require(bytes(_parameterValues[i]).length > 0, "Empty parameter value");
        }

        return abi.encode(_payload, _parameterNames, _parameterValues);
    }
    
    function encodePayloadAndReactorParameters(bytes memory _payload, ReactorParameter[] memory _parameters) public pure returns(bytes memory)
    {
        string[] memory parameterNames = new string[](_parameters.length);
        string[] memory parameterValues = new string[](_parameters.length);
        for (uint256 i = 0; i < parameterNames.length; i++ ) {
            parameterNames[i] = _parameters[i].name;
            parameterValues[i] = _parameters[i].value;
        }

        return encodePayloadAndStringParameters(_payload, parameterNames, parameterValues);
    }
    
    function encodeWebRequestAndStringParameters(string calldata _method, string calldata _url, string calldata _body, string[] memory _headerNames, string[] memory _headerValues, string[] memory _parameterNames, string[] memory _parameterValues) public pure returns(bytes memory)
    {
        require(_headerNames.length == _headerValues.length, "Header name and value lengths must match");
        require(_parameterNames.length == _parameterValues.length, "Parameter name and value lengths must match");
        
        uint256 parameterListLength = _headerNames.length + _parameterNames.length;
        string[] memory parameterNames = new string[](parameterListLength);
        string[] memory parameterValues = new string[](parameterListLength);
        
        for (uint256 i = 0; i < _headerNames.length; i++ ) {
            parameterNames[i] = string.concat("header.", _headerNames[i]);
            parameterValues[i] = _headerValues[i];
        }
        
        for (uint256 j = 0; j < _parameterNames.length; j++ ) {
            parameterNames[j + _headerNames.length] = _parameterNames[j];
            parameterValues[j + _headerNames.length] = _parameterValues[j];
        }
        
        return encodePayloadAndStringParameters(encodeWebRequestData(_method, _url, _body), parameterNames, parameterValues);
    }
    
    function encodeWebRequestAndReactorParameters(string calldata _method, string calldata _url, string calldata _body, ReactorParameter[] memory _headers, ReactorParameter[] memory _parameters) public pure returns(bytes memory)
    {
        string[] memory headerNames = new string[](_headers.length);
        string[] memory headerValues = new string[](_headers.length);
        for (uint256 i = 0; i < _headers.length; i++ ) {
            headerNames[i] = _headers[i].name;
            headerValues[i] = _headers[i].value;
        }
        
        string[] memory parameterNames = new string[](_parameters.length);
        string[] memory parameterValues = new string[](_parameters.length);
        for (uint256 j = 0; j < parameterNames.length; j++ ) {
            parameterNames[j] = _parameters[j].name;
            parameterValues[j] = _parameters[j].value;
        }
        
        return encodeWebRequestAndStringParameters(_method, _url, _body, headerNames, headerValues, parameterNames, parameterValues);
    }
    
    function encodeWebRequestFromReactorWebRequest(ReactorWebRequest calldata _request, ReactorParameter[] calldata _parameters) public pure returns(bytes memory)
    {
        return encodeWebRequestAndReactorParameters(_request.method, _request.url, _request.body, _request.headers, _parameters);
    }
    
    function encodeWebRequestData(string calldata _method, string calldata _url, string calldata _body) public pure returns(bytes memory)
    {
        require(bytes(_method).length > 0, "Empty method");
        require(bytes(_url).length > 0, "Empty url");
        
        return abi.encode(_method, _url, _body);
    }
    
    function encodeGenerateRandomNumbersRequestAndStringParameters(uint256 _number_of_randoms_to_create, string[] memory _parameterNames, string[] memory _parameterValues) public pure returns(bytes memory)
    {
        require(_parameterNames.length == _parameterValues.length, "Parameter name and value lengths must match");
        
        return encodePayloadAndStringParameters(encodeGenerateRandomNumbersRequestData(_number_of_randoms_to_create), _parameterNames, _parameterValues);
    }
    
    function encodeGenerateRandomNumbersRequestAndReactorParameters(uint256 _number_of_randoms_to_create, ReactorParameter[] memory _parameters) public pure returns(bytes memory)
    {
        string[] memory parameterNames = new string[](_parameters.length);
        string[] memory parameterValues = new string[](_parameters.length);
        for (uint256 i = 0; i < parameterNames.length; i++ ) {
            parameterNames[i] = _parameters[i].name;
            parameterValues[i] = _parameters[i].value;
        }
        
        return encodeGenerateRandomNumbersRequestAndStringParameters(_number_of_randoms_to_create, parameterNames, parameterValues);
    }
    
    function encodeGenerateRandomNumbersRequestData(uint256 _number_of_randoms_to_create) public pure returns(bytes memory)
    {
        require(_number_of_randoms_to_create > 0, "Number of randoms to create must be greater than zero");
        
        return abi.encode(_number_of_randoms_to_create);
    }
    
    receive() external payable {}
    fallback() external payable {}
}
"
    }
  },
  "settings": {
    "optimizer": {
      "enabled": true,
      "runs": 10000
    },
    "viaIR": true,
    "evmVersion": "paris",
    "outputSelection": {
      "*": {
        "*": [
          "evm.bytecode",
          "evm.deployedBytecode",
          "devdoc",
          "userdoc",
          "metadata",
          "abi"
        ]
      }
    }
  }
}}

Tags:
Factory|addr:0xeeb5a37aa5e5af9b8cb9021f1d8d8ed12086fc32|verified:true|block:23678405|tx:0x4f1554aeee69c80a65de4893d0015ac79bbf06d32edcc41d905e5cf85146f022|first_check:1761726051

Submitted on: 2025-10-29 09:20:52

Comments

Log in to comment.

No comments yet.