UNPKG

witnet-solidity-bridge

Version:

Witnet Solidity Bridge contracts for EVM-compatible chains

890 lines 300 kB
{ "contractName": "WitOracleRadonRequestFactoryTemplates", "abi": [ { "inputs": [], "name": "InvalidInitialization", "type": "error" }, { "inputs": [], "name": "NotInitializing", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "by", "type": "address" }, { "indexed": true, "internalType": "address", "name": "master", "type": "address" }, { "indexed": true, "internalType": "address", "name": "clone", "type": "address" } ], "name": "Cloned", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint64", "name": "version", "type": "uint64" } ], "name": "Initialized", "type": "event" }, { "inputs": [], "name": "base", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "class", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cloned", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "witOracle", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "specs", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_dataRetrieveHashes", "type": "bytes32[]" }, { "internalType": "bytes15", "name": "_dataSourcesAggregatorHash", "type": "bytes15" }, { "internalType": "bytes15", "name": "_crowdAttestationTallyHash", "type": "bytes15" } ], "name": "buildRadonRequestTemplate", "outputs": [ { "internalType": "contract IWitOracleRadonRequestTemplate", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_dataRetrieveHashes", "type": "bytes32[]" }, { "internalType": "bytes15", "name": "_dataSourcesAggregatorHash", "type": "bytes15" }, { "internalType": "bytes15", "name": "_crowdAttestationTallyHash", "type": "bytes15" } ], "name": "determineAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "_dataRetrieveHashes", "type": "bytes32[]" }, { "internalType": "bytes15", "name": "_dataSourcesAggregatorHash", "type": "bytes15" }, { "internalType": "bytes15", "name": "_crowdAttestationTallyHash", "type": "bytes15" } ], "name": "initialize", "outputs": [ { "internalType": "contract IWitOracleRadonRequestTemplate", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "initialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getArgsCount", "outputs": [ { "internalType": "uint8[]", "name": "", "type": "uint8[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getCrowdAttestationTally", "outputs": [ { "components": [ { "internalType": "enum Witnet.RadonReduceOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDataResultType", "outputs": [ { "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDataSources", "outputs": [ { "components": [ { "internalType": "uint8", "name": "argsCount", "type": "uint8" }, { "internalType": "enum Witnet.RadonRetrievalMethods", "name": "method", "type": "uint8" }, { "internalType": "enum Witnet.RadonDataTypes", "name": "dataType", "type": "uint8" }, { "internalType": "string", "name": "url", "type": "string" }, { "internalType": "string", "name": "body", "type": "string" }, { "internalType": "string[2][]", "name": "headers", "type": "string[2][]" }, { "internalType": "bytes", "name": "radonScript", "type": "bytes" } ], "internalType": "struct Witnet.RadonRetrieval[]", "name": "_dataSources", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDataSourcesAggregator", "outputs": [ { "components": [ { "internalType": "enum Witnet.RadonReduceOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, { "internalType": "bytes", "name": "cborArgs", "type": "bytes" } ], "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" } ], "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string[][]", "name": "args", "type": "string[][]" } ], "name": "verifyRadonRequest", "outputs": [ { "internalType": "Witnet.RadonHash", "name": "", "type": "bytes32" } ], "stateMutability": "nonpayable", "type": "function" } ], "metadata": "{\"compiler\":{\"version\":\"0.8.30+commit.73712a01\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"by\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"master\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"clone\",\"type\":\"address\"}],\"name\":\"Cloned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"base\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_dataRetrieveHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes15\",\"name\":\"_dataSourcesAggregatorHash\",\"type\":\"bytes15\"},{\"internalType\":\"bytes15\",\"name\":\"_crowdAttestationTallyHash\",\"type\":\"bytes15\"}],\"name\":\"buildRadonRequestTemplate\",\"outputs\":[{\"internalType\":\"contract IWitOracleRadonRequestTemplate\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"class\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"cloned\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_dataRetrieveHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes15\",\"name\":\"_dataSourcesAggregatorHash\",\"type\":\"bytes15\"},{\"internalType\":\"bytes15\",\"name\":\"_crowdAttestationTallyHash\",\"type\":\"bytes15\"}],\"name\":\"determineAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getArgsCount\",\"outputs\":[{\"internalType\":\"uint8[]\",\"name\":\"\",\"type\":\"uint8[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCrowdAttestationTally\",\"outputs\":[{\"components\":[{\"internalType\":\"enum Witnet.RadonReduceOpcodes\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enum Witnet.RadonFilterOpcodes\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"cborArgs\",\"type\":\"bytes\"}],\"internalType\":\"struct Witnet.RadonFilter[]\",\"name\":\"filters\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Witnet.RadonReducer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataResultType\",\"outputs\":[{\"internalType\":\"enum Witnet.RadonDataTypes\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataSources\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"argsCount\",\"type\":\"uint8\"},{\"internalType\":\"enum Witnet.RadonRetrievalMethods\",\"name\":\"method\",\"type\":\"uint8\"},{\"internalType\":\"enum Witnet.RadonDataTypes\",\"name\":\"dataType\",\"type\":\"uint8\"},{\"internalType\":\"string\",\"name\":\"url\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"body\",\"type\":\"string\"},{\"internalType\":\"string[2][]\",\"name\":\"headers\",\"type\":\"string[2][]\"},{\"internalType\":\"bytes\",\"name\":\"radonScript\",\"type\":\"bytes\"}],\"internalType\":\"struct Witnet.RadonRetrieval[]\",\"name\":\"_dataSources\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDataSourcesAggregator\",\"outputs\":[{\"components\":[{\"internalType\":\"enum Witnet.RadonReduceOpcodes\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enum Witnet.RadonFilterOpcodes\",\"name\":\"opcode\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"cborArgs\",\"type\":\"bytes\"}],\"internalType\":\"struct Witnet.RadonFilter[]\",\"name\":\"filters\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Witnet.RadonReducer\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"_dataRetrieveHashes\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes15\",\"name\":\"_dataSourcesAggregatorHash\",\"type\":\"bytes15\"},{\"internalType\":\"bytes15\",\"name\":\"_crowdAttestationTallyHash\",\"type\":\"bytes15\"}],\"name\":\"initialize\",\"outputs\":[{\"internalType\":\"contract IWitOracleRadonRequestTemplate\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"specs\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string[][]\",\"name\":\"args\",\"type\":\"string[][]\"}],\"name\":\"verifyRadonRequest\",\"outputs\":[{\"internalType\":\"Witnet.RadonHash\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"witOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{\"verifyRadonRequest(string[][])\":{\"details\":\"This method requires less gas than buildWitOracleRequest(string[][]), and it's usually preferred when data requests built out of this templateare intended to be used just once in lifetime. \"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"class()\":{\"notice\":\"Returns the name of the actual contract implementing the logic of this Witnet appliance.\"},\"cloned()\":{\"notice\":\"Tells whether this contract is a clone of `self()`\"},\"getArgsCount()\":{\"notice\":\"=============================================================================================================== --- IWitOracleRadonRequestTemplate -------------------------------------------------------------------------------\"},\"initialized()\":{\"notice\":\"Tells whether a WitOracleRequest or a WitOracleRequestTemplate has been properly initialized.\"},\"specs()\":{\"notice\":\"Returns the ERC-165 id of the minimal functionality expected for this appliance.\"},\"verifyRadonRequest(string[][])\":{\"notice\":\"Verifies into the bounded WitOracle's registry the actual bytecode and RAD hash of the Witnet-compliant Radon Request that gets provably made out of the data sources, aggregate and tally Radon Reducers that compose this WitOracleRequestTemplate. While no WitOracleRequest instance is actually constructed, the returned value will be accepted as a valid RAD hash on the witOracle() contract from now on. Reverts if: - the ranks of passed array don't match either the number of this template's data sources, or the number of required parameters by each one of those.\"},\"witOracle()\":{\"notice\":\"Reference to the Witnet Request Board that all templates built out from this factory will refer to.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/base/WitOracleRadonRequestFactoryTemplates.sol\":\"WitOracleRadonRequestFactoryTemplates\"},\"evmVersion\":\"prague\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xdb4d24ee2c087c391d587cd17adfe5b3f9d93b3110b1388c2ab6c7c0ad1dcd05\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ab7b6d5b9e2b88176312967fe0f0e78f3d9a1422fa5e4b64e2440c35869b5d08\",\"dweb:/ipfs/QmXKYWWyzcLg1B2k7Sb1qkEXgLCYfXecR9wYW5obRzWP1Q\"]},\"project:/contracts/core/base/WitOracleRadonRequestFactoryTemplates.sol\":{\"keccak256\":\"0xdfc8a2e736235013ed360e647654ddba7727e0ba8bfb9ab9e15290b1caedadb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8bfc613a66d495a183134f587ccc3bdf8f99bd6ea35d5ba9dbcb407946d04ee7\",\"dweb:/ipfs/QmV1STny9ttBdQXkXyyZq8uYwUgDDpKzAxddjSbjX4zBS9\"]},\"project:/contracts/interfaces/IWitAppliance.sol\":{\"keccak256\":\"0xd207ca54a1049445a3d99eea497d9b34c6dbdd44d771eee825e4c031bd2f447e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f81de32d868ff2881ed6fe97cc897e40b4b11d23cbe53a0e23cf3e68f9c0f0a3\",\"dweb:/ipfs/QmeeXmzmK5MAzt7Hf5DB2L81efKtTzZg9VbQ8sUiTqEk5c\"]},\"project:/contracts/interfaces/IWitOracle.sol\":{\"keccak256\":\"0x26cbe2074c0b3f545a46d95fad5e2280b67edcd958e4ae0b88f3a018aa11b805\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5324bac61f65e3edb01c88b9b75ca17affd593be88da5753a93b3f5304d3f479\",\"dweb:/ipfs/QmcVmNV6smbFiPaxvuN8ShkqbDZsT1wfjnF7f3qs6ke7QG\"]},\"project:/contracts/interfaces/IWitOracleAppliance.sol\":{\"keccak256\":\"0xcd8e57eca7f8042c85a83264e2ff6d1cd7a9f1521831736d7f57bcc7800642e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5c639668e9439d60770b5df77436088ae7bd0aeb1d1be446552a98b6c29138f0\",\"dweb:/ipfs/QmbN3f5YuKMSd2j9tjay3VEkiYibGWpbfbwRNyrxA8k4o4\"]},\"project:/contracts/interfaces/IWitOracleRadonRegistry.sol\":{\"keccak256\":\"0x437bbb89129311bd1cc8f6becd333df46109ec53b24d3159be942b225614071f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef9bcdf4a73cb126885478c994821b7fe2b87d9221b767b4c9342b89b0d6550a\",\"dweb:/ipfs/QmXzZXPMxjSiFpcEnhg6CjLFNxGCpDZt22xpUh7VHxNTGd\"]},\"project:/contracts/interfaces/IWitOracleRadonRequestTemplate.sol\":{\"keccak256\":\"0xb3f8ec0cbd9cde19348cfd5f51480fb1a0ffe479bf38043ec385f9b4ef1a53f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90fa841ff07d95c96d2c0d0423845a49280fbbf287d3b00b56dfda8c7c8ea15c\",\"dweb:/ipfs/QmfD7cP4V4kuFjeNdXC8tDyrEJCbTAHCenJ7sC7f6cfxvP\"]},\"project:/contracts/libs/Bech32.sol\":{\"keccak256\":\"0x14618323a0efe7586c20906a2e9cee7ad63baa976ff231c57f7f2d7d3707fb8b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a19f05fe84047a7a6d3d6fc39972b432e6e536aa70472386a9d7a6d9aab64a64\",\"dweb:/ipfs/QmcHwUY66yjiotRH4Q3kbRvSzcHyLQ1yHL3KbtQKiMhtZE\"]},\"project:/contracts/libs/Secp256k1.sol\":{\"keccak256\":\"0xbe686002da5004ff39dd70709f3820eba2afe9323ae9cb894009c161e4b1a666\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18fab91775216de0707cea9ad285b10be09127461a13432fea358bf9cb2a0c2e\",\"dweb:/ipfs/QmeRUGsgstnM4hxM9hpkBf3L6cE5btirEaowcMxmuw3utj\"]},\"project:/contracts/libs/Witnet.sol\":{\"keccak256\":\"0x1d446c3e534e40e676d1763bfb2897fadfac8afed904ab757843d7d6770b0a6c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://338fb1073f17d64e8d31bfe492d9475ce906788ee08e6489ce30413f91dc1328\",\"dweb:/ipfs/QmPe5QX2AGTnQFjse1Xttq4ZYWwYAiXoySb5VUui3PqPhk\"]},\"project:/contracts/libs/WitnetBuffer.sol\":{\"keccak256\":\"0x8e07aebe2954ab3e6f2d8eceedb12db7cf915c1f3e8630f4fa9999cecb1c78ec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed6c54cc901183d61546e8fd15bd5ea8ef238ebc915642946071d435dd7481ea\",\"dweb:/ipfs/Qmcaqta7YjUSBbBUGqoh44bsCS6UqqoyHjBuz4qnKBShXM\"]},\"project:/contracts/libs/WitnetCBOR.sol\":{\"keccak256\":\"0xd99308373575cc10fb7f2ceb0f6a8625f3911275c1fa27811fae498d98d03d97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b4909a999d7b660a2dc54ca957b6eccfa523e2765fc4d6a2574dee7d5cd67b43\",\"dweb:/ipfs/QmWGQT4KDcfSFe1hcHVoWx6E4PhYMaod5iLpJCWBEeShzh\"]},\"project:/contracts/patterns/Clonable.sol\":{\"keccak256\":\"0x9a2dbc814306f60263fe736b88aeabc44fc241d3bed132e8dd76a3684dd825f7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e665de5be06c9227c49f9466d24f798d4bed1a2db66d4d1368dcd9fc663c1b3a\",\"dweb:/ipfs/QmRjY2CHTGp1eyi9XPeTKr4WnPCzXbtk2285kdy2bJVCYA\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]}},\"version\":1}", "bytecode": "0x", "deployedBytecode": "0x", "immutableReferences": {}, "generatedSources": [], "deployedGeneratedSources": [], "sourceMap": "", "deployedSourceMap": "", "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"../../interfaces/IWitOracle.sol\";\r\nimport \"../../interfaces/IWitOracleAppliance.sol\";\r\nimport \"../../interfaces/IWitOracleRadonRequestTemplate.sol\";\r\n\r\nimport \"../../patterns/Clonable.sol\";\r\n\r\nabstract contract WitOracleRadonRequestFactoryTemplates\r\n is\r\n Clonable,\r\n IWitOracleAppliance,\r\n IWitOracleRadonRequestTemplate \r\n{\r\n function specs() virtual override public view returns (bytes4) {\r\n return (\r\n initialized()\r\n ? type(IWitOracleRadonRequestTemplate).interfaceId\r\n : bytes4(0xdccf450a) // bytes4(keccak256(abi.encodePacked(\"buildRadonRequestTemplate(bytes32[],bytes15,bytes15)\")))\r\n ^ bytes4(0x5613166e) // bytes4(keccak256(abi.encodePacked(\"determineAddress(bytes32[],bytes15,bytes15)\")))\r\n );\r\n }\r\n\r\n /// @notice Reference to the Witnet Request Board that all templates built out from this factory will refer to.\r\n address immutable public override(IWitOracleAppliance, IWitOracleRadonRequestTemplate) witOracle;\r\n\r\n IWitOracleRadonRegistry internal immutable __witOracleRadonRegistry;\r\n \r\n struct Storage {\r\n /// @notice Expected data result for all Radon Requests built out from this template.abi\r\n Witnet.RadonDataTypes resultDataType;\r\n /// @notice Parameters count for each data source.\r\n uint8[] radonRetrieveArgsCount;\r\n /// @notice Parameterized Radon retrievals.\r\n bytes32[] radonRetrieveHashes;\r\n /// @notice Data sources aggregator.\r\n bytes16 radonAggregateHash;\r\n /// @notice Crowd attestation tally.\r\n bytes16 radonTallyHash;\r\n }\r\n Storage private __storage;\r\n\r\n constructor(address _witOracle) {\r\n _require(\r\n _witOracle != address(0)\r\n && _witOracle.code.length > 0, \r\n \"inexistent Wit/Oracle\"\r\n );\r\n witOracle = _witOracle;\r\n __witOracleRadonRegistry = IWitOracle(witOracle).registry();\r\n }\r\n\r\n function buildRadonRequestTemplate(\r\n bytes32[] calldata _dataRetrieveHashes,\r\n bytes15 _dataSourcesAggregatorHash,\r\n bytes15 _crowdAttestationTallyHash\r\n ) \r\n virtual //override\r\n external\r\n notOnClones\r\n returns (IWitOracleRadonRequestTemplate)\r\n {\r\n return WitOracleRadonRequestFactoryTemplates(\r\n __cloneDeterministic(_determineSaltAndPepper(\r\n _dataRetrieveHashes,\r\n _dataSourcesAggregatorHash,\r\n _crowdAttestationTallyHash\r\n ))\r\n ).initialize(\r\n _dataRetrieveHashes,\r\n _dataSourcesAggregatorHash,\r\n _crowdAttestationTallyHash\r\n );\r\n }\r\n\r\n function determineAddress(\r\n bytes32[] calldata _dataRetrieveHashes,\r\n bytes15 _dataSourcesAggregatorHash,\r\n bytes15 _crowdAttestationTallyHash\r\n )\r\n virtual //override\r\n external view \r\n notOnClones\r\n returns (address)\r\n {\r\n return address(uint160(uint256(keccak256(\r\n abi.encodePacked(\r\n bytes1(0xff),\r\n address(this),\r\n _determineSaltAndPepper(\r\n _dataRetrieveHashes,\r\n _dataSourcesAggregatorHash,\r\n _crowdAttestationTallyHash\r\n ),\r\n keccak256(_cloneBytecode())\r\n )\r\n ))));\r\n }\r\n\r\n function initialize(\r\n bytes32[] calldata _dataRetrieveHashes,\r\n bytes15 _dataSourcesAggregatorHash,\r\n bytes15 _crowdAttestationTallyHash\r\n )\r\n virtual\r\n public \r\n initializer\r\n returns (IWitOracleRadonRequestTemplate)\r\n {\r\n __witOracleRadonRegistry.isVerifiedRadonReducer(_dataSourcesAggregatorHash);\r\n __witOracleRadonRegistry.isVerifiedRadonReducer(_crowdAttestationTallyHash);\r\n uint _totalArgs;\r\n Witnet.RadonDataTypes _resultDataType;\r\n for (uint _ix = 0; _ix < _dataRetrieveHashes.length; ++ _ix) {\r\n uint8 _argsCount = __witOracleRadonRegistry.lookupRadonRetrievalArgsCount(_dataRetrieveHashes[_ix]);\r\n __storage.radonRetrieveArgsCount.push(_argsCount);\r\n _totalArgs += _argsCount;\r\n if (_ix == 0) {\r\n _resultDataType = __witOracleRadonRegistry.lookupRadonRetrievalResultDataType(_dataRetrieveHashes[0]);\r\n } else {\r\n if (_resultDataType != __witOracleRadonRegistry.lookupRadonRetrievalResultDataType(_dataRetrieveHashes[_ix])) {\r\n _revert(\"mistyped data sources\");\r\n }\r\n }\r\n }\r\n _require(_totalArgs >= 1, \"unparameterized data sources\");\r\n __storage.radonRetrieveHashes = _dataRetrieveHashes;\r\n __storage.radonAggregateHash = _dataSourcesAggregatorHash;\r\n __storage.radonTallyHash = _crowdAttestationTallyHash;\r\n __storage.resultDataType = _resultDataType;\r\n return IWitOracleRadonRequestTemplate(address(this));\r\n }\r\n\r\n\r\n // ================================================================================================================\r\n /// --- Clonable implementation and override ----------------------------------------------------------------------\r\n\r\n /// @notice Tells whether a WitOracleRequest or a WitOracleRequestTemplate has been properly initialized.\r\n function initialized()\r\n virtual override(Clonable)\r\n public view\r\n returns (bool)\r\n {\r\n return __storage.radonRetrieveHashes.length > 0;\r\n }\r\n\r\n\r\n /// ===============================================================================================================\r\n /// --- IWitOracleRadonRequestTemplate -------------------------------------------------------------------------------\r\n\r\n function getArgsCount()\r\n virtual override\r\n external view\r\n onlyOnClones\r\n returns (uint8[] memory)\r\n {\r\n return __storage.radonRetrieveArgsCount;\r\n }\r\n \r\n function getCrowdAttestationTally()\r\n virtual override\r\n external view \r\n onlyOnClones\r\n returns (Witnet.RadonReducer memory)\r\n {\r\n return __witOracleRadonRegistry.lookupRadonReducer(\r\n __storage.radonTallyHash\r\n );\r\n }\r\n\r\n function getDataResultType()\r\n virtual override\r\n external view \r\n onlyOnClones\r\n returns (Witnet.RadonDataTypes)\r\n {\r\n return __storage.resultDataType;\r\n }\r\n\r\n function getDataSources()\r\n virtual override\r\n external view\r\n onlyOnClones\r\n returns (Witnet.RadonRetrieval[] memory _dataSources)\r\n {\r\n _dataSources = new Witnet.RadonRetrieval[](__storage.radonRetrieveHashes.length);\r\n for (uint _ix = 0; _ix < _dataSources.length; ++ _ix) {\r\n _dataSources[_ix] = __witOracleRadonRegistry.lookupRadonRetrieval(\r\n __storage.radonRetrieveHashes[_ix]\r\n );\r\n }\r\n }\r\n\r\n function getDataSourcesAggregator() \r\n virtual override\r\n external view\r\n onlyOnClones\r\n returns (Witnet.RadonReducer memory)\r\n {\r\n return __witOracleRadonRegistry.lookupRadonReducer(\r\n __storage.radonAggregateHash\r\n );\r\n }\r\n\r\n function verifyRadonRequest(string[][] calldata args)\r\n virtual override\r\n external \r\n onlyOnClones\r\n returns (Witnet.RadonHash)\r\n {\r\n return __witOracleRadonRegistry.verifyRadonRequest(\r\n __storage.radonRetrieveHashes,\r\n args,\r\n __storage.radonAggregateHash,\r\n __storage.radonTallyHash\r\n );\r\n }\r\n\r\n \r\n /// ===============================================================================================================\r\n /// --- Internal methods ------------------------------------------------------------------------------------------\r\n\r\n function _determineSaltAndPepper(\r\n bytes32[] calldata _dataRetrieveHashes,\r\n bytes15 _dataSourcesAggregatorHash,\r\n bytes15 _crowdAttestationTallyHash\r\n )\r\n virtual internal view\r\n returns (bytes32)\r\n {\r\n return keccak256(\r\n abi.encodePacked(\r\n __SELF,\r\n _dataRetrieveHashes,\r\n _dataSourcesAggregatorHash,\r\n _crowdAttestationTallyHash\r\n )\r\n );\r\n }\r\n}\r\n", "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\base\\WitOracleRadonRequestFactoryTemplates.sol", "ast": { "absolutePath": "project:/contracts/core/base/WitOracleRadonRequestFactoryTemplates.sol", "exportedSymbols": { "Bech32": [ 31372 ], "Clonable": [ 45518 ], "IWitAppliance": [ 26514 ], "IWitOracle": [ 26581 ], "IWitOracleAppliance": [ 26593 ], "IWitOracleRadonRegistry": [ 27394 ], "IWitOracleRadonRequestTemplate": [ 27592 ], "Initializable": [ 267 ], "Secp256k1": [ 32535 ], "WitOracleRadonRequestFactoryTemplates": [ 16677 ], "Witnet": [ 40741 ], "WitnetBuffer": [ 42631 ], "WitnetCBOR": [ 44174 ] }, "id": 16678, "license": "MIT", "nodeType": "SourceUnit", "nodes": [ { "id": 16190, "literals": [ "solidity", ">=", "0.8", ".0", "<", "0.9", ".0" ], "nodeType": "PragmaDirective", "src": "35:31:40" }, { "absolutePath": "project:/contracts/interfaces/IWitOracle.sol", "file": "../../interfaces/IWitOracle.sol", "id": 16191, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 16678, "sourceUnit": 26582, "src": "70:41:40", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "project:/contracts/interfaces/IWitOracleAppliance.sol", "file": "../../interfaces/IWitOracleAppliance.sol", "id": 16192, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 16678, "sourceUnit": 26594, "src": "113:50:40", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "project:/contracts/interfaces/IWitOracleRadonRequestTemplate.sol", "file": "../../interfaces/IWitOracleRadonRequestTemplate.sol", "id": 16193, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 16678, "sourceUnit": 27593, "src": "165:61:40", "symbolAliases": [], "unitAlias": "" }, { "absolutePath": "project:/contracts/patterns/Clonable.sol", "file": "../../patterns/Clonable.sol", "id": 16194, "nameLocation": "-1:-1:-1", "nodeType": "ImportDirective", "scope": 16678, "sourceUnit": 45519, "src": "230:37:40", "symbolAliases": [], "unitAlias": "" }, { "abstract": true, "baseContracts": [ { "baseName": { "id": 16195, "name": "Clonable", "nameLocations": [ "344:8:40" ], "nodeType": "IdentifierPath", "referencedDeclaration": 45518, "src": "344:8:40" }, "id": 16196, "nodeType": "InheritanceSpecifier", "src": "344:8:40" }, { "baseName": { "id": 16197, "name": "IWitOracleAppliance", "nameLocations": [ "363:19:40" ], "nodeType": "IdentifierPath", "referencedDeclaration": 26593, "src": "363:19:40" }, "id": 16198, "nodeType": "InheritanceSpecifier", "src": "363:19:40" }, { "baseName": { "id": 16199, "name": "IWitOracleRadonRequestTemplate", "nameLocations": [ "393:30:40" ], "nodeType": "IdentifierPath", "referencedDeclaration": 27592, "src": "393:30:40" }, "id": 16200, "nodeType": "InheritanceSpecifier", "src": "393:30:40" } ], "canonicalName": "WitOracleRadonRequestFactoryTemplates", "contractDependencies": [], "contractKind": "contract", "fullyImplemented": false, "id": 16677, "linearizedBaseContracts": [ 16677, 27592, 26593, 26514, 45518, 267 ], "name": "WitOracleRadonRequestFactoryTemplates", "nameLocation": "289:37:40", "nodeType": "ContractDefinition", "nodes": [ { "baseFunctions": [ 26478 ], "body": { "id": 16224, "nodeType": "Block", "src": "496:394:40", "statements": [ { "expression": { "components": [ { "condition": { "arguments": [], "expression": { "argumentTypes": [], "id": 16206, "name": "initialized", "nodeType": "Identifier", "overloadedDeclarations": [ 16521 ], "referencedDeclaration": 16521, "src": "529:11:40", "typeDescriptions": { "typeIdentifier": "t_function_internal_view$__$returns$_t_bool_$", "typeString": "function () view returns (bool)" } }, "id": 16207, "isConstant": false, "isLValue": false, "isPure": false, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "529:13:40", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bool", "typeString": "bool" } }, "falseExpression": { "commonType": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" }, "id": 16220, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "leftExpression": { "arguments": [ { "hexValue": "30786463636634353061", "id": 16214, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "637:10:40", "typeDescriptions": { "typeIdentifier": "t_rational_3704571146_by_1", "typeString": "int_const 3704571146" }, "value": "0xdccf450a" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_3704571146_by_1", "typeString": "int_const 3704571146" } ], "id": 16213, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "630:6:40", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes4_$", "typeString": "type(bytes4)" }, "typeName": { "id": 16212, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "630:6:40", "typeDescriptions": {} } }, "id": 16215, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "630:18:40", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "nodeType": "BinaryOperation", "operator": "^", "rightExpression": { "arguments": [ { "hexValue": "30783536313331363665", "id": 16218, "isConstant": false, "isLValue": false, "isPure": true, "kind": "number", "lValueRequested": false, "nodeType": "Literal", "src": "774:10:40", "typeDescriptions": { "typeIdentifier": "t_rational_1444091502_by_1", "typeString": "int_const 1444091502" }, "value": "0x5613166e" } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_rational_1444091502_by_1", "typeString": "int_const 1444091502" } ], "id": 16217, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "nodeType": "ElementaryTypeNameExpression", "src": "767:6:40", "typeDescriptions": { "typeIdentifier": "t_type$_t_bytes4_$", "typeString": "type(bytes4)" }, "typeName": { "id": 16216, "name": "bytes4", "nodeType": "ElementaryTypeName", "src": "767:6:40", "typeDescriptions": {} } }, "id": 16219, "isConstant": false, "isLValue": false, "isPure": true, "kind": "typeConversion", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "767:18:40", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "src": "630:155:40", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "id": 16221, "isConstant": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "Conditional", "src": "529:256:40", "trueExpression": { "expression": { "arguments": [ { "id": 16209, "name": "IWitOracleRadonRequestTemplate", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 27592, "src": "567:30:40", "typeDescriptions": { "typeIdentifier": "t_type$_t_contract$_IWitOracleRadonRequestTemplate_$27592_$", "typeString": "type(contract IWitOracleRadonRequestTemplate)" } } ], "expression": { "argumentTypes": [ { "typeIdentifier": "t_type$_t_contract$_IWitOracleRadonRequestTemplate_$27592_$", "typeString": "type(contract IWitOracleRadonRequestTemplate)" } ], "id": 16208, "name": "type", "nodeType": "Identifier", "overloadedDeclarations": [], "referencedDeclaration": 4294967269, "src": "562:4:40", "typeDescriptions": { "typeIdentifier": "t_function_metatype_pure$__$returns$__$", "typeString": "function () pure" } }, "id": 16210, "isConstant": false, "isLValue": false, "isPure": true, "kind": "functionCall", "lValueRequested": false, "nameLocations": [], "names": [], "nodeType": "FunctionCall", "src": "562:36:40", "tryCall": false, "typeDescriptions": { "typeIdentifier": "t_magic_meta_type_t_contract$_IWitOracleRadonRequestTemplate_$27592", "typeString": "type(contract IWitOracleRadonRequestTemplate)" } }, "id": 16211, "isConstant": false, "isLValue": false, "isPure": true, "lValueRequested": false, "memberLocation": "599:11:40", "memberName": "interfaceId", "nodeType": "MemberAccess", "src": "562:48:40", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } } ], "id": 16222, "isConstant": false, "isInlineArray": false, "isLValue": false, "isPure": false, "lValueRequested": false, "nodeType": "TupleExpression", "src": "514:368:40", "typeDescriptions": { "typeIdentifier": "t_bytes4", "typeString": "bytes4" } }, "functionReturnParameters": 16205, "id": 16223, "nodeType": "Return", "src": "507:375:40" } ] }, "functionSelector": "adb7c3f7", "id": 16225, "implemented": true, "kind": "function", "modifiers": [], "name": "specs", "nameLocation": "442:5:40", "nodeType": "FunctionDefinition", "overrides": { "id": 16202, "nodeType": "OverrideSpecifier", "overrides": [], "src": "458:8:40" }, "parameters": { "id": 16201, "nodeType": "ParameterList", "parameters": [], "src": "447:2:40" }, "returnParameters": { "id": 16205, "nodeType": "ParameterList", "parameters": [ { "constant": false, "id": 16204, "mutability": "mutable", "name": "", "nameLocation": "-1:-1:-1", "nodeType": "VariableDeclaration", "scope": 16225, "src": "488:6:40", "stateVariable": false, "storageLocation": "default", "typeDescrip