From 4e8d1de994903418ff490ce7fb2a18cf1e1d8788 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 7 Oct 2024 17:45:05 +0200 Subject: [PATCH 01/24] feat: prepare for wit/2.1 --- contracts/apps/WitPriceFeedsV21.sol | 4 +- contracts/data/WitOracleDataLib.sol | 831 ++++++++++++++++-- contracts/interfaces/IWitOracleConsumer.sol | 8 +- contracts/interfaces/IWitPriceFeedsSolver.sol | 2 +- contracts/interfaces/IWitRandomness.sol | 4 +- contracts/libs/WitOracleRadonEncodingLib.sol | 4 +- contracts/libs/Witnet.sol | 653 +++++++++----- test/TestWitnet.sol | 2 +- 8 files changed, 1189 insertions(+), 319 deletions(-) diff --git a/contracts/apps/WitPriceFeedsV21.sol b/contracts/apps/WitPriceFeedsV21.sol index 3af65105..ccb8089e 100644 --- a/contracts/apps/WitPriceFeedsV21.sol +++ b/contracts/apps/WitPriceFeedsV21.sol @@ -587,7 +587,7 @@ contract WitPriceFeedsV21 return IWitPriceFeedsSolver.Price({ value: _latestResult.asUint(), timestamp: _lastValidQueryResponse.resultTimestamp, - tallyHash: _lastValidQueryResponse.resultTallyHash, + drTxHash: _lastValidQueryResponse.resultDrTxHash, status: latestUpdateQueryResponseStatus(feedId) }); } else { @@ -613,7 +613,7 @@ contract WitPriceFeedsV21 return IWitPriceFeedsSolver.Price({ value: 0, timestamp: 0, - tallyHash: 0, + drTxHash: 0, status: latestUpdateQueryResponseStatus(feedId) }); } diff --git a/contracts/data/WitOracleDataLib.sol b/contracts/data/WitOracleDataLib.sol index d471f2ae..1bd903d0 100644 --- a/contracts/data/WitOracleDataLib.sol +++ b/contracts/data/WitOracleDataLib.sol @@ -3,16 +3,23 @@ pragma solidity >=0.7.0 <0.9.0; import "../WitOracleRadonRegistry.sol"; +import "../interfaces/IWitOracleAdminACLs.sol"; +import "../interfaces/IWitOracleBlocks.sol"; import "../interfaces/IWitOracleConsumer.sol"; import "../interfaces/IWitOracleEvents.sol"; import "../interfaces/IWitOracleReporter.sol"; import "../libs/Witnet.sol"; +import "../patterns/Escrowable.sol"; /// @title Witnet Request Board base data model library /// @author The Witnet Foundation. library WitOracleDataLib { - using Witnet for Witnet.QueryRequest; + using Witnet for Witnet.Beacon; + using Witnet for Witnet.QueryReport; + using Witnet for Witnet.QueryResponseReport; + using Witnet for Witnet.RadonSLA; + using WitnetCBOR for WitnetCBOR.CBOR; bytes32 internal constant _WIT_ORACLE_DATA_SLOTHASH = @@ -23,8 +30,12 @@ library WitOracleDataLib { uint256 nonce; mapping (uint => Witnet.Query) queries; mapping (address => bool) reporters; + mapping (address => Escrowable.Escrow) escrows; + mapping (uint256 => Witnet.Beacon) beacons; + uint256 lastKnownBeaconIndex; } + // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- @@ -36,24 +47,38 @@ library WitOracleDataLib { } } - function isReporter(address addr) internal view returns (bool) { - return data().reporters[addr]; + function queryHashOf(Storage storage self, bytes4 channel, uint256 queryId) + internal view returns (bytes32) + { + Witnet.Query storage __query = self.queries[queryId]; + return keccak256(abi.encode( + channel, + queryId, + blockhash(__query.block), + __query.request.radonRadHash != bytes32(0) + ? __query.request.radonRadHash + : keccak256(bytes(__query.request.radonBytecode)), + __query.request.radonSLA + )); } /// Saves query response into storage. function saveQueryResponse( + address evmReporter, + uint64 evmFinalityBlock, uint256 queryId, uint32 resultTimestamp, - bytes32 resultTallyHash, + bytes32 resultDrTxHash, bytes memory resultCborBytes ) internal { seekQuery(queryId).response = Witnet.QueryResponse({ - reporter: msg.sender, - finality: uint64(block.number), + reporter: evmReporter, + finality: evmFinalityBlock, resultTimestamp: resultTimestamp, - resultTallyHash: resultTallyHash, - resultCborBytes: resultCborBytes + resultDrTxHash: resultDrTxHash, + resultCborBytes: resultCborBytes, + disputer: address(0) }); } @@ -72,93 +97,286 @@ library WitOracleDataLib { return data().queries[queryId].response; } - function seekQueryStatus(uint256 queryId) internal view returns (Witnet.QueryStatus) { - Witnet.Query storage __query = data().queries[queryId]; + + /// ======================================================================= + /// --- Escrowable -------------------------------------------------------- + + function burn(address from, uint256 value) public { + require( + data().escrows[from].balance >= value, + "Escrowable: insufficient balance" + ); + data().escrows[from].balance -= value; + emit Escrowable.Burnt(from, value); + } + + function deposit(address to, uint256 value) public { + data().escrows[to].balance += value; + emit Payable.Received(to, value); + } + + function stake(address from, uint256 value) public { + Escrowable.Escrow storage __escrow = data().escrows[from]; + require( + __escrow.balance >= value, + "Escrowable: insufficient balance" + ); + __escrow.balance -= value; + __escrow.collateral += value; + emit Escrowable.Staked(from, value); + } + + function slash(address from, address to, uint256 value) public { + Escrowable.Escrow storage __escrowFrom = data().escrows[from]; + Escrowable.Escrow storage __escrowTo = data().escrows[to]; + require( + __escrowFrom.collateral >= value, + "Escrowable: insufficient collateral" + ); + __escrowTo.balance += value; + __escrowFrom.collateral -= value; + emit Escrowable.Slashed(from, value); + emit Payable.Received(to, value); + } + + function unstake(address from, uint256 value) public { + Escrowable.Escrow storage __escrow = data().escrows[from]; + require( + __escrow.collateral >= value, + "Escrowable: insufficient collateral" + ); + __escrow.collateral -= value; + __escrow.balance += value; + emit Escrowable.Unstaked(from, value); + } + + function withdraw(address from) public returns (uint256 _withdrawn) { + Escrowable.Escrow storage __escrow = data().escrows[from]; + _withdrawn = __escrow.balance; + __escrow.balance = 0; + emit Escrowable.Withdrawn(from, _withdrawn); + } + + + /// ======================================================================= + /// --- IWitOracleAdminACLs ----------------------------------------------- + + function isReporter(address addr) internal view returns (bool) { + return data().reporters[addr]; + } + + function setReporters(address[] calldata reporters) public { + for (uint ix = 0; ix < reporters.length; ix ++) { + data().reporters[reporters[ix]] = true; + } + emit IWitOracleAdminACLs.ReportersSet(reporters); + } + + function unsetReporters(address[] calldata reporters) public { + for (uint ix = 0; ix < reporters.length; ix ++) { + data().reporters[reporters[ix]] = false; + } + emit IWitOracleAdminACLs.ReportersUnset(reporters); + } + + + /// ======================================================================= + /// --- IWitOracle -------------------------------------------------------- + + function fetchQueryResponseTrustlessly( + uint256 evmQueryReportingStake, + uint256 queryId, + Witnet.QueryStatus queryStatus + ) + public returns (Witnet.QueryResponse memory _queryResponse) + { + Witnet.Query storage __query = seekQuery(queryId); + + uint72 _evmReward = __query.request.evmReward; + __query.request.evmReward = 0; + + if (queryStatus == Witnet.QueryStatus.Expired) { + if (_evmReward > 0) { + if (__query.response.disputer != address(0)) { + // transfer reporter's stake to the disputer + slash( + __query.response.reporter, + __query.response.disputer, + evmQueryReportingStake + ); + // transfer back disputer's stake + unstake( + __query.response.disputer, + evmQueryReportingStake + ); + } + } + + } else if (queryStatus != Witnet.QueryStatus.Finalized) { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(queryStatus) + ))); + } + + // completely delete query metadata from storage: + _queryResponse = __query.response; + delete data().queries[queryId]; + + // transfer unused reward to requester: + if (_evmReward > 0) { + deposit(msg.sender, _evmReward); + } + } + + function getQueryStatusTrustlessly( + uint256 queryId, + uint256 evmQueryAwaitingBlocks + ) + public view returns (Witnet.QueryStatus) + { + Witnet.Query storage __query = seekQuery(queryId); if (__query.response.resultTimestamp != 0) { if (block.number >= __query.response.finality) { - return Witnet.QueryStatus.Finalized; + if (__query.response.disputer != address(0)) { + return Witnet.QueryStatus.Expired; + + } else { + return Witnet.QueryStatus.Finalized; + } } else { - return Witnet.QueryStatus.Reported; + if (__query.response.disputer != address(0)) { + return Witnet.QueryStatus.Disputed; + + } else { + return Witnet.QueryStatus.Reported; + } } - } else if (__query.request.requester != address(0)) { - return Witnet.QueryStatus.Posted; - } else { + } else if (__query.block == 0) { return Witnet.QueryStatus.Unknown; + + } else if (block.number > __query.block + evmQueryAwaitingBlocks * 2) { + return Witnet.QueryStatus.Expired; + + } else if (block.number > __query.block + evmQueryAwaitingBlocks) { + return Witnet.QueryStatus.Delayed; + + } else { + return Witnet.QueryStatus.Posted; } } - function seekQueryResponseStatus(uint256 queryId) internal view returns (Witnet.QueryResponseStatus) { - Witnet.QueryStatus _queryStatus = seekQueryStatus(queryId); + function getQueryResponseStatusTrustlessly( + uint256 queryId, + uint256 evmQueryAwaitingBlocks + ) + public view returns (Witnet.QueryResponseStatus) + { + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly( + queryId, + evmQueryAwaitingBlocks + ); if (_queryStatus == Witnet.QueryStatus.Finalized) { - bytes storage __cborValues = data().queries[queryId].response.resultCborBytes; + bytes storage __cborValues = seekQueryResponse(queryId).resultCborBytes; if (__cborValues.length > 0) { // determine whether stored result is an error by peeking the first byte return (__cborValues[0] == bytes1(0xd8) ? Witnet.QueryResponseStatus.Error : Witnet.QueryResponseStatus.Ready ); + } else { // the result is final but delivered to the requesting address return Witnet.QueryResponseStatus.Delivered; } - } else if (_queryStatus == Witnet.QueryStatus.Posted) { + } else if ( + _queryStatus == Witnet.QueryStatus.Posted + || _queryStatus == Witnet.QueryStatus.Delayed + ) { return Witnet.QueryResponseStatus.Awaiting; - } else if (_queryStatus == Witnet.QueryStatus.Reported) { + + } else if ( + _queryStatus == Witnet.QueryStatus.Reported + || _queryStatus == Witnet.QueryStatus.Disputed + ) { return Witnet.QueryResponseStatus.Finalizing; + + } else if (_queryStatus == Witnet.QueryStatus.Expired) { + return Witnet.QueryResponseStatus.Expired; + } else { return Witnet.QueryResponseStatus.Void; } } - // ================================================================================================================ - // --- Public functions ------------------------------------------------------------------------------------------- - function extractWitnetDataRequests(WitOracleRadonRegistry registry, uint256[] calldata queryIds) + /// ======================================================================= + /// --- IWitOracleBlocks -------------------------------------------------- + + function getLastKnownBeacon() internal view returns (Witnet.Beacon storage) { + return data().beacons[data().lastKnownBeaconIndex]; + } + + function getLastKnownBeaconIndex() internal view returns (uint256) { + return data().lastKnownBeaconIndex; + } + + function rollupBeacons(Witnet.FastForward[] calldata rollup) + public returns (Witnet.Beacon memory head) + { + require( + data().beacons[rollup[0].beacon.index].equals(rollup[0].beacon), + "fast-forwarding from unmatching beacon" + ); + head = _verifyFastForwards(rollup); + data().beacons[head.index] = head; + data().lastKnownBeaconIndex = head.index; + emit IWitOracleBlocks.Rollup(head); + } + + function seekBeacon(uint256 _index) internal view returns (Witnet.Beacon storage) { + return data().beacons[_index]; + } + + + /// ======================================================================= + /// --- IWitOracleReporter ------------------------------------------------ + + function extractWitnetDataRequests( + WitOracleRadonRegistry registry, + uint256[] calldata queryIds + ) public view returns (bytes[] memory bytecodes) { bytecodes = new bytes[](queryIds.length); for (uint _ix = 0; _ix < queryIds.length; _ix ++) { - if (seekQueryStatus(queryIds[_ix]) != Witnet.QueryStatus.Unknown) { - Witnet.QueryRequest storage __request = data().queries[queryIds[_ix]].request; - if (__request.radonRadHash != bytes32(0)) { - bytecodes[_ix] = registry.bytecodeOf( - __request.radonRadHash, - __request.radonSLA - ); - } else { - bytecodes[_ix] = registry.bytecodeOf( - __request.radonBytecode, - __request.radonSLA - ); - } + Witnet.QueryRequest storage __request = data().queries[queryIds[_ix]].request; + if (__request.radonRadHash != bytes32(0)) { + bytecodes[_ix] = registry.bytecodeOf( + __request.radonRadHash, + __request.radonSLA + ); + } else { + bytecodes[_ix] = registry.bytecodeOf( + __request.radonBytecode, + __request.radonSLA + ); } } } - - function notInStatusRevertMessage(Witnet.QueryStatus self) public pure returns (string memory) { - if (self == Witnet.QueryStatus.Posted) { - return "query not in Posted status"; - } else if (self == Witnet.QueryStatus.Reported) { - return "query not in Reported status"; - } else if (self == Witnet.QueryStatus.Finalized) { - return "query not in Finalized status"; - } else { - return "bad mood"; - } - } - - function reportResult( + + function reportQueryResponse( + address evmReporter, uint256 evmGasPrice, - uint256 queryId, - uint32 resultTimestamp, - bytes32 resultTallyHash, - bytes calldata resultCborBytes + uint64 evmFinalityBlock, + Witnet.QueryResponseReport calldata report ) public returns (uint256 evmReward) + // todo: turn into private { // read requester address and whether a callback was requested: - Witnet.QueryRequest storage __request = seekQueryRequest(queryId); + Witnet.QueryRequest storage __request = seekQueryRequest(report.queryId); // read query EVM reward: evmReward = __request.evmReward; @@ -172,81 +390,82 @@ library WitOracleDataLib { uint256 evmCallbackActualGas, bool evmCallbackSuccess, string memory evmCallbackRevertMessage - ) = reportResultCallback( + ) = reportQueryResponseCallback( __request.requester, __request.gasCallback, - queryId, - resultTimestamp, - resultTallyHash, - resultCborBytes + evmFinalityBlock, + report ); if (evmCallbackSuccess) { // => the callback run successfully emit IWitOracleEvents.WitOracleQueryReponseDelivered( - queryId, + report.queryId, evmGasPrice, evmCallbackActualGas ); } else { // => the callback reverted emit IWitOracleEvents.WitOracleQueryResponseDeliveryFailed( - queryId, + report.queryId, evmGasPrice, evmCallbackActualGas, bytes(evmCallbackRevertMessage).length > 0 ? evmCallbackRevertMessage : "WitOracleDataLib: callback exceeded gas limit", - resultCborBytes + report.witDrResultCborBytes ); } // upon delivery, successfull or not, the audit trail is saved into storage, // but not the actual result which was intended to be passed over to the requester: saveQueryResponse( - queryId, - resultTimestamp, - resultTallyHash, + evmReporter, + evmFinalityBlock, + report.queryId, + Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + report.witDrTxHash, hex"" ); } else { // => no callback is involved emit IWitOracleEvents.WitOracleQueryResponse( - queryId, + report.queryId, evmGasPrice ); // write query result and audit trail data into storage saveQueryResponse( - queryId, - resultTimestamp, - resultTallyHash, - resultCborBytes + evmReporter, + evmFinalityBlock, + report.queryId, + Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + report.witDrTxHash, + report.witDrResultCborBytes ); } } - function reportResultCallback( + function reportQueryResponseCallback( address evmRequester, - uint256 evmCallbackGasLimit, - uint256 queryId, - uint64 resultTimestamp, - bytes32 resultTallyHash, - bytes calldata resultCborBytes + uint24 evmCallbackGasLimit, + uint64 evmFinalityBlock, + Witnet.QueryResponseReport calldata report ) public returns ( uint256 evmCallbackActualGas, bool evmCallbackSuccess, string memory evmCallbackRevertMessage ) + // todo: turn into private { evmCallbackActualGas = gasleft(); - if (resultCborBytes[0] == bytes1(0xd8)) { - WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(resultCborBytes).readArray(); + if (report.witDrResultCborBytes[0] == bytes1(0xd8)) { + WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(report.witDrResultCborBytes).readArray(); if (_errors.length < 2) { // try to report result with unknown error: try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( - queryId, - resultTimestamp, - resultTallyHash, - block.number, + report.queryId, + Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + report.witDrTxHash, + evmFinalityBlock, Witnet.ResultErrorCodes.Unknown, WitnetCBOR.CBOR({ buffer: WitnetBuffer.Buffer({ data: hex"", cursor: 0}), @@ -261,13 +480,14 @@ library WitOracleDataLib { } catch Error(string memory err) { evmCallbackRevertMessage = err; } + } else { // try to report result with parsable error: try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( - queryId, - resultTimestamp, - resultTallyHash, - block.number, + report.queryId, + Witnet.determineEpochFromTimestamp(report.witDrResultEpoch), + report.witDrTxHash, + evmFinalityBlock, Witnet.ResultErrorCodes(_errors[0].readUint()), _errors[0] ) { @@ -276,14 +496,15 @@ library WitOracleDataLib { evmCallbackRevertMessage = err; } } + } else { // try to report result result with no error : try IWitOracleConsumer(evmRequester).reportWitOracleResultValue{gas: evmCallbackGasLimit}( - queryId, - resultTimestamp, - resultTallyHash, - block.number, - WitnetCBOR.fromBytes(resultCborBytes) + report.queryId, + Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + report.witDrTxHash, + evmFinalityBlock, + WitnetCBOR.fromBytes(report.witDrResultCborBytes) ) { evmCallbackSuccess = true; } catch Error(string memory err) { @@ -292,4 +513,430 @@ library WitOracleDataLib { } evmCallbackActualGas -= gasleft(); } + + function reportQueryResponseTrustlessly( + bytes4 channel, + uint256 evmGasPrice, + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake, + Witnet.QueryStatus queryStatus, + Witnet.QueryResponseReport calldata queryResponseReport + ) + public returns (uint256) + { + (bool _isValidQueryResponseReport, string memory _queryResponseReportInvalidError) = isValidQueryResponseReport( + channel, + queryResponseReport + ); + require( + _isValidQueryResponseReport, + _queryResponseReportInvalidError + ); + + address _queryReporter; + if (queryStatus == Witnet.QueryStatus.Posted) { + _queryReporter = queryResponseReport.queryRelayer(); + require( + _queryReporter == msg.sender, + "unauthorized query reporter" + ); + } + + else if (queryStatus == Witnet.QueryStatus.Delayed) { + _queryReporter = msg.sender; + + } else { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(queryStatus) + ))); + } + + // stake from caller's balance: + stake(msg.sender, evmQueryReportingStake); + + // save query response into storage: + return reportQueryResponse( + _queryReporter, + evmGasPrice, + uint64(block.number + evmQueryAwaitingBlocks), + queryResponseReport + ); + } + + + /// ======================================================================= + /// --- IWitOracleReporterTrustless --------------------------------------- + + function claimQueryReward( + uint256 evmQueryReportingStake, + uint256 queryId, + Witnet.QueryStatus queryStatus + ) + public returns (uint256 evmReward) + { + Witnet.Query storage __query = seekQuery(queryId); + + evmReward = __query.request.evmReward; + __query.request.evmReward = 0; + + // revert if already claimed: + require( + evmReward > 0, + "already claimed" + ); + + // deposit query's reward into the caller's balance (if proven to be legitimate): + deposit( + msg.sender, + evmReward + ); + + if (queryStatus == Witnet.QueryStatus.Finalized) { + // only the reporter can claim, + require( + msg.sender == __query.request.requester, + "not the requester" + ); + // recovering also the report stake + unstake( + msg.sender, + evmQueryReportingStake + ); + + } else if (queryStatus == Witnet.QueryStatus.Expired) { + if (__query.response.disputer != address(0)) { + // only the disputer can claim, + require( + msg.sender == __query.response.disputer, + "not the disputer" + ); + // receiving the reporter's stake, + slash( + __query.response.reporter, + msg.sender, + evmQueryReportingStake + ); + // and recovering the dispute stake, + unstake( + msg.sender, + evmQueryReportingStake + ); + evmReward += evmQueryReportingStake; + + } else { + // only the requester can claim, + require( + msg.sender == __query.request.requester, + "not the requester" + ); + + } + } else { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(queryStatus) + ))); + } + } + + function disputeQueryResponse( + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake, + uint256 queryId + ) + public returns (uint256 evmPotentialReward) + { + stake(msg.sender, evmQueryReportingStake); + Witnet.Query storage __query = seekQuery(queryId); + __query.response.disputer = msg.sender; + __query.response.finality = uint64(block.number + evmQueryAwaitingBlocks); + emit IWitOracleEvents.WitOracleQueryResponseDispute( + queryId, + msg.sender + ); + return ( + __query.request.evmReward + + evmQueryReportingStake + ); + } + + function rollupQueryResponseProof( + bytes4 channel, + uint256 evmQueryReportingStake, + Witnet.QueryResponseReport calldata queryResponseReport, + Witnet.QueryStatus queryStatus, + Witnet.FastForward[] calldata witOracleRollup, + bytes32[] calldata ddrTalliesMerkleTrie + ) + public returns (uint256 evmTotalReward) + { + // validate query response report + (bool _isValidQueryResponseReport, string memory _queryResponseReportInvalidError) = isValidQueryResponseReport( + channel, + queryResponseReport + ); + require(_isValidQueryResponseReport, _queryResponseReportInvalidError); + + // validate rollup proofs + Witnet.Beacon memory _witOracleHead = rollupBeacons(witOracleRollup); + require( + _witOracleHead.index == Witnet.determineBeaconIndexFromEpoch( + queryResponseReport.witDrResultEpoch + ) + 1, "mismatching head beacon" + ); + + // validate merkle proof + require( + _witOracleHead.ddrTalliesMerkleRoot == Witnet.merkleRoot( + ddrTalliesMerkleTrie, + queryResponseReport.tallyHash() + ), "invalid merkle proof" + ); + + Witnet.Query storage __query = seekQuery(queryResponseReport.queryId); + // process query response report depending on query's current status ... + { + if (queryStatus == Witnet.QueryStatus.Reported) { + // check that proven report actually differs from what was formerly reported + require( + keccak256(abi.encode( + queryResponseReport.witDrTxHash, + queryResponseReport.witDrResultEpoch, + queryResponseReport.witDrResultCborBytes + )) != keccak256(abi.encode( + __query.response.resultDrTxHash, + Witnet.determineEpochFromTimestamp(__query.response.resultTimestamp), + __query.response.resultCborBytes + )), + "proving no fake report" + ); + + // transfer fake reporter's stake into caller's balance: + slash( + __query.response.reporter, + msg.sender, + evmQueryReportingStake + ); + + // transfer query's reward into caller's balance + deposit(msg.sender, __query.request.evmReward); + + // update query's response data into storage: + __query.response.reporter = msg.sender; + __query.response.resultCborBytes = queryResponseReport.witDrResultCborBytes; + __query.response.resultDrTxHash = queryResponseReport.witDrTxHash; + __query.response.resultTimestamp = Witnet.determineTimestampFromEpoch(queryResponseReport.witDrResultEpoch); + + } else if (queryStatus == Witnet.QueryStatus.Disputed) { + // check that proven report actually matches what was formerly reported + require( + keccak256(abi.encode( + queryResponseReport.witDrTxHash, + queryResponseReport.witDrResultEpoch, + queryResponseReport.witDrResultCborBytes + )) == keccak256(abi.encode( + __query.response.resultDrTxHash, + Witnet.determineEpochFromTimestamp(__query.response.resultTimestamp), + __query.response.resultCborBytes + )), + "proving disputed fake report" + ); + + // transfer fake disputer's stake into reporter's balance: + slash( + __query.response.disputer, + __query.response.reporter, + evmQueryReportingStake + ); + + // transfer query's reward into reporter's balance: + deposit(__query.response.reporter, __query.request.evmReward); + + // clear query's disputer + __query.response.disputer = address(0); + + } else { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(queryStatus) + ))); + } + + // finalize query: + evmTotalReward = __query.request.evmReward + evmQueryReportingStake; + __query.request.evmReward = 0; // no claimQueryReward(.) will be required (nor accepted whatsoever) + __query.response.finality = uint64(block.number); // set query status to Finalized + } + } + + function rollupQueryResultProof( + Witnet.QueryReport calldata queryReport, + Witnet.FastForward[] calldata witOracleRollup, + bytes32[] calldata droTalliesMerkleTrie + ) + public returns (Witnet.Result memory) + { + // validate query report + require( + queryReport.witDrRadHash != bytes32(0) + && queryReport.witDrResultCborBytes.length > 0 + && queryReport.witDrResultEpoch > 0 + && queryReport.witDrTxHash != bytes32(0) + && queryReport.witDrSLA.isValid() + , "invalid query report" + ); + + // validate rollup proofs + Witnet.Beacon memory _witOracleHead = rollupBeacons(witOracleRollup); + require( + _witOracleHead.index == Witnet.determineBeaconIndexFromEpoch( + queryReport.witDrResultEpoch + ) + 1, "mismatching head beacon" + ); + + // validate merkle proof + require( + _witOracleHead.droTalliesMerkleRoot == Witnet.merkleRoot( + droTalliesMerkleTrie, + queryReport.tallyHash() + ), "invalid merkle proof" + ); + + // deserialize result cbor bytes into Witnet.Result + return Witnet.toWitnetResult( + queryReport.witDrResultCborBytes + ); + } + + + /// ======================================================================= + /// --- Other public helper methods --------------------------------------- + + function isValidQueryResponseReport(bytes4 channel, Witnet.QueryResponseReport calldata report) + public view + // todo: turn into private + returns (bool, string memory) + { + if (queryHashOf(data(), channel, report.queryId) != report.queryHash) { + return (false, "invalid query hash"); + + } else if (report.witDrResultEpoch == 0) { + return (false, "invalid result epoch"); + + } else if (report.witDrResultCborBytes.length == 0) { + return (false, "invalid empty result"); + + } else { + return (true, new string(0)); + + } + } + + function notInStatusRevertMessage(Witnet.QueryStatus self) public pure returns (string memory) { + if (self == Witnet.QueryStatus.Posted) { + return "query not in Posted status"; + } else if (self == Witnet.QueryStatus.Reported) { + return "query not in Reported status"; + } else if (self == Witnet.QueryStatus.Finalized) { + return "query not in Finalized status"; + } else { + return "bad mood"; + } + } + + function toString(Witnet.QueryStatus _status) public pure returns (string memory) { + if (_status == Witnet.QueryStatus.Posted) { + return "Posted"; + } else if (_status == Witnet.QueryStatus.Reported) { + return "Reported"; + } else if (_status == Witnet.QueryStatus.Finalized) { + return "Finalized"; + } else if (_status == Witnet.QueryStatus.Delayed) { + return "Delayed"; + } else if (_status == Witnet.QueryStatus.Expired) { + return "Expired"; + } else if (_status == Witnet.QueryStatus.Disputed) { + return "Disputed"; + } else { + return "Unknown"; + } + } + + function toString(Witnet.QueryResponseStatus _status) external pure returns (string memory) { + if (_status == Witnet.QueryResponseStatus.Awaiting) { + return "Awaiting"; + } else if (_status == Witnet.QueryResponseStatus.Ready) { + return "Ready"; + } else if (_status == Witnet.QueryResponseStatus.Error) { + return "Reverted"; + } else if (_status == Witnet.QueryResponseStatus.Finalizing) { + return "Finalizing"; + } else if (_status == Witnet.QueryResponseStatus.Delivered) { + return "Delivered"; + } else if (_status == Witnet.QueryResponseStatus.Expired) { + return "Expired"; + } else { + return "Unknown"; + } + } + + + /// ======================================================================= + /// --- Private library methods ------------------------------------------- + + function _verifyFastForwards(Witnet.FastForward[] calldata ff) + private pure + returns (Witnet.Beacon calldata) + { + for (uint _ix = 1; _ix < ff.length; _ix ++) { + require( + ff[_ix].beacon.prevIndex == ff[_ix - 1].beacon.index + && ff[_ix].beacon.prevRoot == ff[_ix - 1].beacon.root(), + string(abi.encodePacked( + "mismatching beacons on fast-forward step #", + Witnet.toString(_ix) + )) + ); + require( + ff[_ix].committeeMissingPubkeys.length <= ( + Witnet.WIT_2_FAST_FORWARD_COMMITTEE_SIZE / 3 + ), string(abi.encodePacked( + "too many missing pubkeys on fast-forward step #", + Witnet.toString(_ix) + )) + ); + // TODO: + // uint256[4] memory _committeePubkey = ff[_ix - 1].beacon.nextCommitteePubkey; + // for (uint _mx = 0; _mx < ff[_ix].committeeMissingPubKeys.length; _mx ++) { + // require( + // 0 < ( + // ff[_ix].committeeMissingPubkey[_mx][0] + // + ff[_ix].committeeMissingPubkey[_mx][1] + // + ff[_ix].committeeMissingPubkey[_mx][2] + // + ff[_ix].committeeMissingPubkey[_mx][3] + + // ), string(abi.encodePacked( + // "null missing pubkey on fast-forward step #", + // Witnet.toString(_ix), + // " index #", + // Witnet.toString(_mx) + // )) + // ); + // _committeePubkey -= ff[_ix].committeeMissingPubkey[_mx]; + // } + // require( + // _verifySignature( + // ff[_ix].beacon.committeeSignature, + // _committeePubkey, + // ff[_ix].beacon.root() + + // ), string(abi.encodedPacked( + // "invalid signature on fast-forward step #", + // Witnet.toString(_ix) + // )) + // ); + } + return ff[ff.length - 1].beacon; + } } diff --git a/contracts/interfaces/IWitOracleConsumer.sol b/contracts/interfaces/IWitOracleConsumer.sol index 7d58196e..51b718bd 100644 --- a/contracts/interfaces/IWitOracleConsumer.sol +++ b/contracts/interfaces/IWitOracleConsumer.sol @@ -10,14 +10,14 @@ interface IWitOracleConsumer { /// @dev It should revert if called from any other address different to the WitOracle being used /// @dev by the WitOracleConsumer contract. /// @param queryId The unique identifier of the Witnet query being reported. - /// @param resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param resultDrTxHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. /// @param resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. /// @param resultEvmFinalityBlock EVM block at which the provided data can be considered to be final. /// @param witnetResultCborValue The CBOR-encoded resulting value of the Witnet query being reported. function reportWitOracleResultValue( uint256 queryId, uint64 resultTimestamp, - bytes32 resultTallyHash, + bytes32 resultDrTxHash, uint256 resultEvmFinalityBlock, WitnetCBOR.CBOR calldata witnetResultCborValue ) external; @@ -27,7 +27,7 @@ interface IWitOracleConsumer { /// @dev It should revert if called from any other address different to the WitOracle being used /// @dev by the WitOracleConsumer contract. /// @param queryId The unique identifier of the Witnet query being reported. - /// @param resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param resultDrTxHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. /// @param resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. /// @param resultEvmFinalityBlock EVM block at which the provided data can be considered to be final. /// @param errorCode The error code enum identifying the error produced during resolution on the Witnet blockchain. @@ -35,7 +35,7 @@ interface IWitOracleConsumer { function reportWitOracleResultError( uint256 queryId, uint64 resultTimestamp, - bytes32 resultTallyHash, + bytes32 resultDrTxHash, uint256 resultEvmFinalityBlock, Witnet.ResultErrorCodes errorCode, WitnetCBOR.CBOR calldata errorArgs diff --git a/contracts/interfaces/IWitPriceFeedsSolver.sol b/contracts/interfaces/IWitPriceFeedsSolver.sol index 8e7fc3ae..ccf69ba8 100644 --- a/contracts/interfaces/IWitPriceFeedsSolver.sol +++ b/contracts/interfaces/IWitPriceFeedsSolver.sol @@ -8,7 +8,7 @@ interface IWitPriceFeedsSolver { struct Price { uint value; uint timestamp; - bytes32 tallyHash; + bytes32 drTxHash; Witnet.QueryResponseStatus status; } function class() external pure returns (string memory); diff --git a/contracts/interfaces/IWitRandomness.sol b/contracts/interfaces/IWitRandomness.sol index 8d60d870..0eebf1c7 100644 --- a/contracts/interfaces/IWitRandomness.sol +++ b/contracts/interfaces/IWitRandomness.sol @@ -33,12 +33,12 @@ interface IWitRandomness { /// @param blockNumber Block number from which the search will start. /// @return witnetResultRandomness Random value provided by the Witnet blockchain and used for solving randomness after given block. /// @return resultTimestamp Timestamp at which the randomness value was generated by the Witnet blockchain. - /// @return resultTallyHash Hash of the witnessing commit/reveal act that took place on the Witnet blockchain. + /// @return resultDrTxHash Hash of the witnessing commit/reveal act that took place on the Witnet blockchain. /// @return witnetResultFinalityBlock EVM block number from which the provided randomness can be considered to be final. function fetchRandomnessAfterProof(uint256 blockNumber) external view returns ( bytes32 witnetResultRandomness, uint64 resultTimestamp, - bytes32 resultTallyHash, + bytes32 resultDrTxHash, uint256 witnetResultFinalityBlock ); diff --git a/contracts/libs/WitOracleRadonEncodingLib.sol b/contracts/libs/WitOracleRadonEncodingLib.sol index 4329d823..25b14672 100644 --- a/contracts/libs/WitOracleRadonEncodingLib.sol +++ b/contracts/libs/WitOracleRadonEncodingLib.sol @@ -405,13 +405,15 @@ library WitOracleRadonEncodingLib { maxDataSize ); } - return maxDataSize + 3; // TODO: determine CBOR-encoding length overhead + return maxDataSize + 3; // todo?: determine CBOR-encoding length overhead?? + } else if ( dataType == Witnet.RadonDataTypes.Integer || dataType == Witnet.RadonDataTypes.Float || dataType == Witnet.RadonDataTypes.Bool ) { return 9; + } else { revert UnsupportedRadonDataType( uint8(dataType), diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index c5ec28c5..0a3b8c79 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +pragma solidity >=0.8.0 <0.9.0; import "./WitnetCBOR.sol"; @@ -11,10 +10,44 @@ library Witnet { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; + uint32 constant internal WIT_1_GENESIS_TIMESTAMP = 0; // TBD + uint32 constant internal WIT_1_SECS_PER_EPOCH = 45; + + uint32 constant internal WIT_2_GENESIS_BEACON_INDEX = 0; // TBD + uint32 constant internal WIT_2_GENESIS_BEACON_PREV_INDEX = 0; // TBD + bytes24 constant internal WIT_2_GENESIS_BEACON_PREV_ROOT = 0; // TBD + bytes16 constant internal WIT_2_GENESIS_BEACON_DDR_TALLIES_MERKLE_ROOT = 0; // TBD + bytes16 constant internal WIT_2_GENESIS_BEACON_DRO_TALLIES_MERKLE_ROOT = 0; // TBD + uint256 constant internal WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_0 = 0; // TBD + uint256 constant internal WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_1 = 0; // TBD + uint256 constant internal WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_2 = 0; // TBD + uint256 constant internal WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 = 0; // TBD + uint32 constant internal WIT_2_GENESIS_EPOCH = 0; // TBD + uint32 constant internal WIT_2_GENESIS_TIMESTAMP = 0; // TBD + uint32 constant internal WIT_2_SECS_PER_EPOCH = 20; // TBD + uint32 constant internal WIT_2_FAST_FORWARD_COMMITTEE_SIZE = 64; // TBD + + struct Beacon { + uint32 index; + uint32 prevIndex; + bytes24 prevRoot; + bytes16 ddrTalliesMerkleRoot; + bytes16 droTalliesMerkleRoot; + uint256[4] nextCommitteeAggPubkey; + } + + struct FastForward { + Beacon beacon; + uint256[2] committeeAggSignature; + uint256[4][] committeeMissingPubkeys; + } + + /// Struct containing both request and response data related to every query posted to the Witnet Request Board struct Query { QueryRequest request; QueryResponse response; + uint256 block; } /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. @@ -24,7 +57,7 @@ library Witnet { uint72 evmReward; // EVM amount in wei eventually to be paid to the legit result reporter. bytes radonBytecode; // Optional: Witnet Data Request bytecode to be solved by the Witnet blockchain. bytes32 radonRadHash; // Optional: Previously verified hash of the Witnet Data Request to be solved. - RadonSLA radonSLA; // Minimum Service-Level parameters to be committed by the Witnet blockchain. + RadonSLA radonSLA; // Minimum Service-Level parameters to be committed by the Witnet blockchain. } /// QueryResponse metadata and result as resolved by the Witnet blockchain. @@ -32,8 +65,26 @@ library Witnet { address reporter; // EVM address from which the Data Request result was reported. uint64 finality; // EVM block number at which the reported data will be considered to be finalized. uint32 resultTimestamp; // Unix timestamp (seconds) at which the data request was resolved in the Witnet blockchain. - bytes32 resultTallyHash; // Unique hash of the commit/reveal act in the Witnet blockchain that resolved the data request. + bytes32 resultDrTxHash; // Unique hash of the commit/reveal act in the Witnet blockchain that resolved the data request. bytes resultCborBytes; // CBOR-encode result to the request, as resolved in the Witnet blockchain. + address disputer; + } + + struct QueryResponseReport { + uint256 queryId; + bytes32 queryHash; // KECCAK256(channel | queryId | blockhash(query.block) | ...) + bytes witDrRelayerSignature; // ECDSA.signature(queryHash) + bytes32 witDrTxHash; + uint32 witDrResultEpoch; + bytes witDrResultCborBytes; + } + + struct QueryReport { + bytes32 witDrRadHash; + RadonSLA witDrSLA; + bytes32 witDrTxHash; + uint32 witDrResultEpoch; + bytes witDrResultCborBytes; } /// QueryResponse status from a requester's point of view. @@ -43,7 +94,8 @@ library Witnet { Ready, Error, Finalizing, - Delivered + Delivered, + Expired } /// Possible status of a Witnet query. @@ -51,7 +103,10 @@ library Witnet { Unknown, Posted, Reported, - Finalized + Finalized, + Delayed, + Expired, + Disputed } /// Data struct containing the Witnet-provided result to a Data Request. @@ -257,35 +312,6 @@ library Witnet { UnhandledIntercept } - function isCircumstantial(ResultErrorCodes self) internal pure returns (bool) { - return (self == ResultErrorCodes.CircumstantialFailure); - } - - function lackOfConsensus(ResultErrorCodes self) internal pure returns (bool) { - return ( - self == ResultErrorCodes.InsufficientCommits - || self == ResultErrorCodes.InsufficientMajority - || self == ResultErrorCodes.InsufficientReveals - ); - } - - function isRetriable(ResultErrorCodes self) internal pure returns (bool) { - return ( - lackOfConsensus(self) - || isCircumstantial(self) - || poorIncentives(self) - ); - } - - function poorIncentives(ResultErrorCodes self) internal pure returns (bool) { - return ( - self == ResultErrorCodes.OversizedTallyResult - || self == ResultErrorCodes.InsufficientCommits - || self == ResultErrorCodes.BridgePoorIncentives - || self == ResultErrorCodes.BridgeOversizedTallyResult - ); - } - /// Possible types either processed by Witnet Radon Scripts or included within results to Witnet Data Requests. enum RadonDataTypes { /* 0x00 */ Any, @@ -377,10 +403,10 @@ library Witnet { } struct RadonSLA { - /// Number of witnessing nodes in the Witnet blockchain that contribute to solve some data query. + /// Number of witnessing nodes in the Wit/oracle blockchain that will contribute to solve some data request. uint8 witNumWitnesses; - /// Reward in $nanoWit ultimately paid to every earnest node in the Wit/oracle blockchain contributing to solve some data query. + /// Reward in $nanoWit ultimately paid to every earnest node in the Wit/oracle blockchain contributing to solve some data request. uint64 witUnitaryReward; /// Maximum size accepted for the CBOR-encoded buffer containing successfull result values. @@ -397,207 +423,78 @@ library Witnet { } - /// =============================================================================================================== - /// --- 'Witnet.RadonSLA' helper methods ------------------------------------------------------------------------ + /// ======================================================================= + /// --- Witnet.Beacon helper functions ------------------------------------ - function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) - internal pure returns (bool) + function equals(Beacon storage self, Beacon calldata other) + internal view returns (bool) { return ( - a.witNumWitnesses >= b.witNumWitnesses - && a.witUnitaryReward >= b.witUnitaryReward - && a.maxTallyResultSize <= b.maxTallyResultSize - ); - } - - function isValid(RadonSLA memory sla) internal pure returns (bool) { - return ( - sla.witUnitaryReward > 0 - && sla.witNumWitnesses > 0 && sla.witNumWitnesses <= 127 - && sla.maxTallyResultSize > 0 + root(self) == root(other) ); } - function toV1(RadonSLA memory self) internal pure returns (Witnet.RadonSLAv1 memory) { - return Witnet.RadonSLAv1({ - numWitnesses: self.witNumWitnesses, - minConsensusPercentage: 51, - witnessReward: self.witUnitaryReward, - witnessCollateral: self.witUnitaryReward * 100, - minerCommitRevealFee: self.witUnitaryReward / self.witNumWitnesses - }); + function root(Beacon calldata self) internal pure returns (bytes24) { + return bytes24(keccak256(abi.encode( + self.index, + self.prevIndex, + self.prevRoot, + self.ddrTalliesMerkleRoot, + self.droTalliesMerkleRoot, + self.nextCommitteeAggPubkey + ))); } - - /// Sum of all rewards in $nanoWit to be paid to nodes in the Wit/oracle blockchain that contribute to solve some data query. - function witTotalReward(RadonSLA storage self) internal view returns (uint64) { - return self.witUnitaryReward / (self.witNumWitnesses + 3); + + function root(Beacon storage self) internal view returns (bytes24) { + return bytes24(keccak256(abi.encode( + self.index, + self.prevIndex, + self.prevRoot, + self.ddrTalliesMerkleRoot, + self.droTalliesMerkleRoot, + self.nextCommitteeAggPubkey + ))); } - /// =============================================================================================================== - /// --- 'uint*' helper methods ------------------------------------------------------------------------------------ - - /// @notice Convert a `uint8` into a 2 characters long `string` representing its two less significant hexadecimal values. - function toHexString(uint8 _u) - internal pure - returns (string memory) - { - bytes memory b2 = new bytes(2); - uint8 d0 = uint8(_u / 16) + 48; - uint8 d1 = uint8(_u % 16) + 48; - if (d0 > 57) - d0 += 7; - if (d1 > 57) - d1 += 7; - b2[0] = bytes1(d0); - b2[1] = bytes1(d1); - return string(b2); - } + /// ======================================================================= + /// --- Witnet.FastForward helper functions ------------------------------- - /// @notice Convert a `uint8` into a 1, 2 or 3 characters long `string` representing its. - /// three less significant decimal values. - function toString(uint8 _u) - internal pure - returns (string memory) + function head(FastForward[] calldata rollup) + internal pure returns (Beacon calldata) { - if (_u < 10) { - bytes memory b1 = new bytes(1); - b1[0] = bytes1(uint8(_u) + 48); - return string(b1); - } else if (_u < 100) { - bytes memory b2 = new bytes(2); - b2[0] = bytes1(uint8(_u / 10) + 48); - b2[1] = bytes1(uint8(_u % 10) + 48); - return string(b2); - } else { - bytes memory b3 = new bytes(3); - b3[0] = bytes1(uint8(_u / 100) + 48); - b3[1] = bytes1(uint8(_u % 100 / 10) + 48); - b3[2] = bytes1(uint8(_u % 10) + 48); - return string(b3); - } - } - - /// @notice Convert a `uint` into a string` representing its value. - function toString(uint v) - internal pure - returns (string memory) - { - uint maxlength = 100; - bytes memory reversed = new bytes(maxlength); - uint i = 0; - do { - uint8 remainder = uint8(v % 10); - v = v / 10; - reversed[i ++] = bytes1(48 + remainder); - } while (v != 0); - bytes memory buf = new bytes(i); - for (uint j = 1; j <= i; j ++) { - buf[j - 1] = reversed[i - j]; - } - return string(buf); + return rollup[rollup.length - 1].beacon; } /// =============================================================================================================== - /// --- 'bytes' helper methods ------------------------------------------------------------------------------------ - - /// @dev Transform given bytes into a Witnet.Result instance. - /// @param cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function toWitnetResult(bytes memory cborBytes) - internal pure - returns (Witnet.Result memory) - { - WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(cborBytes); - return _resultFromCborValue(cborValue); - } + /// --- Witnet.Query*Report helper methods ------------------------------------------------------------------------ - function toAddress(bytes memory _value) internal pure returns (address) { - return address(toBytes20(_value)); + function queryRelayer(QueryResponseReport calldata self) internal pure returns (address) { + return recoverAddr(self.witDrRelayerSignature, self.queryHash); } - function toBytes4(bytes memory _value) internal pure returns (bytes4) { - return bytes4(toFixedBytes(_value, 4)); - } - - function toBytes20(bytes memory _value) internal pure returns (bytes20) { - return bytes20(toFixedBytes(_value, 20)); - } - - function toBytes32(bytes memory _value) internal pure returns (bytes32) { - return toFixedBytes(_value, 32); + function tallyHash(QueryResponseReport calldata self) internal pure returns (bytes32) { + return keccak256(abi.encode( + self.queryHash, + self.witDrRelayerSignature, + self.witDrTxHash, + self.witDrResultEpoch, + self.witDrResultCborBytes + )); } - function toFixedBytes(bytes memory _value, uint8 _numBytes) - internal pure - returns (bytes32 _bytes32) - { - assert(_numBytes <= 32); - unchecked { - uint _len = _value.length > _numBytes ? _numBytes : _value.length; - for (uint _i = 0; _i < _len; _i ++) { - _bytes32 |= bytes32(_value[_i] & 0xff) >> (_i * 8); - } - } + function tallyHash(QueryReport calldata self) internal pure returns (bytes32) { + return keccak256(abi.encode( + self.witDrRadHash, + self.witDrSLA, + self.witDrTxHash, + self.witDrResultEpoch, + self.witDrResultCborBytes + )); } - /// =============================================================================================================== - /// --- 'string' helper methods ----------------------------------------------------------------------------------- - - function toLowerCase(string memory str) - internal pure - returns (string memory) - { - bytes memory lowered = new bytes(bytes(str).length); - unchecked { - for (uint i = 0; i < lowered.length; i ++) { - uint8 char = uint8(bytes(str)[i]); - if (char >= 65 && char <= 90) { - lowered[i] = bytes1(char + 32); - } else { - lowered[i] = bytes1(char); - } - } - } - return string(lowered); - } - - /// @notice Converts bytes32 into string. - function toString(bytes32 _bytes32) - internal pure - returns (string memory) - { - bytes memory _bytes = new bytes(_toStringLength(_bytes32)); - for (uint _i = 0; _i < _bytes.length;) { - _bytes[_i] = _bytes32[_i]; - unchecked { - _i ++; - } - } - return string(_bytes); - } - - function tryUint(string memory str) - internal pure - returns (uint res, bool) - { - unchecked { - for (uint256 i = 0; i < bytes(str).length; i++) { - if ( - (uint8(bytes(str)[i]) - 48) < 0 - || (uint8(bytes(str)[i]) - 48) > 9 - ) { - return (0, false); - } - res += (uint8(bytes(str)[i]) - 48) * 10 ** (bytes(str).length - i - 1); - } - return (res, true); - } - } - - /// =============================================================================================================== /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- @@ -615,7 +512,6 @@ library Witnet { if (result.value.majorType == uint8(WitnetCBOR.MAJOR_TYPE_BYTES)) { return toAddress(result.value.readBytes()); } else { - // TODO revert("WitnetLib: reading address from string not yet supported."); } } @@ -760,7 +656,263 @@ library Witnet { /// =============================================================================================================== - /// --- P-RNG generators ------------------------------------------------------------------------------------------ + /// --- Witnet.ResultErrorCodes helper methods -------------------------------------------------------------------- + + function isCircumstantial(ResultErrorCodes self) internal pure returns (bool) { + return (self == ResultErrorCodes.CircumstantialFailure); + } + + function isRetriable(ResultErrorCodes self) internal pure returns (bool) { + return ( + lackOfConsensus(self) + || isCircumstantial(self) + || poorIncentives(self) + ); + } + + function lackOfConsensus(ResultErrorCodes self) internal pure returns (bool) { + return ( + self == ResultErrorCodes.InsufficientCommits + || self == ResultErrorCodes.InsufficientMajority + || self == ResultErrorCodes.InsufficientReveals + ); + } + + function poorIncentives(ResultErrorCodes self) internal pure returns (bool) { + return ( + self == ResultErrorCodes.OversizedTallyResult + || self == ResultErrorCodes.InsufficientCommits + || self == ResultErrorCodes.BridgePoorIncentives + || self == ResultErrorCodes.BridgeOversizedTallyResult + ); + } + + + /// =============================================================================================================== + /// --- 'Witnet.RadonSLA' helper methods -------------------------------------------------------------------------- + + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) + internal pure returns (bool) + { + return ( + a.witNumWitnesses >= b.witNumWitnesses + && a.witUnitaryReward >= b.witUnitaryReward + && a.maxTallyResultSize <= b.maxTallyResultSize + ); + } + + function isValid(RadonSLA memory sla) internal pure returns (bool) { + return ( + sla.witUnitaryReward > 0 + && sla.witNumWitnesses > 0 && sla.witNumWitnesses <= 127 + && sla.maxTallyResultSize > 0 + ); + } + + function toV1(RadonSLA memory self) internal pure returns (Witnet.RadonSLAv1 memory) { + return Witnet.RadonSLAv1({ + numWitnesses: self.witNumWitnesses, + minConsensusPercentage: 51, + witnessReward: self.witUnitaryReward, + witnessCollateral: self.witUnitaryReward * 100, + minerCommitRevealFee: self.witUnitaryReward / self.witNumWitnesses + }); + } + + /// Sum of all rewards in $nanoWit to be paid to nodes in the Wit/oracle blockchain that contribute to solve some data query. + function witTotalReward(RadonSLA storage self) internal view returns (uint64) { + return self.witUnitaryReward / (self.witNumWitnesses + 3); + } + + + /// =============================================================================================================== + /// --- 'bytes*' helper methods ----------------------------------------------------------------------------------- + + function merkleHash(bytes32 a, bytes32 b) internal pure returns (bytes32) { + return (a < b + ? _merkleHash(a, b) + : _merkleHash(b, a) + ); + } + + function merkleRoot(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32 _root) { + _root = leaf; + for (uint _ix = 0; _ix < proof.length; _ix ++) { + _root = merkleHash(_root, proof[_ix]); + } + } + + function radHash(bytes calldata bytecode) internal pure returns (bytes32) { + return keccak256(bytecode); + } + + function recoverAddr(bytes memory signature, bytes32 hash_) + internal pure + returns (address) + { + if (signature.length != 65) { + return (address(0)); + } + bytes32 r; + bytes32 s; + uint8 v; + assembly { + r := mload(add(signature, 0x20)) + s := mload(add(signature, 0x40)) + v := byte(0, mload(add(signature, 0x60))) + } + if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { + return address(0); + } + if (v != 27 && v != 28) { + return address(0); + } + return ecrecover(hash_, v, r, s); + } + + + /// @dev Transform given bytes into a Witnet.Result instance. + /// @param cborBytes Raw bytes representing a CBOR-encoded value. + /// @return A `Witnet.Result` instance. + function toWitnetResult(bytes memory cborBytes) + internal pure + returns (Witnet.Result memory) + { + WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(cborBytes); + return _resultFromCborValue(cborValue); + } + + function toAddress(bytes memory _value) internal pure returns (address) { + return address(toBytes20(_value)); + } + + function toBytes4(bytes memory _value) internal pure returns (bytes4) { + return bytes4(toFixedBytes(_value, 4)); + } + + function toBytes20(bytes memory _value) internal pure returns (bytes20) { + return bytes20(toFixedBytes(_value, 20)); + } + + function toBytes32(bytes memory _value) internal pure returns (bytes32) { + return toFixedBytes(_value, 32); + } + + function toFixedBytes(bytes memory _value, uint8 _numBytes) + internal pure + returns (bytes32 _bytes32) + { + assert(_numBytes <= 32); + unchecked { + uint _len = _value.length > _numBytes ? _numBytes : _value.length; + for (uint _i = 0; _i < _len; _i ++) { + _bytes32 |= bytes32(_value[_i] & 0xff) >> (_i * 8); + } + } + } + + + /// =============================================================================================================== + /// --- 'string' helper methods ----------------------------------------------------------------------------------- + + function toLowerCase(string memory str) + internal pure + returns (string memory) + { + bytes memory lowered = new bytes(bytes(str).length); + unchecked { + for (uint i = 0; i < lowered.length; i ++) { + uint8 char = uint8(bytes(str)[i]); + if (char >= 65 && char <= 90) { + lowered[i] = bytes1(char + 32); + } else { + lowered[i] = bytes1(char); + } + } + } + return string(lowered); + } + + /// @notice Converts bytes32 into string. + function toString(bytes32 _bytes32) + internal pure + returns (string memory) + { + bytes memory _bytes = new bytes(_toStringLength(_bytes32)); + for (uint _i = 0; _i < _bytes.length;) { + _bytes[_i] = _bytes32[_i]; + unchecked { + _i ++; + } + } + return string(_bytes); + } + + function tryUint(string memory str) + internal pure + returns (uint res, bool) + { + unchecked { + for (uint256 i = 0; i < bytes(str).length; i++) { + if ( + (uint8(bytes(str)[i]) - 48) < 0 + || (uint8(bytes(str)[i]) - 48) > 9 + ) { + return (0, false); + } + res += (uint8(bytes(str)[i]) - 48) * 10 ** (bytes(str).length - i - 1); + } + return (res, true); + } + } + + + /// =============================================================================================================== + /// --- 'uint*' helper methods ------------------------------------------------------------------------------------ + + function determineBeaconIndexFromEpoch(uint32 epoch) internal pure returns (uint32) { + return epoch / 10; + } + + function determineBeaconIndexFromTimestamp(uint32 timestamp) internal pure returns (uint32) { + return determineBeaconIndexFromEpoch( + determineEpochFromTimestamp( + timestamp + ) + ); + } + + function determineEpochFromTimestamp(uint32 timestamp) internal pure returns (uint32) { + if (timestamp > WIT_2_GENESIS_TIMESTAMP) { + return ( + WIT_2_GENESIS_EPOCH + + (timestamp - WIT_2_GENESIS_TIMESTAMP) + / WIT_2_SECS_PER_EPOCH + ); + } else if (timestamp > WIT_1_GENESIS_TIMESTAMP) { + return ( + (timestamp - WIT_1_GENESIS_TIMESTAMP) + / WIT_1_SECS_PER_EPOCH + ); + } else { + return 0; + } + } + + function determineTimestampFromEpoch(uint32 epoch) internal pure returns (uint32) { + if (epoch >= WIT_2_GENESIS_EPOCH) { + return ( + WIT_2_GENESIS_TIMESTAMP + + (WIT_2_SECS_PER_EPOCH * ( + epoch + - WIT_2_GENESIS_EPOCH) + ) + ); + } else return ( + WIT_1_SECS_PER_EPOCH + * epoch + ); + } /// Generates a pseudo-random uint32 number uniformly distributed within the range `[0 .. range)`, based on /// the given `nonce` and `seed` values. @@ -776,10 +928,79 @@ library Witnet { return uint32((_number * range) >> 224); } + /// @notice Convert a `uint8` into a 2 characters long `string` representing its two less significant hexadecimal values. + function toHexString(uint8 _u) + internal pure + returns (string memory) + { + bytes memory b2 = new bytes(2); + uint8 d0 = uint8(_u / 16) + 48; + uint8 d1 = uint8(_u % 16) + 48; + if (d0 > 57) + d0 += 7; + if (d1 > 57) + d1 += 7; + b2[0] = bytes1(d0); + b2[1] = bytes1(d1); + return string(b2); + } + + /// @notice Convert a `uint8` into a 1, 2 or 3 characters long `string` representing its. + /// three less significant decimal values. + function toString(uint8 _u) + internal pure + returns (string memory) + { + if (_u < 10) { + bytes memory b1 = new bytes(1); + b1[0] = bytes1(uint8(_u) + 48); + return string(b1); + } else if (_u < 100) { + bytes memory b2 = new bytes(2); + b2[0] = bytes1(uint8(_u / 10) + 48); + b2[1] = bytes1(uint8(_u % 10) + 48); + return string(b2); + } else { + bytes memory b3 = new bytes(3); + b3[0] = bytes1(uint8(_u / 100) + 48); + b3[1] = bytes1(uint8(_u % 100 / 10) + 48); + b3[2] = bytes1(uint8(_u % 10) + 48); + return string(b3); + } + } + + /// @notice Convert a `uint` into a string` representing its value. + function toString(uint v) + internal pure + returns (string memory) + { + uint maxlength = 100; + bytes memory reversed = new bytes(maxlength); + uint i = 0; + do { + uint8 remainder = uint8(v % 10); + v = v / 10; + reversed[i ++] = bytes1(48 + remainder); + } while (v != 0); + bytes memory buf = new bytes(i); + for (uint j = 1; j <= i; j ++) { + buf[j - 1] = reversed[i - j]; + } + return string(buf); + } + /// =============================================================================================================== /// --- Witnet library private methods ---------------------------------------------------------------------------- + function _merkleHash(bytes32 _a, bytes32 _b) private pure returns (bytes32 _hash) { + assembly { + mstore(0x0, _a) + mstore(0x20, _b) + _hash := keccak256(0x0, 0x40) + } + } + /// @dev Decode a CBOR value into a Witnet.Result instance. function _resultFromCborValue(WitnetCBOR.CBOR memory cbor) private pure diff --git a/test/TestWitnet.sol b/test/TestWitnet.sol index f4560d69..d415e163 100644 --- a/test/TestWitnet.sol +++ b/test/TestWitnet.sol @@ -64,7 +64,7 @@ contract TestWitnetV2 { reporter: msg.sender, finality: uint64(block.number), resultTimestamp: uint32(block.timestamp), - resultTallyHash: blockhash(block.number - 1), + resultDrTxHash: blockhash(block.number - 1), resultCborBytes: hex"010203040506" }); } From 0335b08adb801120ca6cdac0b5c8fa9b235d0f5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 7 Oct 2024 17:53:51 +0200 Subject: [PATCH 02/24] refactor: WRB.postRequest* -> WRB.postQuery* --- contracts/apps/WitPriceFeedsV21.sol | 2 +- contracts/apps/WitRandomnessV21.sol | 8 +- .../core/trustable/WitOracleTrustableBase.sol | 80 +++++++++++-------- contracts/interfaces/IWitOracle.sol | 20 ++--- contracts/mockups/UsingWitOracleRequest.sol | 2 +- .../mockups/UsingWitOracleRequestTemplate.sol | 2 +- .../mockups/WitOracleRandomnessConsumer.sol | 2 +- .../mockups/WitOracleRequestConsumer.sol | 2 +- .../WitOracleRequestTemplateConsumer.sol | 2 +- 9 files changed, 68 insertions(+), 52 deletions(-) diff --git a/contracts/apps/WitPriceFeedsV21.sol b/contracts/apps/WitPriceFeedsV21.sol index ccb8089e..30ed3bf4 100644 --- a/contracts/apps/WitPriceFeedsV21.sol +++ b/contracts/apps/WitPriceFeedsV21.sol @@ -773,7 +773,7 @@ contract WitPriceFeedsV21 try witOracle.fetchQueryResponse(_latestId) {} catch {} } // Post update request to the WRB: - _latestId = witOracle.postRequest{value: _usedFunds}( + _latestId = witOracle.postQuery{value: _usedFunds}( __feed.radHash, querySLA ); diff --git a/contracts/apps/WitRandomnessV21.sol b/contracts/apps/WitRandomnessV21.sol index de6097b0..2a524c7e 100644 --- a/contracts/apps/WitRandomnessV21.sol +++ b/contracts/apps/WitRandomnessV21.sol @@ -184,7 +184,7 @@ contract WitRandomnessV21 /// @param _blockNumber Block number from which the search will start. /// @return _resultRandomness Random value provided by the Witnet blockchain and used for solving randomness after given block. /// @return _resultTimestamp Timestamp at which the randomness value was generated by the Witnet blockchain. - /// @return _resultTallyHash Hash of the witnessing commit/reveal act that took place on the Witnet blockchain. + /// @return _resultDrTxHash Hash of the witnessing commit/reveal act that took place on the Witnet blockchain. /// @return _resultFinalityBlock EVM block number from which the provided randomness can be considered to be final. function fetchRandomnessAfterProof(uint256 _blockNumber) virtual override @@ -192,7 +192,7 @@ contract WitRandomnessV21 returns ( bytes32 _resultRandomness, uint64 _resultTimestamp, - bytes32 _resultTallyHash, + bytes32 _resultDrTxHash, uint256 _resultFinalityBlock ) { @@ -211,7 +211,7 @@ contract WitRandomnessV21 if (_status == Witnet.QueryResponseStatus.Ready) { Witnet.QueryResponse memory _queryResponse = __witOracle.getQueryResponse(_queryId); _resultTimestamp = _queryResponse.resultTimestamp; - _resultTallyHash = _queryResponse.resultTallyHash; + _resultDrTxHash = _queryResponse.resultDrTxHash; _resultFinalityBlock = _queryResponse.finality; _resultRandomness = _queryResponse.resultCborBytes.toWitnetResult().asBytes32(); @@ -475,7 +475,7 @@ contract WitRandomnessV21 _evmUsedFunds = msg.value; // Post the Witnet Randomness request: - _queryId = __witOracle.postRequest{ + _queryId = __witOracle.postQuery{ value: msg.value }( witOracleQueryRadHash, diff --git a/contracts/core/trustable/WitOracleTrustableBase.sol b/contracts/core/trustable/WitOracleTrustableBase.sol index 22426324..eddfc29b 100644 --- a/contracts/core/trustable/WitOracleTrustableBase.sol +++ b/contracts/core/trustable/WitOracleTrustableBase.sol @@ -6,7 +6,7 @@ pragma experimental ABIEncoderV2; import "../WitnetUpgradableBase.sol"; import "../../WitOracle.sol"; import "../../data/WitOracleDataLib.sol"; -import "../..//interfaces/IWitOracleLegacy.sol"; +import "../../interfaces/IWitOracleLegacy.sol"; import "../../interfaces/IWitOracleReporter.sol"; import "../../interfaces/IWitOracleAdminACLs.sol"; import "../../interfaces/IWitOracleConsumer.sol"; @@ -33,6 +33,9 @@ abstract contract WitOracleTrustableBase using Witnet for Witnet.RadonSLA; using Witnet for Witnet.Result; + using WitnetCBOR for WitnetCBOR.CBOR; + using WitOracleDataLib for WitOracleDataLib.Storage; + WitOracleRequestFactory public immutable override factory; WitOracleRadonRegistry public immutable override registry; @@ -50,7 +53,10 @@ abstract contract WitOracleTrustableBase return type(WitOracleTrustableBase).name; } - modifier checkCallbackRecipient(IWitOracleConsumer _consumer, uint24 _callbackGasLimit) { + modifier checkCallbackRecipient( + IWitOracleConsumer _consumer, + uint24 _callbackGasLimit + ) virtual { _require( address(_consumer).code.length > 0 && _consumer.reportableFrom(address(this)) @@ -59,19 +65,18 @@ abstract contract WitOracleTrustableBase ); _; } - modifier checkReward(uint256 _baseFee) { + modifier checkReward(uint256 _msgValue, uint256 _baseFee) virtual { _require( - _getMsgValue() >= _baseFee, + _msgValue >= _baseFee, "insufficient reward" ); _require( - _getMsgValue() <= _baseFee * 10, + _msgValue <= _baseFee * 10, "too much reward" - ); - _; + ); _; } - modifier checkSLA(Witnet.RadonSLA memory sla) { + modifier checkSLA(Witnet.RadonSLA memory sla) virtual { _require( sla.isValid(), "invalid SLA" @@ -100,9 +105,8 @@ abstract contract WitOracleTrustableBase _require( __storage().reporters[msg.sender], "unauthorized reporter" - ); - _; - } + ); _; + } constructor( WitOracleRadonRegistry _registry, @@ -172,10 +176,7 @@ abstract contract WitOracleTrustableBase /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - public - override - { + function initialize(bytes memory _initData) virtual override public { address _owner = owner(); address[] memory _newReporters; @@ -368,17 +369,20 @@ abstract contract WitOracleTrustableBase /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @return _queryId Unique query identifier. - function postRequest( + function postQuery( bytes32 _queryRAD, Witnet.RadonSLA memory _querySLA ) virtual override public payable - checkReward(estimateBaseFee(_getGasPrice(), _queryRAD)) + checkReward( + _getMsgValue(), + estimateBaseFee(_getGasPrice(), _queryRAD) + ) checkSLA(_querySLA) returns (uint256 _queryId) { - _queryId = __postRequest( + _queryId = __postQuery( _msgSender(), _queryRAD, _querySLA, @@ -409,7 +413,7 @@ abstract contract WitOracleTrustableBase /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. - function postRequestWithCallback( + function postQueryWithCallback( bytes32 _queryRAD, Witnet.RadonSLA memory _querySLA, uint24 _queryCallbackGasLimit @@ -417,7 +421,7 @@ abstract contract WitOracleTrustableBase virtual override public payable returns (uint256) { - return postRequestWithCallback( + return postQueryWithCallback( IWitOracleConsumer(_msgSender()), _queryRAD, _querySLA, @@ -425,7 +429,7 @@ abstract contract WitOracleTrustableBase ); } - function postRequestWithCallback( + function postQueryWithCallback( IWitOracleConsumer _consumer, bytes32 _queryRAD, Witnet.RadonSLA memory _querySLA, @@ -433,11 +437,17 @@ abstract contract WitOracleTrustableBase ) virtual override public payable checkCallbackRecipient(_consumer, _queryCallbackGasLimit) - checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryCallbackGasLimit)) + checkReward( + _getMsgValue(), + estimateBaseFeeWithCallback( + _getGasPrice(), + _queryCallbackGasLimit + ) + ) checkSLA(_querySLA) returns (uint256 _queryId) { - _queryId = __postRequest( + _queryId = __postQuery( address(_consumer), _queryRAD, _querySLA, @@ -467,7 +477,7 @@ abstract contract WitOracleTrustableBase /// @param _queryUnverifiedBytecode The (unverified) bytecode containing the actual data request to be solved by the Witnet blockchain. /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. - function postRequestWithCallback( + function postQueryWithCallback( bytes calldata _queryUnverifiedBytecode, Witnet.RadonSLA memory _querySLA, uint24 _queryCallbackGasLimit @@ -475,7 +485,7 @@ abstract contract WitOracleTrustableBase virtual override public payable returns (uint256) { - return postRequestWithCallback( + return postQueryWithCallback( IWitOracleConsumer(_msgSender()), _queryUnverifiedBytecode, _querySLA, @@ -483,7 +493,7 @@ abstract contract WitOracleTrustableBase ); } - function postRequestWithCallback( + function postQueryWithCallback( IWitOracleConsumer _consumer, bytes calldata _queryUnverifiedBytecode, Witnet.RadonSLA memory _querySLA, @@ -491,11 +501,17 @@ abstract contract WitOracleTrustableBase ) virtual override public payable checkCallbackRecipient(_consumer, _queryCallbackGasLimit) - checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryCallbackGasLimit)) + checkReward( + _getMsgValue(), + estimateBaseFeeWithCallback( + _getGasPrice(), + _queryCallbackGasLimit + ) + ) checkSLA(_querySLA) returns (uint256 _queryId) { - _queryId = __postRequest( + _queryId = __postQuery( address(_consumer), bytes32(0), _querySLA, @@ -565,7 +581,7 @@ abstract contract WitOracleTrustableBase external payable returns (uint256) { - return postRequest( + return postQuery( _queryRadHash, Witnet.RadonSLA({ witNumWitnesses: _querySLA.witNumWitnesses, @@ -584,7 +600,7 @@ abstract contract WitOracleTrustableBase external payable returns (uint256) { - return postRequestWithCallback( + return postQueryWithCallback( _queryRadHash, Witnet.RadonSLA({ witNumWitnesses: _querySLA.witNumWitnesses, @@ -604,7 +620,7 @@ abstract contract WitOracleTrustableBase external payable returns (uint256) { - return postRequestWithCallback( + return postQueryWithCallback( _queryRadBytecode, Witnet.RadonSLA({ witNumWitnesses: _querySLA.witNumWitnesses, @@ -859,7 +875,7 @@ abstract contract WitOracleTrustableBase ))); } - function __postRequest( + function __postQuery( address _requester, bytes32 _radHash, Witnet.RadonSLA memory _sla, diff --git a/contracts/interfaces/IWitOracle.sol b/contracts/interfaces/IWitOracle.sol index 34bd4114..b5dda33b 100644 --- a/contracts/interfaces/IWitOracle.sol +++ b/contracts/interfaces/IWitOracle.sol @@ -88,11 +88,11 @@ interface IWitOracle { /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; /// @dev - invalid SLA parameters were provided; /// @dev - insufficient value is paid as reward. - /// @param queryRAD The RAD hash of the data request to be solved by Witnet. + /// @param queryRadHash The RAD hash of the data request to be solved by Witnet. /// @param querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @return queryId Unique query identifier. - function postRequest( - bytes32 queryRAD, + function postQuery( + bytes32 queryRadHash, Witnet.RadonSLA calldata querySLA ) external payable returns (uint256 queryId); @@ -106,19 +106,19 @@ interface IWitOracle { /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; /// @dev - invalid SLA parameters were provided; /// @dev - insufficient value is paid as reward. - /// @param queryRAD The RAD hash of the data request to be solved by Witnet. + /// @param queryRadHash The RAD hash of the data request to be solved by Witnet. /// @param querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @param queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. /// @return queryId Unique query identifier. - function postRequestWithCallback( - bytes32 queryRAD, + function postQueryWithCallback( + bytes32 queryRadHash, Witnet.RadonSLA calldata querySLA, uint24 queryCallbackGasLimit ) external payable returns (uint256 queryId); - function postRequestWithCallback( + function postQueryWithCallback( IWitOracleConsumer consumer, - bytes32 queryRAD, + bytes32 queryRadHash, Witnet.RadonSLA calldata querySLA, uint24 queryCallbackGasLimit ) external payable returns (uint256 queryId); @@ -137,13 +137,13 @@ interface IWitOracle { /// @param querySLA The data query SLA to be fulfilled on the Witnet blockchain. /// @param queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. /// @return queryId Unique query identifier. - function postRequestWithCallback( + function postQueryWithCallback( bytes calldata queryUnverifiedBytecode, Witnet.RadonSLA calldata querySLA, uint24 queryCallbackGasLimit ) external payable returns (uint256 queryId); - function postRequestWithCallback( + function postQueryWithCallback( IWitOracleConsumer consumer, bytes calldata queryUnverifiedBytecode, Witnet.RadonSLA calldata querySLA, diff --git a/contracts/mockups/UsingWitOracleRequest.sol b/contracts/mockups/UsingWitOracleRequest.sol index 05d76ceb..aa042bfc 100644 --- a/contracts/mockups/UsingWitOracleRequest.sol +++ b/contracts/mockups/UsingWitOracleRequest.sol @@ -56,7 +56,7 @@ abstract contract UsingWitOracleRequest ) virtual internal returns (uint256) { - return __witOracle.postRequest{ + return __witOracle.postQuery{ value: _queryEvmReward }( __witOracleRequestRadHash, diff --git a/contracts/mockups/UsingWitOracleRequestTemplate.sol b/contracts/mockups/UsingWitOracleRequestTemplate.sol index d88387d9..8188c8d2 100644 --- a/contracts/mockups/UsingWitOracleRequestTemplate.sol +++ b/contracts/mockups/UsingWitOracleRequestTemplate.sol @@ -70,7 +70,7 @@ abstract contract UsingWitOracleRequestTemplate ) virtual internal returns (uint256) { - return __witOracle.postRequest{ + return __witOracle.postQuery{ value: _queryEvmReward }( _queryRadHash, diff --git a/contracts/mockups/WitOracleRandomnessConsumer.sol b/contracts/mockups/WitOracleRandomnessConsumer.sol index 7374ff3a..fee5d1b8 100644 --- a/contracts/mockups/WitOracleRandomnessConsumer.sol +++ b/contracts/mockups/WitOracleRandomnessConsumer.sol @@ -105,7 +105,7 @@ abstract contract WitOracleRandomnessConsumer ) virtual internal returns (uint256) { - return __witOracle.postRequestWithCallback{ + return __witOracle.postQueryWithCallback{ value: _queryEvmReward }( __witOracleRandomnessRadHash, diff --git a/contracts/mockups/WitOracleRequestConsumer.sol b/contracts/mockups/WitOracleRequestConsumer.sol index ff82893e..6a71aeee 100644 --- a/contracts/mockups/WitOracleRequestConsumer.sol +++ b/contracts/mockups/WitOracleRequestConsumer.sol @@ -59,7 +59,7 @@ abstract contract WitOracleRequestConsumer ) virtual override internal returns (uint256) { - return __witOracle.postRequestWithCallback{ + return __witOracle.postQueryWithCallback{ value: _queryEvmReward }( __witOracleRequestRadHash, diff --git a/contracts/mockups/WitOracleRequestTemplateConsumer.sol b/contracts/mockups/WitOracleRequestTemplateConsumer.sol index 11ae2ba2..39625614 100644 --- a/contracts/mockups/WitOracleRequestTemplateConsumer.sol +++ b/contracts/mockups/WitOracleRequestTemplateConsumer.sol @@ -76,7 +76,7 @@ abstract contract WitOracleRequestTemplateConsumer ) { _queryRadHash = __witOracleVerifyRadonRequest(_witOracleRequestArgs); - _queryId = __witOracle.postRequestWithCallback{ + _queryId = __witOracle.postQueryWithCallback{ value: _queryEvmReward }( _queryRadHash, From 7e7017e690f52c36c0f54edc9f81691cc7d48fb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 7 Oct 2024 18:04:09 +0200 Subject: [PATCH 03/24] chore: lighten WitOracleTrustableBase --- .../core/trustable/WitOracleTrustableBase.sol | 143 ++++++++++++------ .../core/trustable/WitOracleTrustableOvm2.sol | 2 +- 2 files changed, 95 insertions(+), 50 deletions(-) diff --git a/contracts/core/trustable/WitOracleTrustableBase.sol b/contracts/core/trustable/WitOracleTrustableBase.sol index eddfc29b..3ff00324 100644 --- a/contracts/core/trustable/WitOracleTrustableBase.sol +++ b/contracts/core/trustable/WitOracleTrustableBase.sol @@ -85,8 +85,9 @@ abstract contract WitOracleTrustableBase /// Asserts the given query is currently in the given status. modifier inStatus(uint256 _queryId, Witnet.QueryStatus _status) { - if (WitOracleDataLib.seekQueryStatus(_queryId) != _status) { + if (getQueryStatus(_queryId) != _status) { _revert(WitOracleDataLib.notInStatusRevertMessage(_status)); + } else { _; } @@ -127,10 +128,6 @@ abstract contract WitOracleTrustableBase factory = _factory; } - receive() external payable { - _revert("no transfers accepted"); - } - /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 /// @dev (i.e. calling methods in IWitOracle) /// @dev (Until 'function ... abi(...)' modifier is allegedly supported in solc versions >= 0.9.1) @@ -208,7 +205,7 @@ abstract contract WitOracleTrustableBase _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); // Set reporters, if any - __setReporters(_newReporters); + WitOracleDataLib.setReporters(_newReporters); emit Upgraded(_owner, base(), codehash(), version()); } @@ -227,18 +224,37 @@ abstract contract WitOracleTrustableBase // --- Partial implementation of IWitOracle -------------------------------------------------------------- /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev Fails if the `_queryId` is not in 'Finalized' or 'Expired' status, or called from an address different to /// @dev the one that actually posted the given request. + /// @dev If in 'Expired' status, query reward is transfer back to the requester. /// @param _queryId The unique query identifier. function fetchQueryResponse(uint256 _queryId) virtual override external - inStatus(_queryId, Witnet.QueryStatus.Finalized) onlyRequester(_queryId) returns (Witnet.QueryResponse memory _response) { + Witnet.QueryStatus _queryStatus = getQueryStatus(_queryId); + + uint72 _evmReward; + if (_queryStatus == Witnet.QueryStatus.Expired) { + _evmReward = WitOracleDataLib.seekQueryRequest(_queryId).evmReward; + + } else if (_queryStatus != Witnet.QueryStatus.Finalized) { + _revertInvalidQueryStatus(_queryStatus); + } + + // delete query metadata from storage: _response = WitOracleDataLib.seekQuery(_queryId).response; delete __storage().queries[_queryId]; + + if (_evmReward > 0) { + // transfer unused reward to requester, only if the query expired: + __safeTransferTo( + payable(msg.sender), + _evmReward + ); + } } /// Gets the whole Query data contents, if any, no matter its current status. @@ -287,10 +303,36 @@ abstract contract WitOracleTrustableBase /// @notice - 3 => Error: the query couldn't get solved due to some issue. /// @param _queryId The unique query identifier. function getQueryResponseStatus(uint256 _queryId) - virtual override public view + virtual override + public view returns (Witnet.QueryResponseStatus) { - return WitOracleDataLib.seekQueryResponseStatus(_queryId); + Witnet.QueryStatus _queryStatus = getQueryStatus(_queryId); + if (_queryStatus == Witnet.QueryStatus.Finalized) { + bytes storage __cborValues = WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes; + if (__cborValues.length > 0) { + // determine whether stored result is an error by peeking the first byte + return (__cborValues[0] == bytes1(0xd8) + ? Witnet.QueryResponseStatus.Error + : Witnet.QueryResponseStatus.Ready + ); + + } else { + // the result is final but delivered to the requesting address + return Witnet.QueryResponseStatus.Delivered; + } + + } else if (_queryStatus == Witnet.QueryStatus.Posted) { + return Witnet.QueryResponseStatus.Awaiting; + + } else if (_queryStatus == Witnet.QueryStatus.Expired) { + return Witnet.QueryResponseStatus.Expired; + + } else { + return Witnet.QueryResponseStatus.Void; + } + } + } /// @notice Retrieves the CBOR-encoded buffer containing the Witnet-provided result to the given query. @@ -310,7 +352,7 @@ abstract contract WitOracleTrustableBase public view returns (Witnet.ResultError memory) { - Witnet.QueryResponseStatus _status = WitOracleDataLib.seekQueryResponseStatus(_queryId); + Witnet.QueryResponseStatus _status = getQueryResponseStatus(_queryId); try WitOracleResultErrorsLib.asResultError(_status, WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes) returns (Witnet.ResultError memory _resultError) { @@ -332,21 +374,35 @@ abstract contract WitOracleTrustableBase /// Gets current status of given query. function getQueryStatus(uint256 _queryId) - external view - override + virtual override + public view returns (Witnet.QueryStatus) { - return WitOracleDataLib.seekQueryStatus(_queryId); + Witnet.Query storage __query = WitOracleDataLib.seekQuery(_queryId); + if (__query.response.resultTimestamp != 0) { + return Witnet.QueryStatus.Finalized; + + } else if (__query.block == 0) { + return Witnet.QueryStatus.Unknown; + + } else if (block.number >= __query.block + 64) { + return Witnet.QueryStatus.Expired; + + } else { + return Witnet.QueryStatus.Posted; + + } + } } function getQueryStatusBatch(uint256[] calldata _queryIds) + virtual override external view - override returns (Witnet.QueryStatus[] memory _status) { _status = new Witnet.QueryStatus[](_queryIds.length); for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { - _status[_ix] = WitOracleDataLib.seekQueryStatus(_queryIds[_ix]); + _status[_ix] = getQueryStatus(_queryIds[_ix]); } } @@ -633,7 +689,7 @@ abstract contract WitOracleTrustableBase // ================================================================================================================ - // --- Full implementation of IWitOracleReporter --------------------------------------------------------- + // --- Full implementation of IWitOracleReporter ------------------------------------------------------------------ /// @notice Estimates the actual earnings (or loss), in WEI, that a reporter would get by reporting result to given query, /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on @@ -650,7 +706,7 @@ abstract contract WitOracleTrustableBase { for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { if ( - WitOracleDataLib.seekQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted + getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted ) { Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); if (__request.gasCallback > 0) { @@ -665,7 +721,7 @@ abstract contract WitOracleTrustableBase maxTallyResultSize: uint16(0) }) ) - ); + ); } else { _expenses += ( estimateBaseFee(_evmGasPrice) @@ -822,57 +878,47 @@ abstract contract WitOracleTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitOracleAdminACLs' ------------------------------------------------------ + // --- Full implementation of 'IWitOracleAdminACLs' --------------------------------------------------------------- /// Tells whether given address is included in the active reporters control list. - /// @param _reporter The address to be checked. - function isReporter(address _reporter) public view override returns (bool) { - return WitOracleDataLib.isReporter(_reporter); + /// @param _queryResponseReporter The address to be checked. + function isReporter(address _queryResponseReporter) virtual override public view returns (bool) { + return WitOracleDataLib.isReporter(_queryResponseReporter); } /// Adds given addresses to the active reporters control list. /// @dev Can only be called from the owner address. /// @dev Emits the `ReportersSet` event. - /// @param _reporters List of addresses to be added to the active reporters control list. - function setReporters(address[] memory _reporters) - public - override + /// @param _queryResponseReporters List of addresses to be added to the active reporters control list. + function setReporters(address[] calldata _queryResponseReporters) + virtual override public onlyOwner { - __setReporters(_reporters); + WitOracleDataLib.setReporters(_queryResponseReporters); } /// Removes given addresses from the active reporters control list. /// @dev Can only be called from the owner address. /// @dev Emits the `ReportersUnset` event. /// @param _exReporters List of addresses to be added to the active reporters control list. - function unsetReporters(address[] memory _exReporters) - public - override + function unsetReporters(address[] calldata _exReporters) + virtual override public onlyOwner { - for (uint ix = 0; ix < _exReporters.length; ix ++) { - address _reporter = _exReporters[ix]; - __storage().reporters[_reporter] = false; - } - emit ReportersUnset(_exReporters); + WitOracleDataLib.unsetReporters(_exReporters); } // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- - function __newQueryId(bytes32 _queryRAD, bytes32 _querySLA) - virtual internal view - returns (uint256) - { - return uint(keccak256(abi.encode( - channel(), - block.number, - msg.sender, - _queryRAD, - _querySLA - ))); + function _revertInvalidQueryStatus(Witnet.QueryStatus _queryStatus) virtual internal { + _revert( + string(abi.encodePacked( + "invalid query status: ", + WitOracleDataLib.toString(_queryStatus) + )) + ); } function __postQuery( @@ -950,5 +996,4 @@ abstract contract WitOracleTrustableBase function __storage() virtual internal pure returns (WitOracleDataLib.Storage storage _ptr) { return WitOracleDataLib.data(); } - -} \ No newline at end of file +} diff --git a/contracts/core/trustable/WitOracleTrustableOvm2.sol b/contracts/core/trustable/WitOracleTrustableOvm2.sol index 670cdde4..2fc0321f 100644 --- a/contracts/core/trustable/WitOracleTrustableOvm2.sol +++ b/contracts/core/trustable/WitOracleTrustableOvm2.sol @@ -145,7 +145,7 @@ contract WitOracleTrustableOvm2 { for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { if ( - WitOracleDataLib.seekQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted + getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted ) { Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); if (__request.gasCallback > 0) { From 2a6734c404098e744a5968df11e2bf232f1469a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 7 Oct 2024 18:09:53 +0200 Subject: [PATCH 04/24] feat: WRB.getQuery*StatusTag --- .../core/trustable/WitOracleTrustableBase.sol | 17 +++++++++++++++++ contracts/interfaces/IWitOracle.sol | 2 ++ 2 files changed, 19 insertions(+) diff --git a/contracts/core/trustable/WitOracleTrustableBase.sol b/contracts/core/trustable/WitOracleTrustableBase.sol index 3ff00324..6e8640db 100644 --- a/contracts/core/trustable/WitOracleTrustableBase.sol +++ b/contracts/core/trustable/WitOracleTrustableBase.sol @@ -333,6 +333,14 @@ abstract contract WitOracleTrustableBase } } + function getQueryResponseStatusTag(uint256 _queryId) + virtual override + external view + returns (string memory) + { + return WitOracleDataLib.toString( + getQueryResponseStatus(_queryId) + ); } /// @notice Retrieves the CBOR-encoded buffer containing the Witnet-provided result to the given query. @@ -393,6 +401,15 @@ abstract contract WitOracleTrustableBase } } + + function getQueryStatusTag(uint256 _queryId) + virtual override + external view + returns (string memory) + { + return WitOracleDataLib.toString( + getQueryStatus(_queryId) + ); } function getQueryStatusBatch(uint256[] calldata _queryIds) diff --git a/contracts/interfaces/IWitOracle.sol b/contracts/interfaces/IWitOracle.sol index b5dda33b..895d2306 100644 --- a/contracts/interfaces/IWitOracle.sol +++ b/contracts/interfaces/IWitOracle.sol @@ -63,6 +63,7 @@ interface IWitOracle { /// @notice - 5 => Delivered: at least one response, either successful or with errors, was delivered to the requesting contract. /// @param queryId The unique query identifier. function getQueryResponseStatus(uint256 queryId) external view returns (Witnet.QueryResponseStatus); + function getQueryResponseStatusTag(uint256 queryId) external view returns (string memory); /// @notice Retrieves the CBOR-encoded buffer containing the Witnet-provided result to the given query. /// @param queryId The unique query identifier. @@ -74,6 +75,7 @@ interface IWitOracle { /// @notice Gets current status of given query. function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); + function getQueryStatusTag(uint256 queryId) external view returns (string memory); /// @notice Get current status of all given query ids. function getQueryStatusBatch(uint256[] calldata queryIds) external view returns (Witnet.QueryStatus[] memory); From 3ac2b5c7a5140b7dde493b5e346cc2564ecf11be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 7 Oct 2024 18:13:29 +0200 Subject: [PATCH 05/24] feat: Escrowable pattern --- contracts/patterns/Escrowable.sol | 33 +++++++++++++++++++++++++++++++ contracts/patterns/Payable.sol | 4 ++-- 2 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 contracts/patterns/Escrowable.sol diff --git a/contracts/patterns/Escrowable.sol b/contracts/patterns/Escrowable.sol new file mode 100644 index 00000000..8a6ff736 --- /dev/null +++ b/contracts/patterns/Escrowable.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.4 <0.9.0; + +import "./Payable.sol"; + +abstract contract Escrowable + is + Payable +{ + event Burnt(address indexed from, uint256 value); + event Staked(address indexed from, uint256 value); + event Slashed(address indexed from, uint256 value); + event Unstaked(address indexed from, uint256 value); + event Withdrawn(address indexed from, uint256 value); + + struct Escrow { + uint256 balance; + uint256 collateral; + } + + receive() virtual external payable; + + function collateralOf(address) virtual external view returns (uint256); + function balanceOf(address) virtual external view returns (uint256); + function withdraw() virtual external returns (uint256); + + function __burn(address from, uint256 value) virtual internal; + function __deposit(address from, uint256 value) virtual internal; + function __slash(address from, address to, uint256 value) virtual internal; + function __stake(address from, uint256 value) virtual internal; + function __unstake(address from, uint256 value) virtual internal; +} \ No newline at end of file diff --git a/contracts/patterns/Payable.sol b/contracts/patterns/Payable.sol index 8313a0c7..4aad93f4 100644 --- a/contracts/patterns/Payable.sol +++ b/contracts/patterns/Payable.sol @@ -6,8 +6,8 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract Payable { IERC20 public immutable currency; - event Received(address from, uint256 value); - event Transfer(address to, uint256 value); + event Received(address indexed from, uint256 value); + event Transfer(address indexed to, uint256 value); constructor(address _currency) { currency = IERC20(_currency); From 3ae839b39824fb076c9e3562b27c06a137177129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 8 Oct 2024 11:33:43 +0200 Subject: [PATCH 06/24] chore/feat: prepare for trustlessness --- contracts/core/WitnetUpgradableBase.sol | 41 +- .../core/trustable/WitOracleTrustableBase.sol | 1016 ----------------- .../trustable/WitOracleTrustableDefault.sol | 481 ++++++-- .../trustable/WitOracleTrustableObscuro.sol | 6 +- .../core/trustable/WitOracleTrustableOvm2.sol | 14 +- .../core/trustable/WitOracleTrustableReef.sol | 4 +- .../core/trustless/WitOracleTrustlessBase.sol | 660 +++++++++++ .../trustless/WitOracleTrustlessDefault.sol | 463 ++++++++ .../WitOracleTrustlessUpgradableDefault.sol | 134 +++ contracts/data/WitOracleDataLib.sol | 543 ++++++--- contracts/interfaces/IWitOracleBlocks.sol | 21 + contracts/interfaces/IWitOracleEvents.sol | 5 + .../IWitOracleReporterTrustless.sol | 36 + contracts/libs/WitnetBN254.sol | 110 ++ contracts/patterns/Payable.sol | 3 + 15 files changed, 2252 insertions(+), 1285 deletions(-) delete mode 100644 contracts/core/trustable/WitOracleTrustableBase.sol create mode 100644 contracts/core/trustless/WitOracleTrustlessBase.sol create mode 100644 contracts/core/trustless/WitOracleTrustlessDefault.sol create mode 100644 contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol create mode 100644 contracts/interfaces/IWitOracleBlocks.sol create mode 100644 contracts/interfaces/IWitOracleReporterTrustless.sol create mode 100644 contracts/libs/WitnetBN254.sol diff --git a/contracts/core/WitnetUpgradableBase.sol b/contracts/core/WitnetUpgradableBase.sol index 5c056b7f..78b76124 100644 --- a/contracts/core/WitnetUpgradableBase.sol +++ b/contracts/core/WitnetUpgradableBase.sol @@ -34,11 +34,17 @@ abstract contract WitnetUpgradableBase } /// @dev Reverts if proxy delegatecalls to unexistent method. - fallback() virtual external { - _revert("not implemented"); + /* solhint-disable no-complex-fallback */ + fallback() virtual external { + _revert(string(abi.encodePacked( + "not implemented: 0x", + _toHexString(uint8(bytes1(msg.sig))), + _toHexString(uint8(bytes1(msg.sig << 8))), + _toHexString(uint8(bytes1(msg.sig << 16))), + _toHexString(uint8(bytes1(msg.sig << 24))) + ))); } - function class() virtual public view returns (string memory) { return type(WitnetUpgradableBase).name; } @@ -55,6 +61,15 @@ abstract contract WitnetUpgradableBase // ================================================================================================================ // --- Overrides 'Upgradeable' -------------------------------------------------------------------------------------- + /// Tells whether provided address could eventually upgrade the contract. + function isUpgradableFrom(address _from) external view virtual override returns (bool) { + return ( + // false if the WRB is intrinsically not upgradable, or `_from` is no owner + isUpgradable() + && owner() == _from + ); + } + /// Retrieves human-readable version tag of current implementation. function version() public view virtual override returns (string memory) { return _toString(_WITNET_UPGRADABLE_VERSION); @@ -68,7 +83,7 @@ abstract contract WitnetUpgradableBase bool _condition, string memory _message ) - internal view + virtual internal view { if (!_condition) { _revert(_message); @@ -76,7 +91,7 @@ abstract contract WitnetUpgradableBase } function _revert(string memory _message) - internal view + virtual internal view { revert( string(abi.encodePacked( @@ -87,6 +102,22 @@ abstract contract WitnetUpgradableBase ); } + function _toHexString(uint8 _u) + internal pure + returns (string memory) + { + bytes memory b2 = new bytes(2); + uint8 d0 = uint8(_u / 16) + 48; + uint8 d1 = uint8(_u % 16) + 48; + if (d0 > 57) + d0 += 7; + if (d1 > 57) + d1 += 7; + b2[0] = bytes1(d0); + b2[1] = bytes1(d1); + return string(b2); + } + /// Converts bytes32 into string. function _toString(bytes32 _bytes32) internal pure diff --git a/contracts/core/trustable/WitOracleTrustableBase.sol b/contracts/core/trustable/WitOracleTrustableBase.sol deleted file mode 100644 index 6e8640db..00000000 --- a/contracts/core/trustable/WitOracleTrustableBase.sol +++ /dev/null @@ -1,1016 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../WitnetUpgradableBase.sol"; -import "../../WitOracle.sol"; -import "../../data/WitOracleDataLib.sol"; -import "../../interfaces/IWitOracleLegacy.sol"; -import "../../interfaces/IWitOracleReporter.sol"; -import "../../interfaces/IWitOracleAdminACLs.sol"; -import "../../interfaces/IWitOracleConsumer.sol"; -import "../../libs/WitOracleResultErrorsLib.sol"; -import "../../patterns/Payable.sol"; - -/// @title Witnet Request Board "trustable" base implementation contract. -/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. -/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. -/// The result of the requests will be posted back to this contract by the bridge nodes too. -/// @author The Witnet Foundation -abstract contract WitOracleTrustableBase - is - Payable, - WitOracle, - WitnetUpgradableBase, - IWitOracleLegacy, - IWitOracleReporter, - IWitOracleAdminACLs -{ - using Witnet for bytes; - using Witnet for Witnet.QueryRequest; - using Witnet for Witnet.QueryResponse; - using Witnet for Witnet.RadonSLA; - using Witnet for Witnet.Result; - - using WitnetCBOR for WitnetCBOR.CBOR; - using WitOracleDataLib for WitOracleDataLib.Storage; - - WitOracleRequestFactory public immutable override factory; - WitOracleRadonRegistry public immutable override registry; - - bytes4 public immutable override specs = type(WitOracle).interfaceId; - - function channel() virtual override public view returns (bytes4) { - return bytes4(keccak256(abi.encode(address(this), block.chainid))); - } - - function class() - public view - virtual override(IWitAppliance, WitnetUpgradableBase) - returns (string memory) - { - return type(WitOracleTrustableBase).name; - } - - modifier checkCallbackRecipient( - IWitOracleConsumer _consumer, - uint24 _callbackGasLimit - ) virtual { - _require( - address(_consumer).code.length > 0 - && _consumer.reportableFrom(address(this)) - && _callbackGasLimit > 0, - "invalid callback" - ); _; - } - - modifier checkReward(uint256 _msgValue, uint256 _baseFee) virtual { - _require( - _msgValue >= _baseFee, - "insufficient reward" - ); - _require( - _msgValue <= _baseFee * 10, - "too much reward" - ); _; - } - - modifier checkSLA(Witnet.RadonSLA memory sla) virtual { - _require( - sla.isValid(), - "invalid SLA" - ); _; - } - - /// Asserts the given query is currently in the given status. - modifier inStatus(uint256 _queryId, Witnet.QueryStatus _status) { - if (getQueryStatus(_queryId) != _status) { - _revert(WitOracleDataLib.notInStatusRevertMessage(_status)); - - } else { - _; - } - } - - /// Asserts the caller actually posted the referred query. - modifier onlyRequester(uint256 _queryId) { - _require( - msg.sender == WitOracleDataLib.seekQueryRequest(_queryId).requester, - "not the requester" - ); _; - } - - /// Asserts the caller is authorized as a reporter - modifier onlyReporters { - _require( - __storage().reporters[msg.sender], - "unauthorized reporter" - ); _; - } - - constructor( - WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - address _currency - ) - Ownable(address(msg.sender)) - Payable(_currency) - WitnetUpgradableBase( - _upgradable, - _versionTag, - "io.witnet.proxiable.board" - ) - { - registry = _registry; - factory = _factory; - } - - /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 - /// @dev (i.e. calling methods in IWitOracle) - /// @dev (Until 'function ... abi(...)' modifier is allegedly supported in solc versions >= 0.9.1) - /* solhint-disable payable-fallback */ - /* solhint-disable no-complex-fallback */ - fallback() override external { - _revert(string(abi.encodePacked( - "not implemented: 0x", - Witnet.toHexString(uint8(bytes1(msg.sig))), - Witnet.toHexString(uint8(bytes1(msg.sig << 8))), - Witnet.toHexString(uint8(bytes1(msg.sig << 16))), - Witnet.toHexString(uint8(bytes1(msg.sig << 24))) - ))); - } - - - // ================================================================================================================ - // --- Yet to be implemented virtual methods ---------------------------------------------------------------------- - - /// @notice Estimate the minimum reward required for posting a data request. - /// @param evmGasPrice Expected gas price to pay upon posting the data request. - function estimateBaseFee(uint256 evmGasPrice) virtual public view returns (uint256); - - /// @notice Estimate the minimum reward required for posting a data request with a callback. - /// @param evmGasPrice Expected gas price to pay upon posting the data request. - /// @param evmCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 evmGasPrice, uint24 evmCallbackGas) - virtual public view returns (uint256); - - /// @notice Estimate the extra reward (i.e. over the base fee) to be paid when posting a new - /// @notice data query in order to avoid getting provable "too low incentives" results from - /// @notice the Wit/oracle blockchain. - /// @dev The extra fee gets calculated in proportion to: - /// @param evmGasPrice Tentative EVM gas price at the moment the query result is ready. - /// @param evmWitPrice Tentative nanoWit price in Wei at the moment the query is solved on the Wit/oracle blockchain. - /// @param querySLA The query SLA data security parameters as required for the Wit/oracle blockchain. - function estimateExtraFee(uint256 evmGasPrice, uint256 evmWitPrice, Witnet.RadonSLA memory querySLA) - virtual public view returns (uint256); - - - // ================================================================================================================ - // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ - - /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) virtual override public { - address _owner = owner(); - address[] memory _newReporters; - - if (_owner == address(0)) { - // get owner (and reporters) from _initData - bytes memory _newReportersRaw; - (_owner, _newReportersRaw) = abi.decode(_initData, (address, bytes)); - _transferOwnership(_owner); - _newReporters = abi.decode(_newReportersRaw, (address[])); - } else { - // only owner can initialize: - _require( - msg.sender == _owner, - "not the owner" - ); - // get reporters from _initData - _newReporters = abi.decode(_initData, (address[])); - } - - if ( - __proxiable().codehash != bytes32(0) - && __proxiable().codehash == codehash() - ) { - _revert("already upgraded"); - } - __proxiable().codehash = codehash(); - - _require(address(registry).code.length > 0, "inexistent registry"); - _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); - - // Set reporters, if any - WitOracleDataLib.setReporters(_newReporters); - - emit Upgraded(_owner, base(), codehash(), version()); - } - - /// Tells whether provided address could eventually upgrade the contract. - function isUpgradableFrom(address _from) external view override returns (bool) { - return ( - // false if the WRB is intrinsically not upgradable, or `_from` is no owner - isUpgradable() - && owner() == _from - ); - } - - - // ================================================================================================================ - // --- Partial implementation of IWitOracle -------------------------------------------------------------- - - /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. - /// @dev Fails if the `_queryId` is not in 'Finalized' or 'Expired' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @dev If in 'Expired' status, query reward is transfer back to the requester. - /// @param _queryId The unique query identifier. - function fetchQueryResponse(uint256 _queryId) - virtual override - external - onlyRequester(_queryId) - returns (Witnet.QueryResponse memory _response) - { - Witnet.QueryStatus _queryStatus = getQueryStatus(_queryId); - - uint72 _evmReward; - if (_queryStatus == Witnet.QueryStatus.Expired) { - _evmReward = WitOracleDataLib.seekQueryRequest(_queryId).evmReward; - - } else if (_queryStatus != Witnet.QueryStatus.Finalized) { - _revertInvalidQueryStatus(_queryStatus); - } - - // delete query metadata from storage: - _response = WitOracleDataLib.seekQuery(_queryId).response; - delete __storage().queries[_queryId]; - - if (_evmReward > 0) { - // transfer unused reward to requester, only if the query expired: - __safeTransferTo( - payable(msg.sender), - _evmReward - ); - } - } - - /// Gets the whole Query data contents, if any, no matter its current status. - function getQuery(uint256 _queryId) - public view - virtual override - returns (Witnet.Query memory) - { - return __storage().queries[_queryId]; - } - - /// @notice Gets the current EVM reward the report can claim, if not done yet. - function getQueryEvmReward(uint256 _queryId) - external view - virtual override - returns (uint256) - { - return __storage().queries[_queryId].request.evmReward; - } - - /// @notice Retrieves the RAD hash and SLA parameters of the given query. - /// @param _queryId The unique query identifier. - function getQueryRequest(uint256 _queryId) - external view - override - returns (Witnet.QueryRequest memory) - { - return WitOracleDataLib.seekQueryRequest(_queryId); - } - - /// Retrieves the Witnet-provable result, and metadata, to a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier - function getQueryResponse(uint256 _queryId) - public view - virtual override - returns (Witnet.QueryResponse memory) - { - return WitOracleDataLib.seekQueryResponse(_queryId); - } - - /// @notice Returns query's result current status from a requester's point of view: - /// @notice - 0 => Void: the query is either non-existent or deleted; - /// @notice - 1 => Awaiting: the query has not yet been reported; - /// @notice - 2 => Ready: the query has been succesfully solved; - /// @notice - 3 => Error: the query couldn't get solved due to some issue. - /// @param _queryId The unique query identifier. - function getQueryResponseStatus(uint256 _queryId) - virtual override - public view - returns (Witnet.QueryResponseStatus) - { - Witnet.QueryStatus _queryStatus = getQueryStatus(_queryId); - if (_queryStatus == Witnet.QueryStatus.Finalized) { - bytes storage __cborValues = WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes; - if (__cborValues.length > 0) { - // determine whether stored result is an error by peeking the first byte - return (__cborValues[0] == bytes1(0xd8) - ? Witnet.QueryResponseStatus.Error - : Witnet.QueryResponseStatus.Ready - ); - - } else { - // the result is final but delivered to the requesting address - return Witnet.QueryResponseStatus.Delivered; - } - - } else if (_queryStatus == Witnet.QueryStatus.Posted) { - return Witnet.QueryResponseStatus.Awaiting; - - } else if (_queryStatus == Witnet.QueryStatus.Expired) { - return Witnet.QueryResponseStatus.Expired; - - } else { - return Witnet.QueryResponseStatus.Void; - } - } - - function getQueryResponseStatusTag(uint256 _queryId) - virtual override - external view - returns (string memory) - { - return WitOracleDataLib.toString( - getQueryResponseStatus(_queryId) - ); - } - - /// @notice Retrieves the CBOR-encoded buffer containing the Witnet-provided result to the given query. - /// @param _queryId The unique query identifier. - function getQueryResultCborBytes(uint256 _queryId) - external view - virtual override - returns (bytes memory) - { - return WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes; - } - - /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param _queryId The unique query identifier. - function getQueryResultError(uint256 _queryId) - virtual override - public view - returns (Witnet.ResultError memory) - { - Witnet.QueryResponseStatus _status = getQueryResponseStatus(_queryId); - try WitOracleResultErrorsLib.asResultError(_status, WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes) - returns (Witnet.ResultError memory _resultError) - { - return _resultError; - } - catch Error(string memory _reason) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: string(abi.encodePacked("WitOracleResultErrorsLib: ", _reason)) - }); - } - catch (bytes memory) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: "WitOracleResultErrorsLib: assertion failed" - }); - } - } - - /// Gets current status of given query. - function getQueryStatus(uint256 _queryId) - virtual override - public view - returns (Witnet.QueryStatus) - { - Witnet.Query storage __query = WitOracleDataLib.seekQuery(_queryId); - if (__query.response.resultTimestamp != 0) { - return Witnet.QueryStatus.Finalized; - - } else if (__query.block == 0) { - return Witnet.QueryStatus.Unknown; - - } else if (block.number >= __query.block + 64) { - return Witnet.QueryStatus.Expired; - - } else { - return Witnet.QueryStatus.Posted; - - } - } - - function getQueryStatusTag(uint256 _queryId) - virtual override - external view - returns (string memory) - { - return WitOracleDataLib.toString( - getQueryStatus(_queryId) - ); - } - - function getQueryStatusBatch(uint256[] calldata _queryIds) - virtual override - external view - returns (Witnet.QueryStatus[] memory _status) - { - _status = new Witnet.QueryStatus[](_queryIds.length); - for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { - _status[_ix] = getQueryStatus(_queryIds[_ix]); - } - } - - /// @notice Returns next query id to be generated by the Witnet Request Board. - function getNextQueryId() - external view - override - returns (uint256) - { - return __storage().nonce + 1; - } - - /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and - /// @notice solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be - /// @notice transferred to the reporter who relays back the Witnet-provable result to this request. - /// @dev Reasons to fail: - /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; - /// @dev - invalid SLA parameters were provided; - /// @dev - insufficient value is paid as reward. - /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. - /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. - /// @return _queryId Unique query identifier. - function postQuery( - bytes32 _queryRAD, - Witnet.RadonSLA memory _querySLA - ) - virtual override - public payable - checkReward( - _getMsgValue(), - estimateBaseFee(_getGasPrice(), _queryRAD) - ) - checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postQuery( - _msgSender(), - _queryRAD, - _querySLA, - 0 - ); - // Let Web3 observers know that a new request has been posted - emit WitOracleQuery( - _msgSender(), - _getGasPrice(), - _getMsgValue(), - _queryId, - _queryRAD, - _querySLA - ); - } - - /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and solved by - /// @notice the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be transferred to the - /// @notice reporter who relays back the Witnet-provable result to this request. The Witnet-provable result will be reported - /// @notice directly to the requesting contract. If the report callback fails for any reason, an `WitOracleQueryResponseDeliveryFailed` - /// @notice will be triggered, and the Witnet audit trail will be saved in storage, but not so the actual CBOR-encoded result. - /// @dev Reasons to fail: - /// @dev - the caller is not a contract implementing the IWitOracleConsumer interface; - /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; - /// @dev - invalid SLA parameters were provided; - /// @dev - zero callback gas limit is provided; - /// @dev - insufficient value is paid as reward. - /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. - /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. - /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. - function postQueryWithCallback( - bytes32 _queryRAD, - Witnet.RadonSLA memory _querySLA, - uint24 _queryCallbackGasLimit - ) - virtual override public payable - returns (uint256) - { - return postQueryWithCallback( - IWitOracleConsumer(_msgSender()), - _queryRAD, - _querySLA, - _queryCallbackGasLimit - ); - } - - function postQueryWithCallback( - IWitOracleConsumer _consumer, - bytes32 _queryRAD, - Witnet.RadonSLA memory _querySLA, - uint24 _queryCallbackGasLimit - ) - virtual override public payable - checkCallbackRecipient(_consumer, _queryCallbackGasLimit) - checkReward( - _getMsgValue(), - estimateBaseFeeWithCallback( - _getGasPrice(), - _queryCallbackGasLimit - ) - ) - checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postQuery( - address(_consumer), - _queryRAD, - _querySLA, - _queryCallbackGasLimit - ); - emit WitOracleQuery( - _msgSender(), - _getGasPrice(), - _getMsgValue(), - _queryId, - _queryRAD, - _querySLA - ); - } - - /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and solved by - /// @notice the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be transferred to the - /// @notice reporter who relays back the Witnet-provable result to this request. The Witnet-provable result will be reported - /// @notice directly to the requesting contract. If the report callback fails for any reason, a `WitOracleQueryResponseDeliveryFailed` - /// @notice event will be triggered, and the Witnet audit trail will be saved in storage, but not so the CBOR-encoded result. - /// @dev Reasons to fail: - /// @dev - the caller is not a contract implementing the IWitOracleConsumer interface; - /// @dev - the provided bytecode is empty; - /// @dev - invalid SLA parameters were provided; - /// @dev - zero callback gas limit is provided; - /// @dev - insufficient value is paid as reward. - /// @param _queryUnverifiedBytecode The (unverified) bytecode containing the actual data request to be solved by the Witnet blockchain. - /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. - /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. - function postQueryWithCallback( - bytes calldata _queryUnverifiedBytecode, - Witnet.RadonSLA memory _querySLA, - uint24 _queryCallbackGasLimit - ) - virtual override public payable - returns (uint256) - { - return postQueryWithCallback( - IWitOracleConsumer(_msgSender()), - _queryUnverifiedBytecode, - _querySLA, - _queryCallbackGasLimit - ); - } - - function postQueryWithCallback( - IWitOracleConsumer _consumer, - bytes calldata _queryUnverifiedBytecode, - Witnet.RadonSLA memory _querySLA, - uint24 _queryCallbackGasLimit - ) - virtual override public payable - checkCallbackRecipient(_consumer, _queryCallbackGasLimit) - checkReward( - _getMsgValue(), - estimateBaseFeeWithCallback( - _getGasPrice(), - _queryCallbackGasLimit - ) - ) - checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postQuery( - address(_consumer), - bytes32(0), - _querySLA, - _queryCallbackGasLimit - ); - WitOracleDataLib.seekQueryRequest(_queryId).radonBytecode = _queryUnverifiedBytecode; - emit WitOracleQuery( - _msgSender(), - _getGasPrice(), - _getMsgValue(), - _queryId, - _queryUnverifiedBytecode, - _querySLA - ); - } - - /// Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @param _queryId The unique query identifier. - function upgradeQueryEvmReward(uint256 _queryId) - external payable - virtual override - inStatus(_queryId, Witnet.QueryStatus.Posted) - { - Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryId); - __request.evmReward += uint72(_getMsgValue()); - emit WitOracleQueryUpgrade( - _queryId, - _msgSender(), - _getGasPrice(), - __request.evmReward - ); - } - - - /// =============================================================================================================== - /// --- IWitOracleLegacy --------------------------------------------------------------------------------------- - - /// @notice Estimate the minimum reward required for posting a data request. - /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. - /// @param evmGasPrice Expected gas price to pay upon posting the data request. - /// @param maxResultSize Maximum expected size of returned data (in bytes). - function estimateBaseFee(uint256 evmGasPrice, uint16 maxResultSize) - virtual public view returns (uint256); - - /// @notice Estimate the minimum reward required for posting a data request. - /// @dev Underestimates if the size of returned data is greater than `resultMaxSize`. - /// @param gasPrice Expected gas price to pay upon posting the data request. - /// @param radHash The hash of some Witnet Data Request previously posted in the WitOracleRadonRegistry registry. - function estimateBaseFee(uint256 gasPrice, bytes32 radHash) - public view - virtual override - returns (uint256) - { - // Check this rad hash is actually verified: - registry.lookupRadonRequestResultDataType(radHash); - - // Base fee is actually invariant to max result size: - return estimateBaseFee(gasPrice); - } - - function postRequest( - bytes32 _queryRadHash, - IWitOracleLegacy.RadonSLA calldata _querySLA - ) - virtual override - external payable - returns (uint256) - { - return postQuery( - _queryRadHash, - Witnet.RadonSLA({ - witNumWitnesses: _querySLA.witNumWitnesses, - witUnitaryReward: _querySLA.witUnitaryReward, - maxTallyResultSize: 32 - }) - ); - } - - function postRequestWithCallback( - bytes32 _queryRadHash, - IWitOracleLegacy.RadonSLA calldata _querySLA, - uint24 _queryCallbackGas - ) - virtual override - external payable - returns (uint256) - { - return postQueryWithCallback( - _queryRadHash, - Witnet.RadonSLA({ - witNumWitnesses: _querySLA.witNumWitnesses, - witUnitaryReward: _querySLA.witUnitaryReward, - maxTallyResultSize: 32 - }), - _queryCallbackGas - ); - } - - function postRequestWithCallback( - bytes calldata _queryRadBytecode, - IWitOracleLegacy.RadonSLA calldata _querySLA, - uint24 _queryCallbackGas - ) - virtual override - external payable - returns (uint256) - { - return postQueryWithCallback( - _queryRadBytecode, - Witnet.RadonSLA({ - witNumWitnesses: _querySLA.witNumWitnesses, - witUnitaryReward: _querySLA.witUnitaryReward, - maxTallyResultSize: 32 - }), - _queryCallbackGas - ); - } - - - // ================================================================================================================ - // --- Full implementation of IWitOracleReporter ------------------------------------------------------------------ - - /// @notice Estimates the actual earnings (or loss), in WEI, that a reporter would get by reporting result to given query, - /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on - /// @notice queries providing no actual earnings. - function estimateReportEarnings( - uint256[] calldata _queryIds, - bytes calldata, - uint256 _evmGasPrice, - uint256 _evmWitPrice - ) - external view - virtual override - returns (uint256 _revenues, uint256 _expenses) - { - for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { - if ( - getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted - ) { - Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); - if (__request.gasCallback > 0) { - _expenses += ( - estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) - + estimateExtraFee( - _evmGasPrice, - _evmWitPrice, - Witnet.RadonSLA({ - witNumWitnesses: __request.radonSLA.witNumWitnesses, - witUnitaryReward: __request.radonSLA.witUnitaryReward, - maxTallyResultSize: uint16(0) - }) - ) - ); - } else { - _expenses += ( - estimateBaseFee(_evmGasPrice) - + estimateExtraFee( - _evmGasPrice, - _evmWitPrice, - __request.radonSLA - ) - ); - } - _expenses += _evmWitPrice * __request.radonSLA.witUnitaryReward; - _revenues += __request.evmReward; - } - } - } - - /// @notice Retrieves the Witnet Data Request bytecodes and SLAs of previously posted queries. - /// @dev Returns empty buffer if the query does not exist. - /// @param _queryIds Query identifies. - function extractWitnetDataRequests(uint256[] calldata _queryIds) - external view - virtual override - returns (bytes[] memory _bytecodes) - { - return WitOracleDataLib.extractWitnetDataRequests(registry, _queryIds); - } - - /// Reports the Witnet-provable result to a previously posted request. - /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. - /// @dev Fails if: - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_resultTallyHash` is zero; - /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique identifier of the data request. - /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _resultCborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - external override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - // results cannot be empty: - _require( - _resultCborBytes.length != 0, - "result cannot be empty" - ); - // do actual report and return reward transfered to the reproter: - // solhint-disable not-rely-on-time - return __reportResultAndReward( - _queryId, - uint32(block.timestamp), - _resultTallyHash, - _resultCborBytes - ); - } - - /// Reports the Witnet-provable result to a previously posted request. - /// @dev Fails if: - /// @dev - called from unauthorized address; - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_resultTallyHash` is zero; - /// @dev - length of provided `_resultCborBytes` is zero. - /// @param _queryId The unique query identifier - /// @param _resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. - /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _resultCborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - external - override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - // validate timestamp - _require( - _resultTimestamp > 0, - "bad timestamp" - ); - // results cannot be empty - _require( - _resultCborBytes.length != 0, - "result cannot be empty" - ); - // do actual report and return reward transfered to the reproter: - return __reportResultAndReward( - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - } - - /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. - /// @notice Emits either a WitOracleQueryResponse* or a BatchReportError event per batched report. - /// @dev Fails only if called from unauthorized address. - /// @param _batchResults Array of BatchResult structs, every one containing: - /// - unique query identifier; - /// - timestamp of the solving tally txs in Witnet. If zero is provided, EVM-timestamp will be used instead; - /// - hash of the corresponding data request tx at the Witnet side-chain level; - /// - data request result in raw bytes. - function reportResultBatch(IWitOracleReporter.BatchResult[] calldata _batchResults) - external override - onlyReporters - returns (uint256 _batchReward) - { - for (uint _i = 0; _i < _batchResults.length; _i ++) { - if ( - WitOracleDataLib.seekQueryStatus(_batchResults[_i].queryId) - != Witnet.QueryStatus.Posted - ) { - emit BatchReportError( - _batchResults[_i].queryId, - WitOracleDataLib.notInStatusRevertMessage(Witnet.QueryStatus.Posted) - ); - } else if ( - uint256(_batchResults[_i].resultTimestamp) > block.timestamp - || _batchResults[_i].resultTimestamp == 0 - || _batchResults[_i].resultCborBytes.length == 0 - ) { - emit BatchReportError( - _batchResults[_i].queryId, - string(abi.encodePacked( - class(), - ": invalid report data" - )) - ); - } else { - _batchReward += __reportResult( - _batchResults[_i].queryId, - _batchResults[_i].resultTimestamp, - _batchResults[_i].resultTallyHash, - _batchResults[_i].resultCborBytes - ); - } - } - // Transfer rewards to all reported results in one single transfer to the reporter: - if (_batchReward > 0) { - __safeTransferTo( - payable(msg.sender), - _batchReward - ); - } - } - - - // ================================================================================================================ - // --- Full implementation of 'IWitOracleAdminACLs' --------------------------------------------------------------- - - /// Tells whether given address is included in the active reporters control list. - /// @param _queryResponseReporter The address to be checked. - function isReporter(address _queryResponseReporter) virtual override public view returns (bool) { - return WitOracleDataLib.isReporter(_queryResponseReporter); - } - - /// Adds given addresses to the active reporters control list. - /// @dev Can only be called from the owner address. - /// @dev Emits the `ReportersSet` event. - /// @param _queryResponseReporters List of addresses to be added to the active reporters control list. - function setReporters(address[] calldata _queryResponseReporters) - virtual override public - onlyOwner - { - WitOracleDataLib.setReporters(_queryResponseReporters); - } - - /// Removes given addresses from the active reporters control list. - /// @dev Can only be called from the owner address. - /// @dev Emits the `ReportersUnset` event. - /// @param _exReporters List of addresses to be added to the active reporters control list. - function unsetReporters(address[] calldata _exReporters) - virtual override public - onlyOwner - { - WitOracleDataLib.unsetReporters(_exReporters); - } - - - // ================================================================================================================ - // --- Internal functions ----------------------------------------------------------------------------------------- - - function _revertInvalidQueryStatus(Witnet.QueryStatus _queryStatus) virtual internal { - _revert( - string(abi.encodePacked( - "invalid query status: ", - WitOracleDataLib.toString(_queryStatus) - )) - ); - } - - function __postQuery( - address _requester, - bytes32 _radHash, - Witnet.RadonSLA memory _sla, - uint24 _callbackGasLimit - ) - virtual internal - returns (uint256 _queryId) - { - _queryId = ++ __storage().nonce; //__newQueryId(_radHash, _packedSLA); - Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryId); - _require(__request.requester == address(0), "already posted"); - { - __request.requester = _requester; - __request.gasCallback = _callbackGasLimit; - __request.evmReward = uint72(_getMsgValue()); - __request.radonRadHash = _radHash; - __request.radonSLA = _sla; - } - } - - function __reportResult( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - virtual internal - returns (uint256) - { - return WitOracleDataLib.reportResult( - _getGasPrice(), - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - } - - function __reportResultAndReward( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - virtual internal - returns (uint256 _evmReward) - { - _evmReward = __reportResult( - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - // transfer reward to reporter - __safeTransferTo( - payable(msg.sender), - _evmReward - ); - } - - function __setReporters(address[] memory _reporters) - virtual internal - { - for (uint ix = 0; ix < _reporters.length; ix ++) { - address _reporter = _reporters[ix]; - __storage().reporters[_reporter] = true; - } - emit ReportersSet(_reporters); - } - - /// Returns storage pointer to contents of 'WitnetBoardState' struct. - function __storage() virtual internal pure returns (WitOracleDataLib.Storage storage _ptr) { - return WitOracleDataLib.data(); - } -} diff --git a/contracts/core/trustable/WitOracleTrustableDefault.sol b/contracts/core/trustable/WitOracleTrustableDefault.sol index 1b328c47..e0b6e795 100644 --- a/contracts/core/trustable/WitOracleTrustableDefault.sol +++ b/contracts/core/trustable/WitOracleTrustableDefault.sol @@ -5,7 +5,10 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitOracleTrustableBase.sol"; +import "../WitnetUpgradableBase.sol"; +import "../trustless/WitOracleTrustlessBase.sol"; +import "../../interfaces/IWitOracleAdminACLs.sol"; +import "../../interfaces/IWitOracleReporter.sol"; /// @title Witnet Request Board "trustable" implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -14,18 +17,28 @@ import "./WitOracleTrustableBase.sol"; /// @author The Witnet Foundation contract WitOracleTrustableDefault is - WitOracleTrustableBase + WitnetUpgradableBase, + WitOracleTrustlessBase, + IWitOracleAdminACLs, + IWitOracleReporter { using Witnet for Witnet.RadonSLA; - function class() virtual override public view returns (string memory) { + function class() + virtual override(WitOracleTrustlessBase, WitnetUpgradableBase) + public view + returns (string memory) + { return type(WitOracleTrustableDefault).name; } - uint256 internal immutable __reportResultGasBase; - uint256 internal immutable __reportResultWithCallbackGasBase; - uint256 internal immutable __reportResultWithCallbackRevertGasBase; - uint256 internal immutable __sstoreFromZeroGas; + /// Asserts the caller is authorized as a reporter + modifier onlyReporters { + _require( + __storage().reporters[msg.sender], + "unauthorized reporter" + ); _; + } constructor( WitOracleRadonRegistry _registry, @@ -37,12 +50,16 @@ contract WitOracleTrustableDefault uint256 _reportResultWithCallbackRevertGasBase, uint256 _sstoreFromZeroGas ) - WitOracleTrustableBase( - _registry, - _factory, + Ownable(msg.sender) + Payable(address(0)) + WitnetUpgradableBase( _upgradable, - _versionTag, - address(0) + _versionTag, + "io.witnet.proxiable.board" + ) + WitOracleTrustlessBase( + _registry, + _factory ) { __reportResultGasBase = _reportResultGasBase; @@ -53,127 +70,387 @@ contract WitOracleTrustableDefault // ================================================================================================================ - // --- Overrides 'IWitOracle' ---------------------------------------------------------------------------- + // --- Upgradeable ------------------------------------------------------------------------------------------------ - /// @notice Estimate the minimum reward required for posting a data request. - /// @param _gasPrice Expected gas price to pay upon posting the data request. - function estimateBaseFee(uint256 _gasPrice) - public view + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) virtual override public { + address _owner = owner(); + address[] memory _newReporters; + + if (_owner == address(0)) { + // get owner (and reporters) from _initData + bytes memory _newReportersRaw; + (_owner, _newReportersRaw) = abi.decode(_initData, (address, bytes)); + _transferOwnership(_owner); + _newReporters = abi.decode(_newReportersRaw, (address[])); + } else { + // only owner can initialize: + _require( + msg.sender == _owner, + "not the owner" + ); + // get reporters from _initData + _newReporters = abi.decode(_initData, (address[])); + } + + if ( + __proxiable().codehash != bytes32(0) + && __proxiable().codehash == codehash() + ) { + _revert("already upgraded"); + } + __proxiable().codehash = codehash(); + + _require(address(registry).code.length > 0, "inexistent registry"); + _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); + + // Set reporters, if any + WitOracleDataLib.setReporters(_newReporters); + + emit Upgraded(_owner, base(), codehash(), version()); + } + + + // ================================================================================================================ + // --- IWitOracle ------------------------------------------------------------------------------------------------- + + /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. + /// @dev Fails if the `_queryId` is not in 'Finalized' or 'Expired' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @dev If in 'Expired' status, query reward is transfer back to the requester. + /// @param _queryId The unique query identifier. + function fetchQueryResponse(uint256 _queryId) + virtual override external + onlyRequester(_queryId) + returns (Witnet.QueryResponse memory) + { + try WitOracleDataLib.fetchQueryResponse( + _queryId + + ) returns ( + Witnet.QueryResponse memory _queryResponse, + uint72 _queryEvmExpiredReward + ) { + if (_queryEvmExpiredReward > 0) { + // transfer unused reward to requester, only if the query expired: + __safeTransferTo( + payable(msg.sender), + _queryEvmExpiredReward + ); + } + return _queryResponse; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + /// @notice Returns query's result current status from a requester's point of view: + /// @notice - 0 => Void: the query is either non-existent or deleted; + /// @notice - 1 => Awaiting: the query has not yet been reported; + /// @notice - 2 => Ready: the query has been succesfully solved; + /// @notice - 3 => Error: the query couldn't get solved due to some issue. + /// @param _queryId The unique query identifier. + function getQueryResponseStatus(uint256 _queryId) virtual override - returns (uint256) + public view + returns (Witnet.QueryResponseStatus) { - return _gasPrice * ( - __reportResultGasBase - + 4 * __sstoreFromZeroGas - ); + return WitOracleDataLib.getQueryResponseStatus(_queryId); } - /// @notice Estimate the minimum reward required for posting a data request with a callback. - /// @param _gasPrice Expected gas price to pay upon posting the data request. - /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint24 _callbackGasLimit) + /// Gets current status of given query. + function getQueryStatus(uint256 _queryId) + virtual override public view + returns (Witnet.QueryStatus) + { + return WitOracleDataLib.getQueryStatus(_queryId); + } + + + // ================================================================================================================ + // --- IWitOracleAdminACLs ---------------------------------------------------------------------------------------- + + /// Tells whether given address is included in the active reporters control list. + /// @param _queryResponseReporter The address to be checked. + function isReporter(address _queryResponseReporter) virtual override public view returns (bool) { + return WitOracleDataLib.isReporter(_queryResponseReporter); + } + + /// Adds given addresses to the active reporters control list. + /// @dev Can only be called from the owner address. + /// @dev Emits the `ReportersSet` event. + /// @param _queryResponseReporters List of addresses to be added to the active reporters control list. + function setReporters(address[] calldata _queryResponseReporters) + virtual override public + onlyOwner + { + WitOracleDataLib.setReporters(_queryResponseReporters); + } + + /// Removes given addresses from the active reporters control list. + /// @dev Can only be called from the owner address. + /// @dev Emits the `ReportersUnset` event. + /// @param _exReporters List of addresses to be added to the active reporters control list. + function unsetReporters(address[] calldata _exReporters) + virtual override public + onlyOwner + { + WitOracleDataLib.unsetReporters(_exReporters); + } + + + // ================================================================================================================ + // --- IWitOracleReporter ----------------------------------------------------------------------------------------- + + /// @notice Estimates the actual earnings (or loss), in WEI, that a reporter would get by reporting result to given query, + /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on + /// @notice queries providing no actual earnings. + function estimateReportEarnings( + uint256[] calldata _queryIds, + bytes calldata, + uint256 _evmGasPrice, + uint256 _evmWitPrice + ) + external view virtual override - returns (uint256) + returns (uint256 _revenues, uint256 _expenses) { - uint _reportResultWithCallbackGasThreshold = ( - __reportResultWithCallbackRevertGasBase - + 3 * __sstoreFromZeroGas - ); - if ( - _callbackGasLimit < _reportResultWithCallbackGasThreshold - || __reportResultWithCallbackGasBase + _callbackGasLimit < _reportResultWithCallbackGasThreshold - ) { - return ( - _gasPrice - * _reportResultWithCallbackGasThreshold - ); - } else { - return ( - _gasPrice - * ( - __reportResultWithCallbackGasBase - + _callbackGasLimit - ) - ); + for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { + if ( + getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted + ) { + Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); + if (__request.gasCallback > 0) { + _expenses += ( + estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) + + estimateExtraFee( + _evmGasPrice, + _evmWitPrice, + Witnet.RadonSLA({ + witNumWitnesses: __request.radonSLA.witNumWitnesses, + witUnitaryReward: __request.radonSLA.witUnitaryReward, + maxTallyResultSize: uint16(0) + }) + ) + ); + } else { + _expenses += ( + estimateBaseFee(_evmGasPrice) + + estimateExtraFee( + _evmGasPrice, + _evmWitPrice, + __request.radonSLA + ) + ); + } + _expenses += _evmWitPrice * __request.radonSLA.witUnitaryReward; + _revenues += __request.evmReward; + } } } - /// @notice Estimate the extra reward (i.e. over the base fee) to be paid when posting a new - /// @notice data query in order to avoid getting provable "too low incentives" results from - /// @notice the Wit/oracle blockchain. - /// @dev The extra fee gets calculated in proportion to: - /// @param _evmGasPrice Tentative EVM gas price at the moment the query result is ready. - /// @param _evmWitPrice Tentative nanoWit price in Wei at the moment the query is solved on the Wit/oracle blockchain. - /// @param _querySLA The query SLA data security parameters as required for the Wit/oracle blockchain. - function estimateExtraFee( - uint256 _evmGasPrice, - uint256 _evmWitPrice, - Witnet.RadonSLA memory _querySLA - ) - public view + /// @notice Retrieves the Witnet Data Request bytecodes and SLAs of previously posted queries. + /// @dev Returns empty buffer if the query does not exist. + /// @param _queryIds Query identifies. + function extractWitnetDataRequests(uint256[] calldata _queryIds) + external view virtual override + returns (bytes[] memory _bytecodes) + { + return WitOracleDataLib.extractWitnetDataRequests(registry, _queryIds); + } + + /// Reports the Witnet-provable result to a previously posted request. + /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. + /// @dev Fails if: + /// @dev - the `_queryId` is not in 'Posted' status. + /// @dev - provided `_resultTallyHash` is zero; + /// @dev - length of provided `_result` is zero. + /// @param _queryId The unique identifier of the data request. + /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _resultCborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + external override + onlyReporters + inStatus(_queryId, Witnet.QueryStatus.Posted) returns (uint256) { - return ( - _evmWitPrice * ((3 + _querySLA.witNumWitnesses) * _querySLA.witUnitaryReward) - + (_querySLA.maxTallyResultSize > 32 - ? _evmGasPrice * __sstoreFromZeroGas * ((_querySLA.maxTallyResultSize - 32) / 32) - : 0 - ) + // results cannot be empty: + _require( + _resultCborBytes.length != 0, + "result cannot be empty" + ); + // do actual report and return reward transfered to the reproter: + // solhint-disable not-rely-on-time + return __reportResultAndReward( + _queryId, + uint32(block.timestamp), + _resultTallyHash, + _resultCborBytes ); } - - /// =============================================================================================================== - /// --- IWitOracleLegacy --------------------------------------------------------------------------------------- - - /// @notice Estimate the minimum reward required for posting a data request. - /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. - /// @param _gasPrice Expected gas price to pay upon posting the data request. - /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - function estimateBaseFee(uint256 _gasPrice, uint16 _resultMaxSize) - public view - virtual override + /// Reports the Witnet-provable result to a previously posted request. + /// @dev Fails if: + /// @dev - called from unauthorized address; + /// @dev - the `_queryId` is not in 'Posted' status. + /// @dev - provided `_resultTallyHash` is zero; + /// @dev - length of provided `_resultCborBytes` is zero. + /// @param _queryId The unique query identifier + /// @param _resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. + /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _resultCborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + external + override + onlyReporters + inStatus(_queryId, Witnet.QueryStatus.Posted) returns (uint256) { - return _gasPrice * ( - __reportResultGasBase - + __sstoreFromZeroGas * ( - 4 + (_resultMaxSize == 0 ? 0 : _resultMaxSize - 1) / 32 - ) + // validate timestamp + _require( + _resultTimestamp > 0, + "bad timestamp" + ); + // results cannot be empty + _require( + _resultCborBytes.length != 0, + "result cannot be empty" + ); + // do actual report and return reward transfered to the reproter: + return __reportResultAndReward( + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes ); } + /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. + /// @notice Emits either a WitOracleQueryResponse* or a BatchReportError event per batched report. + /// @dev Fails only if called from unauthorized address. + /// @param _batchResults Array of BatchResult structs, every one containing: + /// - unique query identifier; + /// - timestamp of the solving tally txs in Witnet. If zero is provided, EVM-timestamp will be used instead; + /// - hash of the corresponding data request tx at the Witnet side-chain level; + /// - data request result in raw bytes. + function reportResultBatch(IWitOracleReporter.BatchResult[] calldata _batchResults) + external override + onlyReporters + returns (uint256 _batchReward) + { + for (uint _i = 0; _i < _batchResults.length; _i ++) { + if ( + getQueryStatus(_batchResults[_i].queryId) + != Witnet.QueryStatus.Posted + ) { + emit BatchReportError( + _batchResults[_i].queryId, + WitOracleDataLib.notInStatusRevertMessage(Witnet.QueryStatus.Posted) + ); + } else if ( + uint256(_batchResults[_i].resultTimestamp) > block.timestamp + || _batchResults[_i].resultTimestamp == 0 + || _batchResults[_i].resultCborBytes.length == 0 + ) { + emit BatchReportError( + _batchResults[_i].queryId, + string(abi.encodePacked( + class(), + ": invalid report data" + )) + ); + } else { + _batchReward += __reportResult( + _batchResults[_i].queryId, + _batchResults[_i].resultTimestamp, + _batchResults[_i].resultTallyHash, + _batchResults[_i].resultCborBytes + ); + } + } + // Transfer rewards to all reported results in one single transfer to the reporter: + if (_batchReward > 0) { + __safeTransferTo( + payable(msg.sender), + _batchReward + ); + } + } - // ================================================================================================================ - // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- - /// Gets current transaction price. - function _getGasPrice() - internal view - virtual override - returns (uint256) + /// ================================================================================================================ + /// --- Internal methods ------------------------------------------------------------------------------------------- + + function _require(bool _condition, string memory _reason) + virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) + internal view { - return tx.gasprice; + WitOracleTrustlessBase._require(_condition, _reason); } - /// Gets current payment value. - function _getMsgValue() + function _revert(string memory _reason) + virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) internal view - virtual override + { + WitOracleTrustlessBase._revert(_reason); + } + + function __reportResult( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + virtual internal returns (uint256) { - return msg.value; + return WitOracleDataLib.reportResult( + msg.sender, + tx.gasprice, + uint64(block.number), + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes + ); } - /// Transfers ETHs to given address. - /// @param _to Recipient address. - /// @param _amount Amount of ETHs to transfer. - function __safeTransferTo(address payable _to, uint256 _amount) - internal - virtual override + function __reportResultAndReward( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + virtual internal + returns (uint256 _evmReward) { - payable(_to).transfer(_amount); - } + _evmReward = __reportResult( + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes + ); + // transfer reward to reporter + __safeTransferTo( + payable(msg.sender), + _evmReward + ); + } + } diff --git a/contracts/core/trustable/WitOracleTrustableObscuro.sol b/contracts/core/trustable/WitOracleTrustableObscuro.sol index 316d8fdd..db30a597 100644 --- a/contracts/core/trustable/WitOracleTrustableObscuro.sol +++ b/contracts/core/trustable/WitOracleTrustableObscuro.sol @@ -54,7 +54,7 @@ contract WitOracleTrustableObscuro onlyRequester(_queryId) returns (Witnet.Query memory) { - return WitOracleTrustableBase.getQuery(_queryId); + return super.getQuery(_queryId); } /// @notice Retrieves the whole `Witnet.QueryResponse` record referred to a previously posted Witnet Data Request. @@ -66,7 +66,7 @@ contract WitOracleTrustableObscuro onlyRequester(_queryId) returns (Witnet.QueryResponse memory _response) { - return WitOracleTrustableBase.getQueryResponse(_queryId); + return super.getQueryResponse(_queryId); } /// @notice Gets error code identifying some possible failure on the resolution of the given query. @@ -77,7 +77,7 @@ contract WitOracleTrustableObscuro onlyRequester(_queryId) returns (Witnet.ResultError memory) { - return WitOracleTrustableBase.getQueryResultError(_queryId); + return super.getQueryResultError(_queryId); } } diff --git a/contracts/core/trustable/WitOracleTrustableOvm2.sol b/contracts/core/trustable/WitOracleTrustableOvm2.sol index 2fc0321f..09d14d9b 100644 --- a/contracts/core/trustable/WitOracleTrustableOvm2.sol +++ b/contracts/core/trustable/WitOracleTrustableOvm2.sol @@ -87,7 +87,7 @@ contract WitOracleTrustableOvm2 virtual override returns (uint256) { - return _getCurrentL1Fee(_resultMaxSize) + WitOracleTrustableDefault.estimateBaseFee(_gasPrice, _resultMaxSize); + return _getCurrentL1Fee(_resultMaxSize) + WitOracleTrustlessBase.estimateBaseFee(_gasPrice, _resultMaxSize); } /// @notice Estimate the minimum reward required for posting a data request with a callback. @@ -98,7 +98,7 @@ contract WitOracleTrustableOvm2 virtual override returns (uint256) { - return _getCurrentL1Fee(32) + WitOracleTrustableDefault.estimateBaseFeeWithCallback(_gasPrice, _callbackGasLimit); + return _getCurrentL1Fee(32) + WitOracleTrustlessBase.estimateBaseFeeWithCallback(_gasPrice, _callbackGasLimit); } /// @notice Estimate the extra reward (i.e. over the base fee) to be paid when posting a new @@ -119,7 +119,7 @@ contract WitOracleTrustableOvm2 { return ( _getCurrentL1Fee(_querySLA.maxTallyResultSize) - + WitOracleTrustableDefault.estimateExtraFee( + + WitOracleTrustlessBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, _querySLA @@ -150,8 +150,8 @@ contract WitOracleTrustableOvm2 Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); if (__request.gasCallback > 0) { _expenses += ( - WitOracleTrustableDefault.estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) - + WitOracleTrustableDefault.estimateExtraFee( + WitOracleTrustlessBase.estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) + + WitOracleTrustlessBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, Witnet.RadonSLA({ @@ -163,8 +163,8 @@ contract WitOracleTrustableOvm2 ); } else { _expenses += ( - WitOracleTrustableDefault.estimateBaseFee(_evmGasPrice) - + WitOracleTrustableDefault.estimateExtraFee( + WitOracleTrustlessBase.estimateBaseFee(_evmGasPrice) + + WitOracleTrustlessBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, __request.radonSLA diff --git a/contracts/core/trustable/WitOracleTrustableReef.sol b/contracts/core/trustable/WitOracleTrustableReef.sol index f6067b04..5a65ffa8 100644 --- a/contracts/core/trustable/WitOracleTrustableReef.sol +++ b/contracts/core/trustable/WitOracleTrustableReef.sol @@ -54,7 +54,7 @@ contract WitOracleTrustableReef virtual override returns (uint256) { - return WitOracleTrustableDefault.estimateBaseFee(1, _resultMaxSize); + return WitOracleTrustlessBase.estimateBaseFee(1, _resultMaxSize); } /// @notice Estimate the minimum reward required for posting a data request with a callback. @@ -64,7 +64,7 @@ contract WitOracleTrustableReef virtual override returns (uint256) { - return WitOracleTrustableDefault.estimateBaseFeeWithCallback(1, _callbackGasLimit); + return WitOracleTrustlessBase.estimateBaseFeeWithCallback(1, _callbackGasLimit); } diff --git a/contracts/core/trustless/WitOracleTrustlessBase.sol b/contracts/core/trustless/WitOracleTrustlessBase.sol new file mode 100644 index 00000000..21cd53fa --- /dev/null +++ b/contracts/core/trustless/WitOracleTrustlessBase.sol @@ -0,0 +1,660 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../../WitOracle.sol"; +import "../../data/WitOracleDataLib.sol"; +import "../../interfaces/IWitOracleLegacy.sol"; +import "../../interfaces/IWitOracleConsumer.sol"; +import "../../libs/WitOracleResultErrorsLib.sol"; +import "../../patterns/Payable.sol"; + +/// @title Witnet Request Board "trustless" base implementation contract. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +abstract contract WitOracleTrustlessBase + is + Payable, + WitOracle, + IWitOracleLegacy +{ + using Witnet for Witnet.RadonSLA; + using WitOracleDataLib for WitOracleDataLib.Storage; + + function channel() virtual override public view returns (bytes4) { + return WitOracleDataLib.channel(); + } + + WitOracleRequestFactory public immutable override factory; + WitOracleRadonRegistry public immutable override registry; + + bytes4 public immutable override specs = type(WitOracle).interfaceId; + + uint256 internal immutable __reportResultGasBase; + uint256 internal immutable __reportResultWithCallbackGasBase; + uint256 internal immutable __reportResultWithCallbackRevertGasBase; + uint256 internal immutable __sstoreFromZeroGas; + + modifier checkCallbackRecipient( + IWitOracleConsumer _consumer, + uint24 _evmCallbackGasLimit + ) virtual { + _require( + address(_consumer).code.length > 0 + && _consumer.reportableFrom(address(this)) + && _evmCallbackGasLimit > 0, + "invalid callback" + ); _; + } + + modifier checkReward(uint256 _msgValue, uint256 _baseFee) virtual { + _require( + _msgValue >= _baseFee, + "insufficient reward" + ); + _require( + _msgValue <= _baseFee * 10, + "too much reward" + ); _; + } + + modifier checkSLA(Witnet.RadonSLA memory sla) virtual { + _require( + sla.isValid(), + "invalid SLA" + ); _; + } + + /// Asserts the given query is currently in the given status. + modifier inStatus(uint256 _queryId, Witnet.QueryStatus _status) { + if (getQueryStatus(_queryId) != _status) { + _revert(WitOracleDataLib.notInStatusRevertMessage(_status)); + + } else { + _; + } + } + + /// Asserts the caller actually posted the referred query. + modifier onlyRequester(uint256 _queryId) { + _require( + msg.sender == WitOracleDataLib.seekQueryRequest(_queryId).requester, + "not the requester" + ); _; + } + + constructor( + WitOracleRadonRegistry _registry, + WitOracleRequestFactory _factory + ) + { + registry = _registry; + factory = _factory; + } + + function class() virtual public view returns (string memory); + function getQueryStatus(uint256) virtual public view returns (Witnet.QueryStatus); + function getQueryResponseStatus(uint256) virtual public view returns (Witnet.QueryResponseStatus); + + + // ================================================================================================================ + // --- Payable ---------------------------------------------------------------------------------------------------- + + /// Gets current transaction price. + function _getGasPrice() internal view virtual override returns (uint256) { + return tx.gasprice; + } + + /// Gets message actual sender. + function _getMsgSender() internal view virtual override returns (address) { + return msg.sender; + } + + /// Gets current payment value. + function _getMsgValue() internal view virtual override returns (uint256) { + return msg.value; + } + + /// Transfers ETHs to given address. + /// @param _to Recipient address. + /// @param _amount Amount of ETHs to transfer. + function __safeTransferTo(address payable _to, uint256 _amount) virtual override internal { + payable(_to).transfer(_amount); + } + + + // ================================================================================================================ + // --- IWitOracle (partial) --------------------------------------------------------------------------------------- + + /// @notice Estimate the minimum reward required for posting a data request. + /// @param _evmGasPrice Expected gas price to pay upon posting the data request. + function estimateBaseFee(uint256 _evmGasPrice) + public view + virtual override + returns (uint256) + { + return _evmGasPrice * ( + __reportResultGasBase + + 4 * __sstoreFromZeroGas + ); + } + + /// @notice Estimate the minimum reward required for posting a data request with a callback. + /// @param _evmGasPrice Expected gas price to pay upon posting the data request. + /// @param _evmCallbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _evmGasPrice, uint24 _evmCallbackGasLimit) + public view + virtual override + returns (uint256) + { + uint _reportResultWithCallbackGasThreshold = ( + __reportResultWithCallbackRevertGasBase + + 3 * __sstoreFromZeroGas + ); + if ( + _evmCallbackGasLimit < _reportResultWithCallbackGasThreshold + || __reportResultWithCallbackGasBase + _evmCallbackGasLimit < _reportResultWithCallbackGasThreshold + ) { + return ( + _evmGasPrice + * _reportResultWithCallbackGasThreshold + ); + } else { + return ( + _evmGasPrice + * ( + __reportResultWithCallbackGasBase + + _evmCallbackGasLimit + ) + ); + } + } + + /// @notice Estimate the extra reward (i.e. over the base fee) to be paid when posting a new + /// @notice data query in order to avoid getting provable "too low incentives" results from + /// @notice the Wit/oracle blockchain. + /// @dev The extra fee gets calculated in proportion to: + /// @param _evmGasPrice Tentative EVM gas price at the moment the query result is ready. + /// @param _evmWitPrice Tentative nanoWit price in Wei at the moment the query is solved on the Wit/oracle blockchain. + /// @param _querySLA The query SLA data security parameters as required for the Wit/oracle blockchain. + function estimateExtraFee( + uint256 _evmGasPrice, + uint256 _evmWitPrice, + Witnet.RadonSLA memory _querySLA + ) + public view + virtual override + returns (uint256) + { + return ( + _evmWitPrice * ((3 + _querySLA.witNumWitnesses) * _querySLA.witUnitaryReward) + + (_querySLA.maxTallyResultSize > 32 + ? _evmGasPrice * __sstoreFromZeroGas * ((_querySLA.maxTallyResultSize - 32) / 32) + : 0 + ) + ); + } + + /// Gets the whole Query data contents, if any, no matter its current status. + function getQuery(uint256 _queryId) + public view + virtual override + returns (Witnet.Query memory) + { + return __storage().queries[_queryId]; + } + + /// @notice Gets the current EVM reward the report can claim, if not done yet. + function getQueryEvmReward(uint256 _queryId) + external view + virtual override + returns (uint256) + { + return __storage().queries[_queryId].request.evmReward; + } + + /// @notice Retrieves the RAD hash and SLA parameters of the given query. + /// @param _queryId The unique query identifier. + function getQueryRequest(uint256 _queryId) + external view + override + returns (Witnet.QueryRequest memory) + { + return WitOracleDataLib.seekQueryRequest(_queryId); + } + + /// Retrieves the Witnet-provable result, and metadata, to a previously posted request. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier + function getQueryResponse(uint256 _queryId) + public view + virtual override + returns (Witnet.QueryResponse memory) + { + return WitOracleDataLib.seekQueryResponse(_queryId); + } + + function getQueryResponseStatusTag(uint256 _queryId) + virtual override + external view + returns (string memory) + { + return WitOracleDataLib.toString( + getQueryResponseStatus(_queryId) + ); + } + + /// @notice Retrieves the CBOR-encoded buffer containing the Witnet-provided result to the given query. + /// @param _queryId The unique query identifier. + function getQueryResultCborBytes(uint256 _queryId) + external view + virtual override + returns (bytes memory) + { + return WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes; + } + + /// @notice Gets error code identifying some possible failure on the resolution of the given query. + /// @param _queryId The unique query identifier. + function getQueryResultError(uint256 _queryId) + virtual override + public view + returns (Witnet.ResultError memory) + { + Witnet.QueryResponseStatus _status = getQueryResponseStatus(_queryId); + try WitOracleResultErrorsLib.asResultError(_status, WitOracleDataLib.seekQueryResponse(_queryId).resultCborBytes) + returns (Witnet.ResultError memory _resultError) + { + return _resultError; + } + catch Error(string memory _reason) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: string(abi.encodePacked("WitOracleResultErrorsLib: ", _reason)) + }); + } + catch (bytes memory) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitOracleResultErrorsLib: assertion failed" + }); + } + } + + function getQueryStatusTag(uint256 _queryId) + virtual override + external view + returns (string memory) + { + return WitOracleDataLib.toString( + getQueryStatus(_queryId) + ); + } + + function getQueryStatusBatch(uint256[] calldata _queryIds) + virtual override + external view + returns (Witnet.QueryStatus[] memory _status) + { + _status = new Witnet.QueryStatus[](_queryIds.length); + for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { + _status[_ix] = getQueryStatus(_queryIds[_ix]); + } + } + + /// @notice Returns next query id to be generated by the Witnet Request Board. + function getNextQueryId() + external view + override + returns (uint256) + { + return __storage().nonce + 1; + } + + /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and + /// @notice solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be + /// @notice transferred to the reporter who relays back the Witnet-provable result to this request. + /// @dev Reasons to fail: + /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; + /// @dev - invalid SLA parameters were provided; + /// @dev - insufficient value is paid as reward. + /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. + /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. + /// @return _queryId Unique query identifier. + function postQuery( + bytes32 _queryRAD, + Witnet.RadonSLA memory _querySLA + ) + virtual override + public payable + checkReward( + _getMsgValue(), + estimateBaseFee(_getGasPrice(), _queryRAD) + ) + checkSLA(_querySLA) + returns (uint256 _queryId) + { + _queryId = __postQuery( + _getMsgSender(), + 0, + uint72(_getMsgValue()), + _queryRAD, + _querySLA + + ); + // Let Web3 observers know that a new request has been posted + emit WitOracleQuery( + _getMsgSender(), + _getGasPrice(), + _getMsgValue(), + _queryId, + _queryRAD, + _querySLA + ); + } + + /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and solved by + /// @notice the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be transferred to the + /// @notice reporter who relays back the Witnet-provable result to this request. The Witnet-provable result will be reported + /// @notice directly to the requesting contract. If the report callback fails for any reason, an `WitOracleQueryResponseDeliveryFailed` + /// @notice will be triggered, and the Witnet audit trail will be saved in storage, but not so the actual CBOR-encoded result. + /// @dev Reasons to fail: + /// @dev - the caller is not a contract implementing the IWitOracleConsumer interface; + /// @dev - the RAD hash was not previously verified by the WitOracleRadonRegistry registry; + /// @dev - invalid SLA parameters were provided; + /// @dev - zero callback gas limit is provided; + /// @dev - insufficient value is paid as reward. + /// @param _queryRAD The RAD hash of the data request to be solved by Witnet. + /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. + /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. + function postQueryWithCallback( + bytes32 _queryRAD, + Witnet.RadonSLA memory _querySLA, + uint24 _queryCallbackGasLimit + ) + virtual override public payable + returns (uint256) + { + return postQueryWithCallback( + IWitOracleConsumer(_getMsgSender()), + _queryRAD, + _querySLA, + _queryCallbackGasLimit + ); + } + + function postQueryWithCallback( + IWitOracleConsumer _consumer, + bytes32 _queryRAD, + Witnet.RadonSLA memory _querySLA, + uint24 _queryCallbackGasLimit + ) + virtual override public payable + checkCallbackRecipient(_consumer, _queryCallbackGasLimit) + checkReward( + _getMsgValue(), + estimateBaseFeeWithCallback( + _getGasPrice(), + _queryCallbackGasLimit + ) + ) + checkSLA(_querySLA) + returns (uint256 _queryId) + { + _queryId = __postQuery( + address(_consumer), + _queryCallbackGasLimit, + uint72(_getMsgValue()), + _queryRAD, + _querySLA + ); + emit WitOracleQuery( + _getMsgSender(), + _getGasPrice(), + _getMsgValue(), + _queryId, + _queryRAD, + _querySLA + ); + } + + /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and solved by + /// @notice the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board that will be transferred to the + /// @notice reporter who relays back the Witnet-provable result to this request. The Witnet-provable result will be reported + /// @notice directly to the requesting contract. If the report callback fails for any reason, a `WitOracleQueryResponseDeliveryFailed` + /// @notice event will be triggered, and the Witnet audit trail will be saved in storage, but not so the CBOR-encoded result. + /// @dev Reasons to fail: + /// @dev - the caller is not a contract implementing the IWitOracleConsumer interface; + /// @dev - the provided bytecode is empty; + /// @dev - invalid SLA parameters were provided; + /// @dev - zero callback gas limit is provided; + /// @dev - insufficient value is paid as reward. + /// @param _queryUnverifiedBytecode The (unverified) bytecode containing the actual data request to be solved by the Witnet blockchain. + /// @param _querySLA The data query SLA to be fulfilled on the Witnet blockchain. + /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. + function postQueryWithCallback( + bytes calldata _queryUnverifiedBytecode, + Witnet.RadonSLA memory _querySLA, + uint24 _queryCallbackGasLimit + ) + virtual override public payable + returns (uint256) + { + return postQueryWithCallback( + IWitOracleConsumer(_getMsgSender()), + _queryUnverifiedBytecode, + _querySLA, + _queryCallbackGasLimit + ); + } + + function postQueryWithCallback( + IWitOracleConsumer _consumer, + bytes calldata _queryUnverifiedBytecode, + Witnet.RadonSLA memory _querySLA, + uint24 _queryCallbackGasLimit + ) + virtual override public payable + checkCallbackRecipient(_consumer, _queryCallbackGasLimit) + checkReward( + _getMsgValue(), + estimateBaseFeeWithCallback( + _getGasPrice(), + _queryCallbackGasLimit + ) + ) + checkSLA(_querySLA) + returns (uint256 _queryId) + { + _queryId = __postQuery( + address(_consumer), + _queryCallbackGasLimit, + uint72(_getMsgValue()), + bytes32(0), + _querySLA + ); + WitOracleDataLib.seekQueryRequest(_queryId).radonBytecode = _queryUnverifiedBytecode; + emit WitOracleQuery( + _getMsgSender(), + _getGasPrice(), + _getMsgValue(), + _queryId, + _queryUnverifiedBytecode, + _querySLA + ); + } + + /// Increments the reward of a previously posted request by adding the transaction value to it. + /// @dev Fails if the `_queryId` is not in 'Posted' status. + /// @param _queryId The unique query identifier. + function upgradeQueryEvmReward(uint256 _queryId) + external payable + virtual override + inStatus(_queryId, Witnet.QueryStatus.Posted) + { + Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryId); + __request.evmReward += uint72(_getMsgValue()); + emit WitOracleQueryUpgrade( + _queryId, + _getMsgSender(), + _getGasPrice(), + __request.evmReward + ); + } + + + /// =============================================================================================================== + /// --- IWitOracleLegacy --------------------------------------------------------------------------------------- + + /// @notice Estimate the minimum reward required for posting a data request. + /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. + /// @param _gasPrice Expected gas price to pay upon posting the data request. + /// @param _resultMaxSize Maximum expected size of returned data (in bytes). + function estimateBaseFee(uint256 _gasPrice, uint16 _resultMaxSize) + public view + virtual override + returns (uint256) + { + return _gasPrice * ( + __reportResultGasBase + + __sstoreFromZeroGas * ( + 4 + (_resultMaxSize == 0 ? 0 : _resultMaxSize - 1) / 32 + ) + ); + } + + /// @notice Estimate the minimum reward required for posting a data request. + /// @dev Underestimates if the size of returned data is greater than `resultMaxSize`. + /// @param gasPrice Expected gas price to pay upon posting the data request. + /// @param radHash The hash of some Witnet Data Request previously posted in the WitOracleRadonRegistry registry. + function estimateBaseFee(uint256 gasPrice, bytes32 radHash) + public view + virtual override + returns (uint256) + { + // Check this rad hash is actually verified: + registry.lookupRadonRequestResultDataType(radHash); + + // Base fee is actually invariant to max result size: + return estimateBaseFee(gasPrice); + } + + function postRequest( + bytes32 _queryRadHash, + IWitOracleLegacy.RadonSLA calldata _querySLA + ) + virtual override + external payable + returns (uint256) + { + return postQuery( + _queryRadHash, + Witnet.RadonSLA({ + witNumWitnesses: _querySLA.witNumWitnesses, + witUnitaryReward: _querySLA.witUnitaryReward, + maxTallyResultSize: 32 + }) + ); + } + + function postRequestWithCallback( + bytes32 _queryRadHash, + IWitOracleLegacy.RadonSLA calldata _querySLA, + uint24 _queryCallbackGas + ) + virtual override + external payable + returns (uint256) + { + return postQueryWithCallback( + _queryRadHash, + Witnet.RadonSLA({ + witNumWitnesses: _querySLA.witNumWitnesses, + witUnitaryReward: _querySLA.witUnitaryReward, + maxTallyResultSize: 32 + }), + _queryCallbackGas + ); + } + + function postRequestWithCallback( + bytes calldata _queryRadBytecode, + IWitOracleLegacy.RadonSLA calldata _querySLA, + uint24 _queryCallbackGas + ) + virtual override + external payable + returns (uint256) + { + return postQueryWithCallback( + _queryRadBytecode, + Witnet.RadonSLA({ + witNumWitnesses: _querySLA.witNumWitnesses, + witUnitaryReward: _querySLA.witUnitaryReward, + maxTallyResultSize: 32 + }), + _queryCallbackGas + ); + } + + + // ================================================================================================================ + // --- Internal functions ----------------------------------------------------------------------------------------- + + function _require(bool _condition, string memory _message) virtual internal view { + if (!_condition) { + _revert(_message); + } + } + + function _revert(string memory _message) virtual internal view { + revert( + string(abi.encodePacked( + class(), + ": ", + _message + )) + ); + } + + function _revertWitOracleDataLibUnhandledException() internal view { + _revert(_revertWitOracleDataLibUnhandledExceptionReason()); + } + + function _revertWitOracleDataLibUnhandledExceptionReason() internal pure returns (string memory) { + return string(abi.encodePacked( + type(WitOracleDataLib).name, + ": unhandled assertion" + )); + } + + function __postQuery( + address _requester, + uint24 _evmCallbackGasLimit, + uint72 _evmReward, + bytes32 _radHash, + Witnet.RadonSLA memory _sla + ) + virtual internal + returns (uint256 _queryId) + { + _queryId = ++ __storage().nonce; + Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryId); + _require(__request.requester == address(0), "already posted"); + { + __request.requester = _requester; + __request.gasCallback = _evmCallbackGasLimit; + __request.evmReward = _evmReward; + __request.radonRadHash = _radHash; + __request.radonSLA = _sla; + } + } + + /// Returns storage pointer to contents of 'WitOracleDataLib.Storage' struct. + function __storage() virtual internal pure returns (WitOracleDataLib.Storage storage _ptr) { + return WitOracleDataLib.data(); + } +} diff --git a/contracts/core/trustless/WitOracleTrustlessDefault.sol b/contracts/core/trustless/WitOracleTrustlessDefault.sol new file mode 100644 index 00000000..ebfa7f75 --- /dev/null +++ b/contracts/core/trustless/WitOracleTrustlessDefault.sol @@ -0,0 +1,463 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./WitOracleTrustlessBase.sol"; + +import "../../interfaces/IWitOracleBlocks.sol"; +import "../../interfaces/IWitOracleReporterTrustless.sol"; +import "../../patterns/Escrowable.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +contract WitOracleTrustlessDefault + is + Escrowable, + WitOracleTrustlessBase, + IWitOracleBlocks, + IWitOracleReporterTrustless +{ + using Witnet for Witnet.QueryResponseReport; + + function class() virtual override public view returns (string memory) { + return type(WitOracleTrustlessDefault).name; + } + + /// @notice Number of blocks to await for either a dispute or a proven response to some query. + uint256 immutable public QUERY_AWAITING_BLOCKS; + + /// @notice Amount in wei to be staked upon reporting or disputing some query. + uint256 immutable public QUERY_REPORTING_STAKE; + + modifier checkReward(uint256 _msgValue, uint256 _baseFee) virtual override { + if (_msgValue < _baseFee) { + __burn(msg.sender, _baseFee - _msgValue); + + } else if (_msgValue > _baseFee * 10) { + _revert("too much reward"); + + } _; + } + + constructor( + WitOracleRadonRegistry _registry, + WitOracleRequestFactory _factory, + uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, + uint256 _sstoreFromZeroGas, + uint256 _queryAwaitingBlocks, + uint256 _queryReportingStake + ) + Payable(address(0)) + WitOracleTrustlessBase( + _registry, + _factory + ) + { + __reportResultGasBase = _reportResultGasBase; + __reportResultWithCallbackGasBase = _reportResultWithCallbackGasBase; + __reportResultWithCallbackRevertGasBase = _reportResultWithCallbackRevertGasBase; + __sstoreFromZeroGas = _sstoreFromZeroGas; + + _require(_queryAwaitingBlocks < 64, "too many awaiting blocks"); + _require(_queryReportingStake > 0, "no reporting stake?"); + + QUERY_AWAITING_BLOCKS = _queryAwaitingBlocks; + QUERY_REPORTING_STAKE = _queryReportingStake; + + // store genesis beacon: + __storage().beacons[ + Witnet.WIT_2_GENESIS_BEACON_INDEX + ] = Witnet.Beacon({ + index: Witnet.WIT_2_GENESIS_BEACON_INDEX, + prevIndex: Witnet.WIT_2_GENESIS_BEACON_PREV_INDEX, + prevRoot: Witnet.WIT_2_GENESIS_BEACON_PREV_ROOT, + ddrTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DDR_TALLIES_MERKLE_ROOT, + droTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DRO_TALLIES_MERKLE_ROOT, + nextCommitteeAggPubkey: [ + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_0, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_1, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_2, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 + ] + }); + } + + + // ================================================================================================================ + // --- Escrowable ------------------------------------------------------------------------------------------------- + + receive() external payable virtual override { + __deposit(msg.sender, _getMsgValue()); + } + + function collateralOf(address tenant) + public view + virtual override + returns (uint256) + { + return __storage().escrows[tenant].collateral; + } + + function balanceOf(address tenant) + public view + virtual override + returns (uint256) + { + return __storage().escrows[tenant].balance; + } + + function withdraw() + external + virtual override + returns (uint256 _withdrawn) + { + _withdrawn = WitOracleDataLib.withdraw(msg.sender); + __safeTransferTo( + payable(msg.sender), + _withdrawn + ); + } + + function __burn(address from, uint256 value) + virtual override + internal + { + WitOracleDataLib.burn(from, value); + } + + function __deposit(address from, uint256 value) + virtual override + internal + { + WitOracleDataLib.deposit(from, value); + } + + function __stake(address from, uint256 value) + virtual override + internal + { + WitOracleDataLib.stake(from, value); + } + + function __slash(address from, address to, uint256 value) + virtual override + internal + { + WitOracleDataLib.slash(from, to, value); + } + + function __unstake(address from, uint256 value) + virtual override + internal + { + WitOracleDataLib.unstake(from, value); + } + + + // ================================================================================================================ + // --- IWitOracle (trustlessly) ----------------------------------------------------------------------------------- + + function fetchQueryResponse(uint256 _queryId) + virtual override + external + onlyRequester(_queryId) + returns (Witnet.QueryResponse memory) + { + try WitOracleDataLib.fetchQueryResponseTrustlessly( + _queryId, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns ( + Witnet.QueryResponse memory _queryResponse + ) { + return _queryResponse; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + function getQueryStatus(uint256 _queryId) + virtual override + public view + returns (Witnet.QueryStatus) + { + return WitOracleDataLib.getQueryStatusTrustlessly(_queryId, QUERY_AWAITING_BLOCKS); + } + + /// @notice Returns query's result current status from a requester's point of view: + /// @notice - 0 => Void: the query is either non-existent or deleted; + /// @notice - 1 => Awaiting: the query has not yet been reported; + /// @notice - 2 => Ready: the query has been succesfully solved; + /// @notice - 3 => Error: the query couldn't get solved due to some issue. + /// @param _queryId The unique query identifier. + function getQueryResponseStatus(uint256 _queryId) + virtual override + public view + returns (Witnet.QueryResponseStatus) + { + return WitOracleDataLib.getQueryResponseStatusTrustlessly(_queryId, QUERY_AWAITING_BLOCKS); + } + + + // ================================================================================================================ + // --- IWitOracleBlocks ------------------------------------------------------------------------------------------- + + function determineBeaconIndexFromTimestamp(uint32 timestamp) + virtual override + external pure + returns (uint32) + { + return Witnet.determineBeaconIndexFromTimestamp(timestamp); + } + + function determineEpochFromTimestamp(uint32 timestamp) + virtual override + external pure + returns (uint32) + { + return Witnet.determineEpochFromTimestamp(timestamp); + } + + function getBeaconByIndex(uint32 index) + virtual override + public view + returns (Witnet.Beacon memory) + { + return WitOracleDataLib.seekBeacon(index); + } + + function getGenesisBeacon() + virtual override + external pure + returns (Witnet.Beacon memory) + { + return Witnet.Beacon({ + index: Witnet.WIT_2_GENESIS_BEACON_INDEX, + prevIndex: Witnet.WIT_2_GENESIS_BEACON_PREV_INDEX, + prevRoot: Witnet.WIT_2_GENESIS_BEACON_PREV_ROOT, + ddrTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DDR_TALLIES_MERKLE_ROOT, + droTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DRO_TALLIES_MERKLE_ROOT, + nextCommitteeAggPubkey: [ + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_0, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_1, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_2, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 + ] + }); + } + + function getLastKnownBeacon() + virtual override + public view + returns (Witnet.Beacon memory) + { + return WitOracleDataLib.getLastKnownBeacon(); + } + + function getLastKnownBeaconIndex() + virtual override + public view + returns (uint32) + { + return uint32(WitOracleDataLib.getLastKnownBeaconIndex()); + } + + function rollupBeacons(Witnet.FastForward[] calldata _witOracleRollup) + virtual override public + returns (Witnet.Beacon memory) + { + try WitOracleDataLib.rollupBeacons( + _witOracleRollup + ) returns ( + Witnet.Beacon memory _witOracleHead + ) { + return _witOracleHead; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + + // ================================================================================================================ + // --- IWitOracleReporterTrustless -------------------------------------------------------------------------------- + + function claimQueryReward(uint256 _queryId) + virtual override external + returns (uint256) + { + try WitOracleDataLib.claimQueryReward( + _queryId, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns ( + uint256 _evmReward + ) { + return _evmReward; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + function claimQueryRewardsBatch(uint256[] calldata _queryIds) + virtual override external + returns (uint256 _evmTotalReward) + { + for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { + try WitOracleDataLib.claimQueryReward( + _queryIds[_ix], + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns (uint256 _evmReward) { + _evmTotalReward += _evmReward; + + } catch Error(string memory _reason) { + emit BatchReportError( + _queryIds[_ix], + _reason + ); + + } catch (bytes memory) { + emit BatchReportError( + _queryIds[_ix], + _revertWitOracleDataLibUnhandledExceptionReason() + ); + } + } + } + + function disputeQueryResponse(uint256 _queryId) + virtual override external + inStatus(_queryId, Witnet.QueryStatus.Reported) + returns (uint256) + { + return WitOracleDataLib.disputeQueryResponse( + _queryId, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + ); + } + + function reportQueryResponse(Witnet.QueryResponseReport calldata _responseReport) + virtual override public + returns (uint256) + { + try WitOracleDataLib.reportQueryResponseTrustlessly( + _responseReport, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns (uint256 _evmReward) { + return _evmReward; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + function reportQueryResponseBatch(Witnet.QueryResponseReport[] calldata _responseReports) + virtual override external + returns (uint256 _evmTotalReward) + { + for (uint _ix = 0; _ix < _responseReports.length; _ix ++) { + Witnet.QueryResponseReport calldata _responseReport = _responseReports[_ix]; + try WitOracleDataLib.reportQueryResponseTrustlessly( + _responseReport, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns (uint256 _evmPartialReward) { + _evmTotalReward += _evmPartialReward; + + } catch Error(string memory _reason) { + emit BatchReportError( + _responseReport.queryId, + _reason + ); + + } catch (bytes memory) { + emit BatchReportError( + _responseReport.queryId, + _revertWitOracleDataLibUnhandledExceptionReason() + ); + } + } + } + + function rollupQueryResponseProof( + Witnet.FastForward[] calldata _witOracleRollup, + Witnet.QueryResponseReport calldata _responseReport, + bytes32[] calldata _queryResponseReportMerkleProof + ) + virtual override external + returns (uint256) + { + try WitOracleDataLib.rollupQueryResponseProof( + _witOracleRollup, + _responseReport, + _queryResponseReportMerkleProof, + QUERY_AWAITING_BLOCKS, + QUERY_REPORTING_STAKE + + ) returns ( + uint256 _evmReward + ) { + return _evmReward; + } + catch Error(string memory _reason) { + _revert(_reason); + } + catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + function rollupQueryResultProof( + Witnet.FastForward[] calldata _witOracleRollup, + Witnet.QueryReport calldata _queryReport, + bytes32[] calldata _queryReportMerkleProof + ) + virtual override external + returns (Witnet.Result memory) + { + try WitOracleDataLib.rollupQueryResultProof( + _witOracleRollup, + _queryReport, + _queryReportMerkleProof + + ) returns ( + Witnet.Result memory _queryResult + ) { + return _queryResult; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } +} diff --git a/contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol b/contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol new file mode 100644 index 00000000..e43a9612 --- /dev/null +++ b/contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol @@ -0,0 +1,134 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./WitOracleTrustlessDefault.sol"; +import "../WitnetUpgradableBase.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +contract WitOracleTrustlessUpgradableDefault + is + WitOracleTrustlessDefault, + WitnetUpgradableBase +{ + function class() + virtual override(WitOracleTrustlessDefault, WitnetUpgradableBase) + public view + returns (string memory) + { + return type(WitOracleTrustlessUpgradableDefault).name; + } + + constructor( + WitOracleRadonRegistry _registry, + WitOracleRequestFactory _factory, + bool _upgradable, + bytes32 _versionTag, + uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, + uint256 _sstoreFromZeroGas, + uint256 _queryAwaitingBlocks, + uint256 _queryReportingStake + ) + Ownable(msg.sender) + WitnetUpgradableBase( + _upgradable, + _versionTag, + "io.witnet.proxiable.board" + ) + WitOracleTrustlessDefault( + _registry, + _factory, + _reportResultGasBase, + _reportResultWithCallbackGasBase, + _reportResultWithCallbackRevertGasBase, + _sstoreFromZeroGas, + _queryAwaitingBlocks, + _queryReportingStake + ) + {} + + + // ================================================================================================================ + // ---Upgradeable ------------------------------------------------------------------------------------------------- + + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) virtual override public { + address _owner = owner(); + + if (_owner == address(0)) { + // initializing for the first time... + + // transfer ownership to first initializer + _transferOwnership(_owner); + + // save into storage genesis beacon + __storage().beacons[ + Witnet.WIT_2_GENESIS_BEACON_INDEX + ] = Witnet.Beacon({ + index: Witnet.WIT_2_GENESIS_BEACON_INDEX, + prevIndex: Witnet.WIT_2_GENESIS_BEACON_PREV_INDEX, + prevRoot: Witnet.WIT_2_GENESIS_BEACON_PREV_ROOT, + ddrTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DDR_TALLIES_MERKLE_ROOT, + droTalliesMerkleRoot: Witnet.WIT_2_GENESIS_BEACON_DRO_TALLIES_MERKLE_ROOT, + nextCommitteeAggPubkey: [ + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_0, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_1, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_2, + Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 + ] + }); + + } else { + // only owner can initialize a new upgrade: + _require( + msg.sender == _owner, + "not the owner" + ); + } + + if ( + __proxiable().codehash != bytes32(0) + && __proxiable().codehash == codehash() + ) { + _revert("already upgraded"); + } + __proxiable().codehash = codehash(); + + _require(address(registry).code.length > 0, "inexistent registry"); + _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); + + // Settle given beacon, if any: + if (_initData.length > 0) { + Witnet.Beacon memory _beacon = abi.decode(_initData, (Witnet.Beacon)); + __storage().beacons[_beacon.index] = _beacon; + } + + emit Upgraded(_owner, base(), codehash(), version()); + } + + + /// ================================================================================================================ + /// --- Internal methods ------------------------------------------------------------------------------------------- + + function _require(bool _condition, string memory _reason) + virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) + internal view + { + WitOracleTrustlessBase._require(_condition, _reason); + } + + function _revert(string memory _reason) + virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) + internal view + { + WitOracleTrustlessBase._revert(_reason); + } +} diff --git a/contracts/data/WitOracleDataLib.sol b/contracts/data/WitOracleDataLib.sol index 1bd903d0..e78a262c 100644 --- a/contracts/data/WitOracleDataLib.sol +++ b/contracts/data/WitOracleDataLib.sol @@ -39,6 +39,11 @@ library WitOracleDataLib { // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- + /// Unique relay channel identifying the sidechain and request board instance from where data queries are requested. + function channel() internal view returns (bytes4) { + return bytes4(keccak256(abi.encode(address(this), block.chainid))); + } + /// Returns storage pointer to contents of 'WitnetBoardState' struct. function data() internal pure returns (Storage storage _ptr) { @@ -47,12 +52,12 @@ library WitOracleDataLib { } } - function queryHashOf(Storage storage self, bytes4 channel, uint256 queryId) + function queryHashOf(Storage storage self, uint256 queryId) internal view returns (bytes32) { Witnet.Query storage __query = self.queries[queryId]; return keccak256(abi.encode( - channel, + channel(), queryId, blockhash(__query.block), __query.request.radonRadHash != bytes32(0) @@ -62,26 +67,6 @@ library WitOracleDataLib { )); } - /// Saves query response into storage. - function saveQueryResponse( - address evmReporter, - uint64 evmFinalityBlock, - uint256 queryId, - uint32 resultTimestamp, - bytes32 resultDrTxHash, - bytes memory resultCborBytes - ) internal - { - seekQuery(queryId).response = Witnet.QueryResponse({ - reporter: evmReporter, - finality: evmFinalityBlock, - resultTimestamp: resultTimestamp, - resultDrTxHash: resultDrTxHash, - resultCborBytes: resultCborBytes, - disputer: address(0) - }); - } - /// Gets query storage by query id. function seekQuery(uint256 queryId) internal view returns (Witnet.Query storage) { return data().queries[queryId]; @@ -182,20 +167,46 @@ library WitOracleDataLib { /// ======================================================================= /// --- IWitOracle -------------------------------------------------------- + + function fetchQueryResponse(uint256 queryId) public returns ( + Witnet.QueryResponse memory _queryResponse, + uint72 _queryEvmExpiredReward + ) + { + Witnet.Query storage __query = seekQuery(queryId); + Witnet.QueryStatus _queryStatus = getQueryStatus(queryId); + + _queryEvmExpiredReward = __query.request.evmReward; + __query.request.evmReward = 0; + + if ( + _queryStatus != Witnet.QueryStatus.Expired + && _queryStatus != Witnet.QueryStatus.Finalized + ) { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(_queryStatus) + ))); + } + + _queryResponse = __query.response; + delete data().queries[queryId]; + } function fetchQueryResponseTrustlessly( - uint256 evmQueryReportingStake, uint256 queryId, - Witnet.QueryStatus queryStatus + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake ) public returns (Witnet.QueryResponse memory _queryResponse) { Witnet.Query storage __query = seekQuery(queryId); + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly(queryId, evmQueryAwaitingBlocks); uint72 _evmReward = __query.request.evmReward; __query.request.evmReward = 0; - if (queryStatus == Witnet.QueryStatus.Expired) { + if (_queryStatus == Witnet.QueryStatus.Expired) { if (_evmReward > 0) { if (__query.response.disputer != address(0)) { // transfer reporter's stake to the disputer @@ -212,10 +223,10 @@ library WitOracleDataLib { } } - } else if (queryStatus != Witnet.QueryStatus.Finalized) { + } else if (_queryStatus != Witnet.QueryStatus.Finalized) { revert(string(abi.encodePacked( "invalid query status: ", - toString(queryStatus) + toString(_queryStatus) ))); } @@ -226,7 +237,24 @@ library WitOracleDataLib { // transfer unused reward to requester: if (_evmReward > 0) { deposit(msg.sender, _evmReward); - } + } + } + + function getQueryStatus(uint256 queryId) public view returns (Witnet.QueryStatus) { + Witnet.Query storage __query = seekQuery(queryId); + + if (__query.response.resultTimestamp != 0) { + return Witnet.QueryStatus.Finalized; + + } else if (__query.block == 0) { + return Witnet.QueryStatus.Unknown; + + } else if (block.number >= __query.block + 64) { + return Witnet.QueryStatus.Expired; + + } else { + return Witnet.QueryStatus.Posted; + } } function getQueryStatusTrustlessly( @@ -236,6 +264,7 @@ library WitOracleDataLib { public view returns (Witnet.QueryStatus) { Witnet.Query storage __query = seekQuery(queryId); + if (__query.response.resultTimestamp != 0) { if (block.number >= __query.response.finality) { if (__query.response.disputer != address(0)) { @@ -266,6 +295,34 @@ library WitOracleDataLib { } } + function getQueryResponseStatus(uint256 queryId) public view returns (Witnet.QueryResponseStatus) { + Witnet.QueryStatus _queryStatus = getQueryStatus(queryId); + + if (_queryStatus == Witnet.QueryStatus.Finalized) { + bytes storage __cborValues = WitOracleDataLib.seekQueryResponse(queryId).resultCborBytes; + if (__cborValues.length > 0) { + // determine whether stored result is an error by peeking the first byte + return (__cborValues[0] == bytes1(0xd8) + ? Witnet.QueryResponseStatus.Error + : Witnet.QueryResponseStatus.Ready + ); + + } else { + // the result is final but delivered to the requesting address + return Witnet.QueryResponseStatus.Delivered; + } + + } else if (_queryStatus == Witnet.QueryStatus.Posted) { + return Witnet.QueryResponseStatus.Awaiting; + + } else if (_queryStatus == Witnet.QueryStatus.Expired) { + return Witnet.QueryResponseStatus.Expired; + + } else { + return Witnet.QueryResponseStatus.Void; + } + } + function getQueryResponseStatusTrustlessly( uint256 queryId, uint256 evmQueryAwaitingBlocks @@ -365,22 +422,24 @@ library WitOracleDataLib { } } } - - function reportQueryResponse( + + function reportResult( address evmReporter, uint256 evmGasPrice, uint64 evmFinalityBlock, - Witnet.QueryResponseReport calldata report + uint256 queryId, + uint32 witDrResultTimestamp, + bytes32 witDrTxHash, + bytes calldata witDrResultCborBytes ) public returns (uint256 evmReward) - // todo: turn into private { // read requester address and whether a callback was requested: - Witnet.QueryRequest storage __request = seekQueryRequest(report.queryId); - + Witnet.QueryRequest storage __request = seekQueryRequest(queryId); + // read query EVM reward: evmReward = __request.evmReward; - + // set EVM reward right now as to avoid re-entrancy attacks: __request.evmReward = 0; @@ -390,81 +449,86 @@ library WitOracleDataLib { uint256 evmCallbackActualGas, bool evmCallbackSuccess, string memory evmCallbackRevertMessage - ) = reportQueryResponseCallback( + ) = __reportResultCallback( __request.requester, __request.gasCallback, evmFinalityBlock, - report + queryId, + witDrResultTimestamp, + witDrTxHash, + witDrResultCborBytes ); if (evmCallbackSuccess) { // => the callback run successfully emit IWitOracleEvents.WitOracleQueryReponseDelivered( - report.queryId, + queryId, evmGasPrice, evmCallbackActualGas ); } else { // => the callback reverted emit IWitOracleEvents.WitOracleQueryResponseDeliveryFailed( - report.queryId, + queryId, evmGasPrice, evmCallbackActualGas, bytes(evmCallbackRevertMessage).length > 0 ? evmCallbackRevertMessage : "WitOracleDataLib: callback exceeded gas limit", - report.witDrResultCborBytes + witDrResultCborBytes ); } // upon delivery, successfull or not, the audit trail is saved into storage, // but not the actual result which was intended to be passed over to the requester: - saveQueryResponse( + __saveQueryResponse( evmReporter, evmFinalityBlock, - report.queryId, - Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), - report.witDrTxHash, + queryId, + witDrResultTimestamp, + witDrTxHash, hex"" ); } else { // => no callback is involved emit IWitOracleEvents.WitOracleQueryResponse( - report.queryId, + queryId, evmGasPrice ); // write query result and audit trail data into storage - saveQueryResponse( + __saveQueryResponse( evmReporter, evmFinalityBlock, - report.queryId, - Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), - report.witDrTxHash, - report.witDrResultCborBytes + queryId, + witDrResultTimestamp, + witDrTxHash, + witDrResultCborBytes ); } } - function reportQueryResponseCallback( + function __reportResultCallback( address evmRequester, uint24 evmCallbackGasLimit, uint64 evmFinalityBlock, - Witnet.QueryResponseReport calldata report + uint256 queryId, + uint32 witDrResultTimestamp, + bytes32 witDrTxHash, + bytes calldata witDrResultCborBytes ) - public returns ( + private returns ( uint256 evmCallbackActualGas, bool evmCallbackSuccess, string memory evmCallbackRevertMessage ) - // todo: turn into private { evmCallbackActualGas = gasleft(); - if (report.witDrResultCborBytes[0] == bytes1(0xd8)) { - WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(report.witDrResultCborBytes).readArray(); + if (witDrResultCborBytes[0] == bytes1(0xd8)) { + WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(witDrResultCborBytes).readArray(); if (_errors.length < 2) { // try to report result with unknown error: try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( - report.queryId, - Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), - report.witDrTxHash, + queryId, + witDrResultTimestamp, + witDrTxHash, evmFinalityBlock, Witnet.ResultErrorCodes.Unknown, WitnetCBOR.CBOR({ @@ -477,91 +541,63 @@ library WitOracleDataLib { }) ) { evmCallbackSuccess = true; + } catch Error(string memory err) { evmCallbackRevertMessage = err; } - } else { // try to report result with parsable error: try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( - report.queryId, - Witnet.determineEpochFromTimestamp(report.witDrResultEpoch), - report.witDrTxHash, + queryId, + witDrResultTimestamp, + witDrTxHash, evmFinalityBlock, Witnet.ResultErrorCodes(_errors[0].readUint()), _errors[0] ) { evmCallbackSuccess = true; + } catch Error(string memory err) { evmCallbackRevertMessage = err; } } - } else { // try to report result result with no error : try IWitOracleConsumer(evmRequester).reportWitOracleResultValue{gas: evmCallbackGasLimit}( - report.queryId, - Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), - report.witDrTxHash, + queryId, + witDrResultTimestamp, + witDrTxHash, evmFinalityBlock, - WitnetCBOR.fromBytes(report.witDrResultCborBytes) + WitnetCBOR.fromBytes(witDrResultCborBytes) ) { evmCallbackSuccess = true; + } catch Error(string memory err) { evmCallbackRevertMessage = err; + } catch (bytes memory) {} } evmCallbackActualGas -= gasleft(); } - function reportQueryResponseTrustlessly( - bytes4 channel, - uint256 evmGasPrice, - uint256 evmQueryAwaitingBlocks, - uint256 evmQueryReportingStake, - Witnet.QueryStatus queryStatus, - Witnet.QueryResponseReport calldata queryResponseReport - ) - public returns (uint256) + /// Saves query response into storage. + function __saveQueryResponse( + address evmReporter, + uint64 evmFinalityBlock, + uint256 queryId, + uint32 witDrResultTimestamp, + bytes32 witDrTxHash, + bytes memory witDrResultCborBytes + ) private { - (bool _isValidQueryResponseReport, string memory _queryResponseReportInvalidError) = isValidQueryResponseReport( - channel, - queryResponseReport - ); - require( - _isValidQueryResponseReport, - _queryResponseReportInvalidError - ); - - address _queryReporter; - if (queryStatus == Witnet.QueryStatus.Posted) { - _queryReporter = queryResponseReport.queryRelayer(); - require( - _queryReporter == msg.sender, - "unauthorized query reporter" - ); - } - - else if (queryStatus == Witnet.QueryStatus.Delayed) { - _queryReporter = msg.sender; - - } else { - revert(string(abi.encodePacked( - "invalid query status: ", - toString(queryStatus) - ))); - } - - // stake from caller's balance: - stake(msg.sender, evmQueryReportingStake); - - // save query response into storage: - return reportQueryResponse( - _queryReporter, - evmGasPrice, - uint64(block.number + evmQueryAwaitingBlocks), - queryResponseReport - ); + seekQuery(queryId).response = Witnet.QueryResponse({ + reporter: evmReporter, + finality: evmFinalityBlock, + resultTimestamp: witDrResultTimestamp, + resultDrTxHash: witDrTxHash, + resultCborBytes: witDrResultCborBytes, + disputer: address(0) + }); } @@ -569,9 +605,9 @@ library WitOracleDataLib { /// --- IWitOracleReporterTrustless --------------------------------------- function claimQueryReward( - uint256 evmQueryReportingStake, - uint256 queryId, - Witnet.QueryStatus queryStatus + uint256 queryId, + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake ) public returns (uint256 evmReward) { @@ -592,7 +628,11 @@ library WitOracleDataLib { evmReward ); - if (queryStatus == Witnet.QueryStatus.Finalized) { + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly( + queryId, + evmQueryAwaitingBlocks + ); + if (_queryStatus == Witnet.QueryStatus.Finalized) { // only the reporter can claim, require( msg.sender == __query.request.requester, @@ -604,7 +644,7 @@ library WitOracleDataLib { evmQueryReportingStake ); - } else if (queryStatus == Witnet.QueryStatus.Expired) { + } else if (_queryStatus == Witnet.QueryStatus.Expired) { if (__query.response.disputer != address(0)) { // only the disputer can claim, require( @@ -635,15 +675,15 @@ library WitOracleDataLib { } else { revert(string(abi.encodePacked( "invalid query status: ", - toString(queryStatus) + toString(_queryStatus) ))); } } function disputeQueryResponse( + uint256 queryId, uint256 evmQueryAwaitingBlocks, - uint256 evmQueryReportingStake, - uint256 queryId + uint256 evmQueryReportingStake ) public returns (uint256 evmPotentialReward) { @@ -661,20 +701,71 @@ library WitOracleDataLib { ); } + function reportQueryResponseTrustlessly( + Witnet.QueryResponseReport calldata responseReport, + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake + ) + public returns (uint256) + { + (bool _isValidQueryResponseReport, string memory _queryResponseReportInvalidError) = isValidQueryResponseReport( + responseReport + ); + require( + _isValidQueryResponseReport, + _queryResponseReportInvalidError + ); + + address _queryReporter; + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly( + responseReport.queryId, + evmQueryAwaitingBlocks + ); + if (_queryStatus == Witnet.QueryStatus.Posted) { + _queryReporter = responseReport.queryRelayer(); + require( + _queryReporter == msg.sender, + "unauthorized query reporter" + ); + } + + else if (_queryStatus == Witnet.QueryStatus.Delayed) { + _queryReporter = msg.sender; + + } else { + revert(string(abi.encodePacked( + "invalid query status: ", + toString(_queryStatus) + ))); + } + + // stake from caller's balance: + stake(msg.sender, evmQueryReportingStake); + + // save query response into storage: + return reportResult( + _queryReporter, + tx.gasprice, + uint64(block.number + evmQueryAwaitingBlocks), + responseReport.queryId, + Witnet.determineTimestampFromEpoch(responseReport.witDrResultEpoch), + responseReport.witDrTxHash, + responseReport.witDrResultCborBytes + ); + } + function rollupQueryResponseProof( - bytes4 channel, - uint256 evmQueryReportingStake, - Witnet.QueryResponseReport calldata queryResponseReport, - Witnet.QueryStatus queryStatus, Witnet.FastForward[] calldata witOracleRollup, - bytes32[] calldata ddrTalliesMerkleTrie + Witnet.QueryResponseReport calldata responseReport, + bytes32[] calldata ddrTalliesMerkleTrie, + uint256 evmQueryAwaitingBlocks, + uint256 evmQueryReportingStake ) public returns (uint256 evmTotalReward) { // validate query response report (bool _isValidQueryResponseReport, string memory _queryResponseReportInvalidError) = isValidQueryResponseReport( - channel, - queryResponseReport + responseReport ); require(_isValidQueryResponseReport, _queryResponseReportInvalidError); @@ -682,28 +773,32 @@ library WitOracleDataLib { Witnet.Beacon memory _witOracleHead = rollupBeacons(witOracleRollup); require( _witOracleHead.index == Witnet.determineBeaconIndexFromEpoch( - queryResponseReport.witDrResultEpoch - ) + 1, "mismatching head beacon" + responseReport.witDrResultEpoch + ) + 1, "misleading head beacon" ); // validate merkle proof require( _witOracleHead.ddrTalliesMerkleRoot == Witnet.merkleRoot( ddrTalliesMerkleTrie, - queryResponseReport.tallyHash() + responseReport.tallyHash() ), "invalid merkle proof" ); - Witnet.Query storage __query = seekQuery(queryResponseReport.queryId); + Witnet.Query storage __query = seekQuery(responseReport.queryId); // process query response report depending on query's current status ... { - if (queryStatus == Witnet.QueryStatus.Reported) { + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly( + responseReport.queryId, + evmQueryAwaitingBlocks + ); + if (_queryStatus == Witnet.QueryStatus.Reported) { // check that proven report actually differs from what was formerly reported require( keccak256(abi.encode( - queryResponseReport.witDrTxHash, - queryResponseReport.witDrResultEpoch, - queryResponseReport.witDrResultCborBytes + responseReport.witDrTxHash, + responseReport.witDrResultEpoch, + responseReport.witDrResultCborBytes )) != keccak256(abi.encode( __query.response.resultDrTxHash, Witnet.determineEpochFromTimestamp(__query.response.resultTimestamp), @@ -724,17 +819,17 @@ library WitOracleDataLib { // update query's response data into storage: __query.response.reporter = msg.sender; - __query.response.resultCborBytes = queryResponseReport.witDrResultCborBytes; - __query.response.resultDrTxHash = queryResponseReport.witDrTxHash; - __query.response.resultTimestamp = Witnet.determineTimestampFromEpoch(queryResponseReport.witDrResultEpoch); + __query.response.resultCborBytes = responseReport.witDrResultCborBytes; + __query.response.resultDrTxHash = responseReport.witDrTxHash; + __query.response.resultTimestamp = Witnet.determineTimestampFromEpoch(responseReport.witDrResultEpoch); - } else if (queryStatus == Witnet.QueryStatus.Disputed) { + } else if (_queryStatus == Witnet.QueryStatus.Disputed) { // check that proven report actually matches what was formerly reported require( keccak256(abi.encode( - queryResponseReport.witDrTxHash, - queryResponseReport.witDrResultEpoch, - queryResponseReport.witDrResultCborBytes + responseReport.witDrTxHash, + responseReport.witDrResultEpoch, + responseReport.witDrResultCborBytes )) == keccak256(abi.encode( __query.response.resultDrTxHash, Witnet.determineEpochFromTimestamp(__query.response.resultTimestamp), @@ -759,7 +854,7 @@ library WitOracleDataLib { } else { revert(string(abi.encodePacked( "invalid query status: ", - toString(queryStatus) + toString(_queryStatus) ))); } @@ -771,8 +866,8 @@ library WitOracleDataLib { } function rollupQueryResultProof( - Witnet.QueryReport calldata queryReport, Witnet.FastForward[] calldata witOracleRollup, + Witnet.QueryReport calldata queryReport, bytes32[] calldata droTalliesMerkleTrie ) public returns (Witnet.Result memory) @@ -792,7 +887,7 @@ library WitOracleDataLib { require( _witOracleHead.index == Witnet.determineBeaconIndexFromEpoch( queryReport.witDrResultEpoch - ) + 1, "mismatching head beacon" + ) + 1, "misleading head beacon" ); // validate merkle proof @@ -813,12 +908,12 @@ library WitOracleDataLib { /// ======================================================================= /// --- Other public helper methods --------------------------------------- - function isValidQueryResponseReport(bytes4 channel, Witnet.QueryResponseReport calldata report) + function isValidQueryResponseReport(Witnet.QueryResponseReport calldata report) public view // todo: turn into private returns (bool, string memory) { - if (queryHashOf(data(), channel, report.queryId) != report.queryHash) { + if (queryHashOf(data(), report.queryId) != report.queryHash) { return (false, "invalid query hash"); } else if (report.witDrResultEpoch == 0) { @@ -885,6 +980,154 @@ library WitOracleDataLib { /// ======================================================================= /// --- Private library methods ------------------------------------------- + // function __reportQueryResponse( + // address evmReporter, + // uint256 evmGasPrice, + // uint64 evmFinalityBlock, + // Witnet.QueryResponseReport calldata report + // ) + // private returns (uint256 evmReward) + // { + // // read requester address and whether a callback was requested: + // Witnet.QueryRequest storage __request = seekQueryRequest(report.queryId); + + // // read query EVM reward: + // evmReward = __request.evmReward; + + // // set EVM reward right now as to avoid re-entrancy attacks: + // __request.evmReward = 0; + + // // determine whether a callback is required + // if (__request.gasCallback > 0) { + // ( + // uint256 evmCallbackActualGas, + // bool evmCallbackSuccess, + // string memory evmCallbackRevertMessage + // ) = __reportQueryResponseCallback( + // __request.requester, + // __request.gasCallback, + // evmFinalityBlock, + // report + // ); + // if (evmCallbackSuccess) { + // // => the callback run successfully + // emit IWitOracleEvents.WitOracleQueryReponseDelivered( + // report.queryId, + // evmGasPrice, + // evmCallbackActualGas + // ); + // } else { + // // => the callback reverted + // emit IWitOracleEvents.WitOracleQueryResponseDeliveryFailed( + // report.queryId, + // evmGasPrice, + // evmCallbackActualGas, + // bytes(evmCallbackRevertMessage).length > 0 + // ? evmCallbackRevertMessage + // : "WitOracleDataLib: callback exceeded gas limit", + // report.witDrResultCborBytes + // ); + // } + // // upon delivery, successfull or not, the audit trail is saved into storage, + // // but not the actual result which was intended to be passed over to the requester: + // saveQueryResponse( + // evmReporter, + // evmFinalityBlock, + // report.queryId, + // Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + // report.witDrTxHash, + // hex"" + // ); + // } else { + // // => no callback is involved + // emit IWitOracleEvents.WitOracleQueryResponse( + // report.queryId, + // evmGasPrice + // ); + // // write query result and audit trail data into storage + // saveQueryResponse( + // evmReporter, + // evmFinalityBlock, + // report.queryId, + // Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + // report.witDrTxHash, + // report.witDrResultCborBytes + // ); + // } + // } + + // function __reportQueryResponseCallback( + // address evmRequester, + // uint24 evmCallbackGasLimit, + // uint64 evmFinalityBlock, + // Witnet.QueryResponseReport calldata report + // ) + // private returns ( + // uint256 evmCallbackActualGas, + // bool evmCallbackSuccess, + // string memory evmCallbackRevertMessage + // ) + // { + // evmCallbackActualGas = gasleft(); + // if (report.witDrResultCborBytes[0] == bytes1(0xd8)) { + // WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(report.witDrResultCborBytes).readArray(); + // if (_errors.length < 2) { + // // try to report result with unknown error: + // try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( + // report.queryId, + // Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + // report.witDrTxHash, + // evmFinalityBlock, + // Witnet.ResultErrorCodes.Unknown, + // WitnetCBOR.CBOR({ + // buffer: WitnetBuffer.Buffer({ data: hex"", cursor: 0}), + // initialByte: 0, + // majorType: 0, + // additionalInformation: 0, + // len: 0, + // tag: 0 + // }) + // ) { + // evmCallbackSuccess = true; + // } catch Error(string memory err) { + // evmCallbackRevertMessage = err; + // } + + // } else { + // // try to report result with parsable error: + // try IWitOracleConsumer(evmRequester).reportWitOracleResultError{gas: evmCallbackGasLimit}( + // report.queryId, + // Witnet.determineEpochFromTimestamp(report.witDrResultEpoch), + // report.witDrTxHash, + // evmFinalityBlock, + // Witnet.ResultErrorCodes(_errors[0].readUint()), + // _errors[0] + // ) { + // evmCallbackSuccess = true; + // } catch Error(string memory err) { + // evmCallbackRevertMessage = err; + // } + // } + + // } else { + // // try to report result result with no error : + // try IWitOracleConsumer(evmRequester).reportWitOracleResultValue{gas: evmCallbackGasLimit}( + // report.queryId, + // Witnet.determineTimestampFromEpoch(report.witDrResultEpoch), + // report.witDrTxHash, + // evmFinalityBlock, + // WitnetCBOR.fromBytes(report.witDrResultCborBytes) + // ) { + // evmCallbackSuccess = true; + + // } catch Error(string memory err) { + // evmCallbackRevertMessage = err; + + // } catch (bytes memory) {} + // } + // evmCallbackActualGas -= gasleft(); + // } + function _verifyFastForwards(Witnet.FastForward[] calldata ff) private pure returns (Witnet.Beacon calldata) diff --git a/contracts/interfaces/IWitOracleBlocks.sol b/contracts/interfaces/IWitOracleBlocks.sol new file mode 100644 index 00000000..5cc5eabb --- /dev/null +++ b/contracts/interfaces/IWitOracleBlocks.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../libs/Witnet.sol"; + +interface IWitOracleBlocks { + + event Rollup(Witnet.Beacon head); + + function determineBeaconIndexFromTimestamp(uint32 timestamp) external pure returns (uint32); + function determineEpochFromTimestamp(uint32 timestamp) external pure returns (uint32); + + function getBeaconByIndex(uint32 index) external view returns (Witnet.Beacon memory); + function getGenesisBeacon() external pure returns (Witnet.Beacon memory); + function getLastKnownBeacon() external view returns (Witnet.Beacon memory); + function getLastKnownBeaconIndex() external view returns (uint32); + + function rollupBeacons(Witnet.FastForward[] calldata ff) external returns (Witnet.Beacon memory); +} diff --git a/contracts/interfaces/IWitOracleEvents.sol b/contracts/interfaces/IWitOracleEvents.sol index ce7f3e48..0800c2a8 100644 --- a/contracts/interfaces/IWitOracleEvents.sol +++ b/contracts/interfaces/IWitOracleEvents.sol @@ -25,6 +25,11 @@ interface IWitOracleEvents { Witnet.RadonSLA querySLA ); + event WitOracleQueryResponseDispute( + uint256 queryId, + address evmDisputer + ); + /// Emitted when the reward of some not-yet reported query gets upgraded. event WitOracleQueryUpgrade( uint256 queryId, diff --git a/contracts/interfaces/IWitOracleReporterTrustless.sol b/contracts/interfaces/IWitOracleReporterTrustless.sol new file mode 100644 index 00000000..0e6f1c64 --- /dev/null +++ b/contracts/interfaces/IWitOracleReporterTrustless.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; + +import "../libs/Witnet.sol"; + +/// @title The Witnet Request Board Reporter trustless interface. +/// @author The Witnet Foundation. +interface IWitOracleReporterTrustless { + + event BatchReportError(uint256 queryId, string reason); + + function claimQueryReward(uint256 queryId) external returns (uint256); + function claimQueryRewardsBatch(uint256[] calldata queryIds) external returns (uint256); + + function disputeQueryResponse(uint256 queryId) external returns (uint256); + + function reportQueryResponse(Witnet.QueryResponseReport calldata report) external returns (uint256); + function reportQueryResponseBatch(Witnet.QueryResponseReport[] calldata reports) external returns (uint256); + + function rollupQueryResponseProof( + Witnet.FastForward[] calldata witOracleRollup, + Witnet.QueryResponseReport calldata queryResponseReport, + bytes32[] calldata witOracleDdrTalliesProof + ) external returns ( + uint256 evmTotalReward + ); + + function rollupQueryResultProof( + Witnet.FastForward[] calldata witOracleRollup, + Witnet.QueryReport calldata queryReport, + bytes32[] calldata witOracleDroTalliesTrie + ) external returns ( + Witnet.Result memory queryResult + ); +} diff --git a/contracts/libs/WitnetBN254.sol b/contracts/libs/WitnetBN254.sol new file mode 100644 index 00000000..8fde29e7 --- /dev/null +++ b/contracts/libs/WitnetBN254.sol @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: MIT +// solium-disable security/no-assign-params + +pragma solidity >=0.8.0 <0.9.0; + +/// @title Elliptic curve operations on twist points on BN254-G2 +/// @dev Adaptation of https://github.com/musalbas/solidity-BN256G2 +library WitnetBN254 { + + using WitnetBN254 for Fq2; + using WitnetBN254 for Point; + + uint256 internal constant F_MODULUS = 0x30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd47; + + uint256 internal constant TWIST_BX = 0x2b149d40ceb8aaae81be18991be06ac3b5b4c5e559dbefa33267e6dc24a138e5; + uint256 internal constant TWIST_BY = 0x009713b03af0fed4cd2cafadeed8fdf4a74fa084e52d1852e4a2bd0685c315d2; + + // This is the generator negated, to use for pairing + uint256 public constant G2_NEG_X_RE = 0x198E9393920D483A7260BFB731FB5D25F1AA493335A9E71297E485B7AEF312C2; + uint256 public constant G2_NEG_X_IM = 0x1800DEEF121F1E76426A00665E5C4479674322D4F75EDADD46DEBD5CD992F6ED; + uint256 public constant G2_NEG_Y_RE = 0x275dc4a288d1afb3cbb1ac09187524c7db36395df7be3b99e673b13a075a65ec; + uint256 public constant G2_NEG_Y_IM = 0x1d9befcd05a5323e6da4d435f3b617cdb3af83285c2df711ef39c01571827f9d; + + struct Fq2 { + uint256 real; + uint256 imag; + } + + struct Point { + Fq2 x; + Fq2 y; + } + + function _addmod(uint256 a, uint256 b) private pure returns (uint256) { + return uint256(addmod(a, b, F_MODULUS)); + } + + function _invmod(uint256 a) private view returns (uint256 _result) { + bool _success; + assembly { + let _freemem := mload(0x40) + mstore(_freemem, 0x20) + mstore(add(_freemem,0x20), 0x20) + mstore(add(_freemem,0x40), 0x20) + mstore(add(_freemem,0x60), a) + mstore(add(_freemem,0x80), sub(F_MODULUS, 2)) + mstore(add(_freemem,0xA0), F_MODULUS) + _success := staticcall(sub(gas(), 2000), 5, _freemem, 0xC0, _freemem, 0x20) + _result := mload(_freemem) + } + assert(_success); + } + + function _mulmod(uint256 a, uint256 b) private pure returns (uint256) { + return uint256(mulmod(a, b, F_MODULUS)); + } + + function _submod(uint256 a, uint256 b) private pure returns (uint256) { + return uint256(addmod(a, F_MODULUS - b, F_MODULUS)); + } + + function add(Fq2 memory a, Fq2 memory b) internal pure returns (Fq2 memory) { + return Fq2( + _addmod(a.real, b.real), + _addmod(a.imag, b.imag) + ); + } + + function div(Fq2 memory d, Fq2 memory c) internal view returns (Fq2 memory) { + return mul(d, inv(c)); + } + + function equals(Fq2 memory a, Fq2 memory b) internal pure returns (bool) { + return ( + a.real == b.real + && a.imag == b.imag + ); + } + + function inv(Fq2 memory a) internal view returns (Fq2 memory) { + uint256 _inv = _invmod(_addmod(_mulmod(a.imag, a.imag), _mulmod(a.real, a.real))); + return Fq2( + _mulmod(a.real, _inv), + F_MODULUS - mulmod(a.imag, _inv, F_MODULUS) + ); + } + + function mul(Fq2 memory a, Fq2 memory b) internal pure returns (Fq2 memory) { + return Fq2( + _submod(_mulmod(a.real, b.real), _mulmod(a.imag, b.imag)), + _addmod(_mulmod(a.real, b.imag), _mulmod(a.imag, b.real)) + ); + } + + function mul(Fq2 memory a, uint256 k) internal pure returns (Fq2 memory) { + return Fq2( + _mulmod(a.real, k), + _mulmod(a.imag, k) + ); + } + + function sub(Fq2 memory a, Fq2 memory b) internal pure returns (Fq2 memory) { + return Fq2( + _submod(a.real, b.real), + _submod(a.imag, b.imag) + ); + } + + // WIP ... +} \ No newline at end of file diff --git a/contracts/patterns/Payable.sol b/contracts/patterns/Payable.sol index 4aad93f4..888418a1 100644 --- a/contracts/patterns/Payable.sol +++ b/contracts/patterns/Payable.sol @@ -16,6 +16,9 @@ abstract contract Payable { /// Gets current transaction price. function _getGasPrice() internal view virtual returns (uint256); + /// Gets message actual sender. + function _getMsgSender() internal view virtual returns (address); + /// Gets current payment value. function _getMsgValue() internal view virtual returns (uint256); From 753644e7834416537489eb08aa9c5c6980246716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 8 Oct 2024 11:40:52 +0200 Subject: [PATCH 07/24] chore: fmt! --- contracts/core/WitnetDeployer.sol | 1 + contracts/libs/Witnet.sol | 112 ++++++++++++++-------------- scripts/vanity2gen.js | 2 +- test/witOracleRadonRegistry.spec.js | 17 ++--- 4 files changed, 66 insertions(+), 66 deletions(-) diff --git a/contracts/core/WitnetDeployer.sol b/contracts/core/WitnetDeployer.sol index 827298ce..b4fd312f 100644 --- a/contracts/core/WitnetDeployer.sol +++ b/contracts/core/WitnetDeployer.sol @@ -3,6 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import "./WitnetProxy.sol"; + import "../libs/Create3.sol"; /// @notice WitnetDeployer contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 0a3b8c79..ab900da2 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -10,8 +10,8 @@ library Witnet { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - uint32 constant internal WIT_1_GENESIS_TIMESTAMP = 0; // TBD - uint32 constant internal WIT_1_SECS_PER_EPOCH = 45; + uint32 constant internal WIT_1_GENESIS_TIMESTAMP = 0; // TBD + uint32 constant internal WIT_1_SECS_PER_EPOCH = 45; uint32 constant internal WIT_2_GENESIS_BEACON_INDEX = 0; // TBD uint32 constant internal WIT_2_GENESIS_BEACON_PREV_INDEX = 0; // TBD @@ -424,7 +424,7 @@ library Witnet { /// ======================================================================= - /// --- Witnet.Beacon helper functions ------------------------------------ + /// --- Beacon helper functions ------------------------------------ function equals(Beacon storage self, Beacon calldata other) internal view returns (bool) @@ -458,7 +458,7 @@ library Witnet { /// ======================================================================= - /// --- Witnet.FastForward helper functions ------------------------------- + /// --- FastForward helper functions ------------------------------- function head(FastForward[] calldata rollup) internal pure returns (Beacon calldata) @@ -468,7 +468,7 @@ library Witnet { /// =============================================================================================================== - /// --- Witnet.Query*Report helper methods ------------------------------------------------------------------------ + /// --- Query*Report helper methods ------------------------------------------------------------------------ function queryRelayer(QueryResponseReport calldata self) internal pure returns (address) { return recoverAddr(self.witDrRelayerSignature, self.queryHash); @@ -496,15 +496,15 @@ library Witnet { /// =============================================================================================================== - /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- + /// --- 'Result' helper methods ---------------------------------------------------------------------------- modifier _isReady(Result memory result) { require(result.success, "Witnet: tried to decode value from errored result."); _; } - /// @dev Decode an address from the Witnet.Result's CBOR value. - function asAddress(Witnet.Result memory result) + /// @dev Decode an address from the Result's CBOR value. + function asAddress(Result memory result) internal pure _isReady(result) returns (address) @@ -516,8 +516,8 @@ library Witnet { } } - /// @dev Decode a `bool` value from the Witnet.Result's CBOR value. - function asBool(Witnet.Result memory result) + /// @dev Decode a `bool` value from the Result's CBOR value. + function asBool(Result memory result) internal pure _isReady(result) returns (bool) @@ -525,8 +525,8 @@ library Witnet { return result.value.readBool(); } - /// @dev Decode a `bytes` value from the Witnet.Result's CBOR value. - function asBytes(Witnet.Result memory result) + /// @dev Decode a `bytes` value from the Result's CBOR value. + function asBytes(Result memory result) internal pure _isReady(result) returns(bytes memory) @@ -534,8 +534,8 @@ library Witnet { return result.value.readBytes(); } - /// @dev Decode a `bytes4` value from the Witnet.Result's CBOR value. - function asBytes4(Witnet.Result memory result) + /// @dev Decode a `bytes4` value from the Result's CBOR value. + function asBytes4(Result memory result) internal pure _isReady(result) returns (bytes4) @@ -543,8 +543,8 @@ library Witnet { return toBytes4(asBytes(result)); } - /// @dev Decode a `bytes32` value from the Witnet.Result's CBOR value. - function asBytes32(Witnet.Result memory result) + /// @dev Decode a `bytes32` value from the Result's CBOR value. + function asBytes32(Result memory result) internal pure _isReady(result) returns (bytes32) @@ -552,8 +552,8 @@ library Witnet { return toBytes32(asBytes(result)); } - /// @notice Returns the Witnet.Result's unread CBOR value. - function asCborValue(Witnet.Result memory result) + /// @notice Returns the Result's unread CBOR value. + function asCborValue(Result memory result) internal pure _isReady(result) returns (WitnetCBOR.CBOR memory) @@ -561,8 +561,8 @@ library Witnet { return result.value; } - /// @notice Decode array of CBOR values from the Witnet.Result's CBOR value. - function asCborArray(Witnet.Result memory result) + /// @notice Decode array of CBOR values from the Result's CBOR value. + function asCborArray(Result memory result) internal pure _isReady(result) returns (WitnetCBOR.CBOR[] memory) @@ -570,11 +570,11 @@ library Witnet { return result.value.readArray(); } - /// @dev Decode a fixed16 (half-precision) numeric value from the Witnet.Result's CBOR value. + /// @dev Decode a fixed16 (half-precision) numeric value from the Result's CBOR value. /// @dev Due to the lack of support for floating or fixed point arithmetic in the EVM, this method offsets all values. /// by 5 decimal orders so as to get a fixed precision of 5 decimal positions, which should be OK for most `fixed16`. /// use cases. In other words, the output of this method is 10,000 times the actual value, encoded into an `int32`. - function asFixed16(Witnet.Result memory result) + function asFixed16(Result memory result) internal pure _isReady(result) returns (int32) @@ -582,8 +582,8 @@ library Witnet { return result.value.readFloat16(); } - /// @dev Decode an array of fixed16 values from the Witnet.Result's CBOR value. - function asFixed16Array(Witnet.Result memory result) + /// @dev Decode an array of fixed16 values from the Result's CBOR value. + function asFixed16Array(Result memory result) internal pure _isReady(result) returns (int32[] memory) @@ -591,8 +591,8 @@ library Witnet { return result.value.readFloat16Array(); } - /// @dev Decode an `int64` value from the Witnet.Result's CBOR value. - function asInt(Witnet.Result memory result) + /// @dev Decode an `int64` value from the Result's CBOR value. + function asInt(Result memory result) internal pure _isReady(result) returns (int) @@ -600,10 +600,10 @@ library Witnet { return result.value.readInt(); } - /// @dev Decode an array of integer numeric values from a Witnet.Result as an `int[]` array. - /// @param result An instance of Witnet.Result. - /// @return The `int[]` decoded from the Witnet.Result. - function asIntArray(Witnet.Result memory result) + /// @dev Decode an array of integer numeric values from a Result as an `int[]` array. + /// @param result An instance of Result. + /// @return The `int[]` decoded from the Result. + function asIntArray(Result memory result) internal pure _isReady(result) returns (int[] memory) @@ -611,10 +611,10 @@ library Witnet { return result.value.readIntArray(); } - /// @dev Decode a `string` value from the Witnet.Result's CBOR value. - /// @param result An instance of Witnet.Result. - /// @return The `string` decoded from the Witnet.Result. - function asText(Witnet.Result memory result) + /// @dev Decode a `string` value from the Result's CBOR value. + /// @param result An instance of Result. + /// @return The `string` decoded from the Result. + function asText(Result memory result) internal pure _isReady(result) returns(string memory) @@ -622,10 +622,10 @@ library Witnet { return result.value.readString(); } - /// @dev Decode an array of strings from the Witnet.Result's CBOR value. - /// @param result An instance of Witnet.Result. - /// @return The `string[]` decoded from the Witnet.Result. - function asTextArray(Witnet.Result memory result) + /// @dev Decode an array of strings from the Result's CBOR value. + /// @param result An instance of Result. + /// @return The `string[]` decoded from the Result. + function asTextArray(Result memory result) internal pure _isReady(result) returns (string[] memory) @@ -633,10 +633,10 @@ library Witnet { return result.value.readStringArray(); } - /// @dev Decode a `uint64` value from the Witnet.Result's CBOR value. - /// @param result An instance of Witnet.Result. - /// @return The `uint` decoded from the Witnet.Result. - function asUint(Witnet.Result memory result) + /// @dev Decode a `uint64` value from the Result's CBOR value. + /// @param result An instance of Result. + /// @return The `uint` decoded from the Result. + function asUint(Result memory result) internal pure _isReady(result) returns (uint) @@ -644,10 +644,10 @@ library Witnet { return result.value.readUint(); } - /// @dev Decode an array of `uint64` values from the Witnet.Result's CBOR value. - /// @param result An instance of Witnet.Result. - /// @return The `uint[]` decoded from the Witnet.Result. - function asUintArray(Witnet.Result memory result) + /// @dev Decode an array of `uint64` values from the Result's CBOR value. + /// @param result An instance of Result. + /// @return The `uint[]` decoded from the Result. + function asUintArray(Result memory result) internal pure returns (uint[] memory) { @@ -656,7 +656,7 @@ library Witnet { /// =============================================================================================================== - /// --- Witnet.ResultErrorCodes helper methods -------------------------------------------------------------------- + /// --- ResultErrorCodes helper methods -------------------------------------------------------------------- function isCircumstantial(ResultErrorCodes self) internal pure returns (bool) { return (self == ResultErrorCodes.CircumstantialFailure); @@ -689,7 +689,7 @@ library Witnet { /// =============================================================================================================== - /// --- 'Witnet.RadonSLA' helper methods -------------------------------------------------------------------------- + /// --- 'RadonSLA' helper methods -------------------------------------------------------------------------- function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) @@ -709,8 +709,8 @@ library Witnet { ); } - function toV1(RadonSLA memory self) internal pure returns (Witnet.RadonSLAv1 memory) { - return Witnet.RadonSLAv1({ + function toV1(RadonSLA memory self) internal pure returns (RadonSLAv1 memory) { + return RadonSLAv1({ numWitnesses: self.witNumWitnesses, minConsensusPercentage: 51, witnessReward: self.witUnitaryReward, @@ -771,12 +771,12 @@ library Witnet { } - /// @dev Transform given bytes into a Witnet.Result instance. + /// @dev Transform given bytes into a Result instance. /// @param cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. + /// @return A `Result` instance. function toWitnetResult(bytes memory cborBytes) internal pure - returns (Witnet.Result memory) + returns (Result memory) { WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(cborBytes); return _resultFromCborValue(cborValue); @@ -1001,15 +1001,15 @@ library Witnet { } } - /// @dev Decode a CBOR value into a Witnet.Result instance. + /// @dev Decode a CBOR value into a Result instance. function _resultFromCborValue(WitnetCBOR.CBOR memory cbor) private pure - returns (Witnet.Result memory) + returns (Result memory) { // Witnet uses CBOR tag 39 to represent RADON error code identifiers. // [CBOR tag 39] Identifiers for CBOR: https://github.com/lucas-clemente/cbor-specs/blob/master/id.md bool success = cbor.tag != 39; - return Witnet.Result(success, cbor); + return Result(success, cbor); } /// @dev Calculate length of string-equivalent to given bytes32. diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index c05cb8ec..05597990 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -32,7 +32,7 @@ module.exports = async function () { } else if (argv === "--hits") { hits = parseInt(args[index + 1]) } else if (argv === "--network") { - [ecosystem, network] = utils.getRealmNetworkFromString(args[index + 1].toLowerCase()) + [, network] = utils.getRealmNetworkFromString(args[index + 1].toLowerCase()) } else if (argv === "--hexArgs") { hexArgs = args[index + 1].toLowerCase() if (hexArgs.startsWith("0x")) hexArgs = hexArgs.slice(2) diff --git a/test/witOracleRadonRegistry.spec.js b/test/witOracleRadonRegistry.spec.js index 4b59e74e..b2231163 100644 --- a/test/witOracleRadonRegistry.spec.js +++ b/test/witOracleRadonRegistry.spec.js @@ -2,11 +2,9 @@ import("chai") const utils = require("../src/utils") const { expectEvent, expectRevert } = require("@openzeppelin/test-helpers") -const { expectRevertCustomError } = require("custom-error-test-helper") const WitOracleRadonRegistry = artifacts.require("WitOracleRadonRegistryDefault") const WitOracleRadonEncodingLib = artifacts.require("WitOracleRadonEncodingLib") -const Witnet = artifacts.require("Witnet") contract("WitOracleRadonRegistry", (accounts) => { const creatorAddress = accounts[0] @@ -87,8 +85,6 @@ contract("WitOracleRadonRegistry", (accounts) => { }) context("IWitOracleRadonRegistry", async () => { - let slaHash - let concathashReducerHash let modeNoFiltersReducerHash let stdev15ReducerHash @@ -146,7 +142,7 @@ contract("WitOracleRadonRegistry", (accounts) => { "emits new data provider and source events when verifying a new http-get source for the first time", async () => { const tx = await radonRegistry.verifyRadonRetrieval( 1, // requestMethod - "https://api.binance.us/api/v3/ticker/price?symbol=\\0\\\\1\\", + "https://api.binance.us/api/v3/ticker/price?symbol=\\0\\\\1\\", "", // requestBody [], // requestHeaders "0x841877821864696c61737450726963658218571a000f4240185b", // requestRadonScript @@ -188,7 +184,7 @@ contract("WitOracleRadonRegistry", (accounts) => { it("fork existing retrieval by settling one out of two parameters", async () => { const tx = await radonRegistry.verifyRadonRetrieval( binanceTickerHash, - "USD" + "USD" ) assert.equal(tx.logs.length, 1) expectEvent( @@ -242,7 +238,10 @@ contract("WitOracleRadonRegistry", (accounts) => { assert.equal(ds.headers[0][1], "witnet-rust") assert.equal(ds.headers[1][0], "content-type") assert.equal(ds.headers[1][1], "text/html; charset=utf-8") - assert.equal(ds.radonScript, "0x861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b") + assert.equal( + ds.radonScript, + "0x861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b" + ) }) }) }) @@ -369,7 +368,7 @@ contract("WitOracleRadonRegistry", (accounts) => { assert(tx.logs.length === 0) }) it("generates same hash when verifying same randomness request offchain", async () => { - const hash = await radonRegistry.methods['verifyRadonRequest(bytes32[],bytes32,bytes32,uint16,string[][])'].call( + const hash = await radonRegistry.methods["verifyRadonRequest(bytes32[],bytes32,bytes32,uint16,string[][])"].call( [ // sources rngSourceHash, ], @@ -513,7 +512,7 @@ contract("WitOracleRadonRegistry", (accounts) => { tx.receipt, "NewRadonRequest" ) - heavyRetrievalHash = tx.logs[0].args.radHash + // heavyRetrievalHash = tx.logs[0].args.radHash }) }) }) From e8f8ba4853f8ccf5013251b5f4ab3e52a0c86433 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 9 Oct 2024 12:27:12 +0200 Subject: [PATCH 08/24] feat: IWOReporterTrustless.extractQueryRelayData* --- .../trustless/WitOracleTrustlessDefault.sol | 33 +++++++++++++--- contracts/data/WitOracleDataLib.sol | 39 +++++++++++++------ contracts/interfaces/IWitOracleReporter.sol | 8 ++-- .../IWitOracleReporterTrustless.sol | 22 ++++++++--- test/mocks/WitMockedOracle.sol | 2 +- 5 files changed, 77 insertions(+), 27 deletions(-) diff --git a/contracts/core/trustless/WitOracleTrustlessDefault.sol b/contracts/core/trustless/WitOracleTrustlessDefault.sol index ebfa7f75..f48aa7e1 100644 --- a/contracts/core/trustless/WitOracleTrustlessDefault.sol +++ b/contracts/core/trustless/WitOracleTrustlessDefault.sol @@ -318,7 +318,7 @@ contract WitOracleTrustlessDefault } } - function claimQueryRewardsBatch(uint256[] calldata _queryIds) + function claimQueryRewardBatch(uint256[] calldata _queryIds) virtual override external returns (uint256 _evmTotalReward) { @@ -332,13 +332,13 @@ contract WitOracleTrustlessDefault _evmTotalReward += _evmReward; } catch Error(string memory _reason) { - emit BatchReportError( + emit BatchQueryError( _queryIds[_ix], _reason ); } catch (bytes memory) { - emit BatchReportError( + emit BatchQueryError( _queryIds[_ix], _revertWitOracleDataLibUnhandledExceptionReason() ); @@ -346,6 +346,29 @@ contract WitOracleTrustlessDefault } } + function extractQueryRelayData(uint256 _queryId) + virtual override public view + returns (QueryRelayData memory _queryRelayData) + { + Witnet.QueryStatus _queryStatus = getQueryStatus(_queryId); + if ( + _queryStatus == Witnet.QueryStatus.Posted + || _queryStatus == Witnet.QueryStatus.Delayed + ) { + _queryRelayData = WitOracleDataLib.extractQueryRelayData(registry, _queryId); + } + } + + function extractQueryRelayDataBatch(uint256[] calldata _queryIds) + virtual override external view + returns (QueryRelayData[] memory _relays) + { + _relays = new QueryRelayData[](_queryIds.length); + for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { + _relays[_ix] = extractQueryRelayData(_queryIds[_ix]); + } + } + function disputeQueryResponse(uint256 _queryId) virtual override external inStatus(_queryId, Witnet.QueryStatus.Reported) @@ -393,13 +416,13 @@ contract WitOracleTrustlessDefault _evmTotalReward += _evmPartialReward; } catch Error(string memory _reason) { - emit BatchReportError( + emit BatchQueryError( _responseReport.queryId, _reason ); } catch (bytes memory) { - emit BatchReportError( + emit BatchQueryError( _responseReport.queryId, _revertWitOracleDataLibUnhandledExceptionReason() ); diff --git a/contracts/data/WitOracleDataLib.sol b/contracts/data/WitOracleDataLib.sol index e78a262c..16d92cc0 100644 --- a/contracts/data/WitOracleDataLib.sol +++ b/contracts/data/WitOracleDataLib.sol @@ -8,6 +8,7 @@ import "../interfaces/IWitOracleBlocks.sol"; import "../interfaces/IWitOracleConsumer.sol"; import "../interfaces/IWitOracleEvents.sol"; import "../interfaces/IWitOracleReporter.sol"; +import "../interfaces/IWitOracleReporterTrustless.sol"; import "../libs/Witnet.sol"; import "../patterns/Escrowable.sol"; @@ -408,18 +409,11 @@ library WitOracleDataLib { { bytecodes = new bytes[](queryIds.length); for (uint _ix = 0; _ix < queryIds.length; _ix ++) { - Witnet.QueryRequest storage __request = data().queries[queryIds[_ix]].request; - if (__request.radonRadHash != bytes32(0)) { - bytecodes[_ix] = registry.bytecodeOf( - __request.radonRadHash, - __request.radonSLA - ); - } else { - bytecodes[_ix] = registry.bytecodeOf( - __request.radonBytecode, - __request.radonSLA - ); - } + Witnet.QueryRequest storage __request = seekQueryRequest(queryIds[_ix]); + bytecodes[_ix] = (__request.radonRadHash != bytes32(0) + ? registry.bytecodeOf(__request.radonRadHash, __request.radonSLA) + : registry.bytecodeOf(__request.radonBytecode,__request.radonSLA) + ); } } @@ -604,6 +598,27 @@ library WitOracleDataLib { /// ======================================================================= /// --- IWitOracleReporterTrustless --------------------------------------- + function extractQueryRelayData( + WitOracleRadonRegistry registry, + uint256 queryId + ) + public view + returns (IWitOracleReporterTrustless.QueryRelayData memory _queryRelayData) + { + Witnet.QueryRequest storage __request = seekQueryRequest(queryId); + return IWitOracleReporterTrustless.QueryRelayData({ + queryId: queryId, + queryEvmBlock: seekQuery(queryId).block, + queryEvmHash: queryHashOf(data(), queryId), + queryEvmReward: __request.evmReward, + queryWitDrBytecodes: (__request.radonRadHash != bytes32(0) + ? registry.bytecodeOf(__request.radonRadHash, __request.radonSLA) + : registry.bytecodeOf(__request.radonBytecode,__request.radonSLA) + ), + queryWitDrSLA: __request.radonSLA + }); + } + function claimQueryReward( uint256 queryId, uint256 evmQueryAwaitingBlocks, diff --git a/contracts/interfaces/IWitOracleReporter.sol b/contracts/interfaces/IWitOracleReporter.sol index 54264dc8..e8ac839f 100644 --- a/contracts/interfaces/IWitOracleReporter.sol +++ b/contracts/interfaces/IWitOracleReporter.sol @@ -13,10 +13,10 @@ interface IWitOracleReporter { /// @notice queries providing no actual earnings. function estimateReportEarnings( uint256[] calldata queryIds, - bytes calldata reportTxMsgData, - uint256 reportTxGasPrice, - uint256 nanoWitPrice - ) external view returns (uint256, uint256); + bytes calldata evmReportTxMsgData, + uint256 evmReportTxGasPrice, + uint256 witEthPrice9 + ) external view returns (uint256 evmRevenues, uint256 evmExpenses); /// @notice Retrieves the Witnet Data Request bytecodes and SLAs of previously posted queries. /// @dev Returns empty buffer if the query does not exist. diff --git a/contracts/interfaces/IWitOracleReporterTrustless.sol b/contracts/interfaces/IWitOracleReporterTrustless.sol index 0e6f1c64..2a47ea69 100644 --- a/contracts/interfaces/IWitOracleReporterTrustless.sol +++ b/contracts/interfaces/IWitOracleReporterTrustless.sol @@ -7,13 +7,25 @@ import "../libs/Witnet.sol"; /// @title The Witnet Request Board Reporter trustless interface. /// @author The Witnet Foundation. interface IWitOracleReporterTrustless { - - event BatchReportError(uint256 queryId, string reason); - + + event BatchQueryError(uint256 queryId, string reason); + + function extractQueryRelayData(uint256 queryId) external view returns (QueryRelayData memory); + function extractQueryRelayDataBatch(uint256[] calldata queryIds) external view returns (QueryRelayData[] memory); + struct QueryRelayData { + uint256 queryId; + uint256 queryEvmBlock; + bytes32 queryEvmHash; + uint256 queryEvmReward; + bytes queryWitDrBytecodes; + Witnet.RadonSLA queryWitDrSLA; + } + function claimQueryReward(uint256 queryId) external returns (uint256); - function claimQueryRewardsBatch(uint256[] calldata queryIds) external returns (uint256); + function claimQueryRewardBatch(uint256[] calldata queryIds) external returns (uint256); + - function disputeQueryResponse(uint256 queryId) external returns (uint256); + function disputeQueryResponse (uint256 queryId) external returns (uint256); function reportQueryResponse(Witnet.QueryResponseReport calldata report) external returns (uint256); function reportQueryResponseBatch(Witnet.QueryResponseReport[] calldata reports) external returns (uint256); diff --git a/test/mocks/WitMockedOracle.sol b/test/mocks/WitMockedOracle.sol index fa2c56a8..6578cadf 100644 --- a/test/mocks/WitMockedOracle.sol +++ b/test/mocks/WitMockedOracle.sol @@ -30,6 +30,6 @@ contract WitMockedOracle { address[] memory _reporters = new address[](1); _reporters[0] = msg.sender; - __setReporters(_reporters); + WitOracleDataLib.setReporters(_reporters); } } From 776c9f14f5302ee875b60b87e76826e5bce9f9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 07:48:11 +0200 Subject: [PATCH 09/24] refactor: rearrange core into base, trustable, upgradable and trustless implementations --- contracts/core/WitnetUpgradableBase.sol | 35 +- .../WitOracleBase.sol} | 77 ++- .../core/base/WitOracleBaseTrustable.sol | 417 ++++++++++++++++ .../WitOracleBaseTrustless.sol} | 56 +-- .../WitOracleBaseUpgradable.sol} | 69 +-- .../WitOracleRadonRegistryBase.sol} | 117 +---- .../WitOracleRadonRegistryBaseUpgradable.sol | 107 +++++ .../WitOracleRequestFactoryBase.sol} | 208 ++------ .../WitOracleRequestFactoryBaseUpgradable.sol | 231 +++++++++ .../trustable/WitOracleTrustableDefault.sol | 449 +----------------- .../trustable/WitOracleTrustableObscuro.sol | 41 +- .../core/trustable/WitOracleTrustableOvm2.sol | 49 +- .../core/trustable/WitOracleTrustableReef.sol | 65 ++- .../WitOracleRadonRegistryDefaultV21.sol | 19 + .../WitOracleRadonRegistryNoSha256.sol | 23 - .../WitOracleRequestFactoryCfxCore.sol | 31 -- .../WitOracleRequestFactoryDefaultV21.sol | 18 + .../WitOracleTrustlessDefaultV21.sol | 44 ++ ...itOracleRadonRegistryUpgradableDefault.sol | 29 ++ ...tOracleRadonRegistryUpgradableNoSha256.sol | 28 ++ ...cleRequestFactoryUpgradableConfluxCore.sol | 41 ++ ...tOracleRequestFactoryUpgradableDefault.sol | 29 ++ .../WitOracleTrustlessUpgradableDefault.sol | 44 ++ contracts/data/WitOracleDataLib.sol | 27 +- contracts/interfaces/IWitAppliance.sol | 22 +- contracts/interfaces/IWitOracle.sol | 6 +- 26 files changed, 1242 insertions(+), 1040 deletions(-) rename contracts/core/{trustless/WitOracleTrustlessBase.sol => base/WitOracleBase.sol} (96%) create mode 100644 contracts/core/base/WitOracleBaseTrustable.sol rename contracts/core/{trustless/WitOracleTrustlessDefault.sol => base/WitOracleBaseTrustless.sol} (91%) rename contracts/core/{trustless/WitOracleTrustlessUpgradableDefault.sol => base/WitOracleBaseUpgradable.sol} (60%) rename contracts/core/{trustless/WitOracleRadonRegistryDefault.sol => base/WitOracleRadonRegistryBase.sol} (82%) create mode 100644 contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol rename contracts/core/{trustless/WitOracleRequestFactoryDefault.sol => base/WitOracleRequestFactoryBase.sol} (75%) create mode 100644 contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol create mode 100644 contracts/core/trustless/WitOracleRadonRegistryDefaultV21.sol delete mode 100644 contracts/core/trustless/WitOracleRadonRegistryNoSha256.sol delete mode 100644 contracts/core/trustless/WitOracleRequestFactoryCfxCore.sol create mode 100644 contracts/core/trustless/WitOracleRequestFactoryDefaultV21.sol create mode 100644 contracts/core/trustless/WitOracleTrustlessDefaultV21.sol create mode 100644 contracts/core/upgradable/WitOracleRadonRegistryUpgradableDefault.sol create mode 100644 contracts/core/upgradable/WitOracleRadonRegistryUpgradableNoSha256.sol create mode 100644 contracts/core/upgradable/WitOracleRequestFactoryUpgradableConfluxCore.sol create mode 100644 contracts/core/upgradable/WitOracleRequestFactoryUpgradableDefault.sol create mode 100644 contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol diff --git a/contracts/core/WitnetUpgradableBase.sol b/contracts/core/WitnetUpgradableBase.sol index 78b76124..df162530 100644 --- a/contracts/core/WitnetUpgradableBase.sol +++ b/contracts/core/WitnetUpgradableBase.sol @@ -36,19 +36,16 @@ abstract contract WitnetUpgradableBase /// @dev Reverts if proxy delegatecalls to unexistent method. /* solhint-disable no-complex-fallback */ fallback() virtual external { - _revert(string(abi.encodePacked( - "not implemented: 0x", + revert(string(abi.encodePacked( + "WitnetUpgradableBase: not implemented: 0x", _toHexString(uint8(bytes1(msg.sig))), _toHexString(uint8(bytes1(msg.sig << 8))), _toHexString(uint8(bytes1(msg.sig << 16))), _toHexString(uint8(bytes1(msg.sig << 24))) ))); } - - function class() virtual public view returns (string memory) { - return type(WitnetUpgradableBase).name; - } + // ================================================================================================================ // --- Overrides 'Proxiable' -------------------------------------------------------------------------------------- @@ -79,29 +76,6 @@ abstract contract WitnetUpgradableBase // ================================================================================================================ // --- Internal methods ------------------------------------------------------------------------------------------- - function _require( - bool _condition, - string memory _message - ) - virtual internal view - { - if (!_condition) { - _revert(_message); - } - } - - function _revert(string memory _message) - virtual internal view - { - revert( - string(abi.encodePacked( - class(), - ": ", - _message - )) - ); - } - function _toHexString(uint8 _u) internal pure returns (string memory) @@ -147,5 +121,4 @@ abstract contract WitnetUpgradableBase } } } - -} \ No newline at end of file +} diff --git a/contracts/core/trustless/WitOracleTrustlessBase.sol b/contracts/core/base/WitOracleBase.sol similarity index 96% rename from contracts/core/trustless/WitOracleTrustlessBase.sol rename to contracts/core/base/WitOracleBase.sol index 21cd53fa..685ed710 100644 --- a/contracts/core/trustless/WitOracleTrustlessBase.sol +++ b/contracts/core/base/WitOracleBase.sol @@ -1,7 +1,6 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +pragma solidity >=0.8.0 <0.9.0; import "../../WitOracle.sol"; import "../../data/WitOracleDataLib.sol"; @@ -15,9 +14,9 @@ import "../../patterns/Payable.sol"; /// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. /// The result of the requests will be posted back to this contract by the bridge nodes too. /// @author The Witnet Foundation -abstract contract WitOracleTrustlessBase +abstract contract WitOracleBase is - Payable, + Payable, WitOracle, IWitOracleLegacy { @@ -28,10 +27,8 @@ abstract contract WitOracleTrustlessBase return WitOracleDataLib.channel(); } - WitOracleRequestFactory public immutable override factory; + // WitOracleRequestFactory public immutable override factory; WitOracleRadonRegistry public immutable override registry; - - bytes4 public immutable override specs = type(WitOracle).interfaceId; uint256 internal immutable __reportResultGasBase; uint256 internal immutable __reportResultWithCallbackGasBase; @@ -85,21 +82,33 @@ abstract contract WitOracleTrustlessBase "not the requester" ); _; } + + struct EvmImmutables { + uint32 reportResultGasBase; + uint32 reportResultWithCallbackGasBase; + uint32 reportResultWithCallbackRevertGasBase; + uint32 sstoreFromZeroGas; + } constructor( - WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory + EvmImmutables memory _immutables, + WitOracleRadonRegistry _registry + // WitOracleRequestFactory _factory ) { registry = _registry; - factory = _factory; + // factory = _factory; + + __reportResultGasBase = _immutables.reportResultGasBase; + __reportResultWithCallbackGasBase = _immutables.reportResultWithCallbackGasBase; + __reportResultWithCallbackRevertGasBase = _immutables.reportResultWithCallbackRevertGasBase; + __sstoreFromZeroGas = _immutables.sstoreFromZeroGas; } - function class() virtual public view returns (string memory); function getQueryStatus(uint256) virtual public view returns (Witnet.QueryStatus); function getQueryResponseStatus(uint256) virtual public view returns (Witnet.QueryResponseStatus); - + // ================================================================================================================ // --- Payable ---------------------------------------------------------------------------------------------------- @@ -123,9 +132,9 @@ abstract contract WitOracleTrustlessBase /// @param _amount Amount of ETHs to transfer. function __safeTransferTo(address payable _to, uint256 _amount) virtual override internal { payable(_to).transfer(_amount); - } - - + } + + // ================================================================================================================ // --- IWitOracle (partial) --------------------------------------------------------------------------------------- @@ -604,33 +613,6 @@ abstract contract WitOracleTrustlessBase // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- - function _require(bool _condition, string memory _message) virtual internal view { - if (!_condition) { - _revert(_message); - } - } - - function _revert(string memory _message) virtual internal view { - revert( - string(abi.encodePacked( - class(), - ": ", - _message - )) - ); - } - - function _revertWitOracleDataLibUnhandledException() internal view { - _revert(_revertWitOracleDataLibUnhandledExceptionReason()); - } - - function _revertWitOracleDataLibUnhandledExceptionReason() internal pure returns (string memory) { - return string(abi.encodePacked( - type(WitOracleDataLib).name, - ": unhandled assertion" - )); - } - function __postQuery( address _requester, uint24 _evmCallbackGasLimit, @@ -657,4 +639,15 @@ abstract contract WitOracleTrustlessBase function __storage() virtual internal pure returns (WitOracleDataLib.Storage storage _ptr) { return WitOracleDataLib.data(); } + + function _revertWitOracleDataLibUnhandledException() internal view { + _revert(_revertWitOracleDataLibUnhandledExceptionReason()); + } + + function _revertWitOracleDataLibUnhandledExceptionReason() internal pure returns (string memory) { + return string(abi.encodePacked( + type(WitOracleDataLib).name, + ": unhandled assertion" + )); + } } diff --git a/contracts/core/base/WitOracleBaseTrustable.sol b/contracts/core/base/WitOracleBaseTrustable.sol new file mode 100644 index 00000000..95c4e868 --- /dev/null +++ b/contracts/core/base/WitOracleBaseTrustable.sol @@ -0,0 +1,417 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "./WitOracleBase.sol"; +import "../WitnetUpgradableBase.sol"; +import "../../interfaces/IWitOracleAdminACLs.sol"; +import "../../interfaces/IWitOracleReporter.sol"; + +/// @title Witnet Request Board "trustable" implementation contract. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +abstract contract WitOracleBaseTrustable + is + WitOracleBase, + WitnetUpgradableBase, + IWitOracleAdminACLs, + IWitOracleReporter +{ + using Witnet for Witnet.RadonSLA; + + /// Asserts the caller is authorized as a reporter + modifier onlyReporters virtual { + _require( + WitOracleDataLib.data().reporters[msg.sender], + "unauthorized reporter" + ); _; + } + + constructor(bytes32 _versionTag) + Ownable(msg.sender) + Payable(address(0)) + WitnetUpgradableBase( + true, + _versionTag, + "io.witnet.proxiable.board" + ) + {} + + + // ================================================================================================================ + // --- Upgradeable ------------------------------------------------------------------------------------------------ + + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) virtual override public { + address _owner = owner(); + address[] memory _newReporters; + + if (_owner == address(0)) { + // get owner (and reporters) from _initData + bytes memory _newReportersRaw; + (_owner, _newReportersRaw) = abi.decode(_initData, (address, bytes)); + _transferOwnership(_owner); + _newReporters = abi.decode(_newReportersRaw, (address[])); + } else { + // only owner can initialize: + _require( + msg.sender == _owner, + "not the owner" + ); + // get reporters from _initData + _newReporters = abi.decode(_initData, (address[])); + } + + if ( + __proxiable().codehash != bytes32(0) + && __proxiable().codehash == codehash() + ) { + _revert("already upgraded"); + } + __proxiable().codehash = codehash(); + + _require(address(registry).code.length > 0, "inexistent registry"); + _require( + registry.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracleRadonRegistry).interfaceId + ), "uncompliant registry" + ); + + // Set reporters, if any + WitOracleDataLib.setReporters(_newReporters); + + emit Upgraded(_owner, base(), codehash(), version()); + } + + + // ================================================================================================================ + // --- IWitOracle ------------------------------------------------------------------------------------------------- + + /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. + /// @dev Fails if the `_queryId` is not in 'Finalized' or 'Expired' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @dev If in 'Expired' status, query reward is transfer back to the requester. + /// @param _queryId The unique query identifier. + function fetchQueryResponse(uint256 _queryId) + virtual override external + returns (Witnet.QueryResponse memory) + { + try WitOracleDataLib.fetchQueryResponse( + _queryId + + ) returns ( + Witnet.QueryResponse memory _queryResponse, + uint72 _queryEvmExpiredReward + ) { + if (_queryEvmExpiredReward > 0) { + // transfer unused reward to requester, only if the query expired: + __safeTransferTo( + payable(msg.sender), + _queryEvmExpiredReward + ); + } + return _queryResponse; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } + } + + /// Gets current status of given query. + function getQueryStatus(uint256 _queryId) + virtual override + public view + returns (Witnet.QueryStatus) + { + return WitOracleDataLib.getQueryStatus(_queryId); + } + + /// @notice Returns query's result current status from a requester's point of view: + /// @notice - 0 => Void: the query is either non-existent or deleted; + /// @notice - 1 => Awaiting: the query has not yet been reported; + /// @notice - 2 => Ready: the query has been succesfully solved; + /// @notice - 3 => Error: the query couldn't get solved due to some issue. + /// @param _queryId The unique query identifier. + function getQueryResponseStatus(uint256 _queryId) + virtual override public view + returns (Witnet.QueryResponseStatus) + { + return WitOracleDataLib.getQueryResponseStatus(_queryId); + } + + + // ================================================================================================================ + // --- Implements IWitOracleAdminACLs ----------------------------------------------------------------------------- + + /// Tells whether given address is included in the active reporters control list. + /// @param _queryResponseReporter The address to be checked. + function isReporter(address _queryResponseReporter) virtual override public view returns (bool) { + return WitOracleDataLib.isReporter(_queryResponseReporter); + } + + /// Adds given addresses to the active reporters control list. + /// @dev Can only be called from the owner address. + /// @dev Emits the `ReportersSet` event. + /// @param _queryResponseReporters List of addresses to be added to the active reporters control list. + function setReporters(address[] calldata _queryResponseReporters) + virtual override public + onlyOwner + { + WitOracleDataLib.setReporters(_queryResponseReporters); + } + + /// Removes given addresses from the active reporters control list. + /// @dev Can only be called from the owner address. + /// @dev Emits the `ReportersUnset` event. + /// @param _exReporters List of addresses to be added to the active reporters control list. + function unsetReporters(address[] calldata _exReporters) + virtual override public + onlyOwner + { + WitOracleDataLib.unsetReporters(_exReporters); + } + + + // ================================================================================================================ + // --- Implements IWitOracleReporter ------------------------------------------------------------------------------ + + /// @notice Estimates the actual earnings (or loss), in WEI, that a reporter would get by reporting result to given query, + /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on + /// @notice queries providing no actual earnings. + function estimateReportEarnings( + uint256[] calldata _queryIds, + bytes calldata, + uint256 _evmGasPrice, + uint256 _evmWitPrice + ) + external view + virtual override + returns (uint256 _revenues, uint256 _expenses) + { + for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { + if ( + getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted + ) { + Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); + if (__request.gasCallback > 0) { + _expenses += ( + estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) + + estimateExtraFee( + _evmGasPrice, + _evmWitPrice, + Witnet.RadonSLA({ + witNumWitnesses: __request.radonSLA.witNumWitnesses, + witUnitaryReward: __request.radonSLA.witUnitaryReward, + maxTallyResultSize: uint16(0) + }) + ) + ); + } else { + _expenses += ( + estimateBaseFee(_evmGasPrice) + + estimateExtraFee( + _evmGasPrice, + _evmWitPrice, + __request.radonSLA + ) + ); + } + _expenses += _evmWitPrice * __request.radonSLA.witUnitaryReward; + _revenues += __request.evmReward; + } + } + } + + /// @notice Retrieves the Witnet Data Request bytecodes and SLAs of previously posted queries. + /// @dev Returns empty buffer if the query does not exist. + /// @param _queryIds Query identifies. + function extractWitnetDataRequests(uint256[] calldata _queryIds) + external view + virtual override + returns (bytes[] memory _bytecodes) + { + return WitOracleDataLib.extractWitnetDataRequests(registry, _queryIds); + } + + /// Reports the Witnet-provable result to a previously posted request. + /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. + /// @dev Fails if: + /// @dev - the `_queryId` is not in 'Posted' status. + /// @dev - provided `_resultTallyHash` is zero; + /// @dev - length of provided `_result` is zero. + /// @param _queryId The unique identifier of the data request. + /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _resultCborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + external override + onlyReporters + returns (uint256) + { + // results cannot be empty: + _require( + _resultCborBytes.length != 0, + "result cannot be empty" + ); + // do actual report and return reward transfered to the reproter: + // solhint-disable not-rely-on-time + return __reportResultAndReward( + _queryId, + uint32(block.timestamp), + _resultTallyHash, + _resultCborBytes + ); + } + + /// Reports the Witnet-provable result to a previously posted request. + /// @dev Fails if: + /// @dev - called from unauthorized address; + /// @dev - the `_queryId` is not in 'Posted' status. + /// @dev - provided `_resultTallyHash` is zero; + /// @dev - length of provided `_resultCborBytes` is zero. + /// @param _queryId The unique query identifier + /// @param _resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. + /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _resultCborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + external + override + onlyReporters + returns (uint256) + { + // validate timestamp + _require( + _resultTimestamp > 0, + "bad timestamp" + ); + // results cannot be empty + _require( + _resultCborBytes.length != 0, + "result cannot be empty" + ); + // do actual report and return reward transfered to the reproter: + return __reportResultAndReward( + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes + ); + } + + /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. + /// @notice Emits either a WitOracleQueryResponse* or a BatchReportError event per batched report. + /// @dev Fails only if called from unauthorized address. + /// @param _batchResults Array of BatchResult structs, every one containing: + /// - unique query identifier; + /// - timestamp of the solving tally txs in Witnet. If zero is provided, EVM-timestamp will be used instead; + /// - hash of the corresponding data request tx at the Witnet side-chain level; + /// - data request result in raw bytes. + function reportResultBatch(IWitOracleReporter.BatchResult[] calldata _batchResults) + external override + onlyReporters + returns (uint256 _batchReward) + { + for (uint _i = 0; _i < _batchResults.length; _i ++) { + if ( + getQueryStatus(_batchResults[_i].queryId) + != Witnet.QueryStatus.Posted + ) { + emit BatchReportError( + _batchResults[_i].queryId, + WitOracleDataLib.notInStatusRevertMessage(Witnet.QueryStatus.Posted) + ); + } else if ( + uint256(_batchResults[_i].resultTimestamp) > block.timestamp + || _batchResults[_i].resultTimestamp == 0 + || _batchResults[_i].resultCborBytes.length == 0 + ) { + emit BatchReportError( + _batchResults[_i].queryId, + string(abi.encodePacked( + class(), + ": invalid report data" + )) + ); + } else { + _batchReward += __reportResult( + _batchResults[_i].queryId, + _batchResults[_i].resultTimestamp, + _batchResults[_i].resultTallyHash, + _batchResults[_i].resultCborBytes + ); + } + } + // Transfer rewards to all reported results in one single transfer to the reporter: + if (_batchReward > 0) { + __safeTransferTo( + payable(msg.sender), + _batchReward + ); + } + } + + + /// ================================================================================================================ + /// --- Internal methods ------------------------------------------------------------------------------------------- + + function __reportResult( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + virtual internal + returns (uint256) + { + _require( + WitOracleDataLib.getQueryStatus(_queryId) == Witnet.QueryStatus.Posted, + "not in Posted status" + ); + return WitOracleDataLib.reportResult( + msg.sender, + tx.gasprice, + uint64(block.number), + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes + ); + } + + function __reportResultAndReward( + uint256 _queryId, + uint32 _resultTimestamp, + bytes32 _resultTallyHash, + bytes calldata _resultCborBytes + ) + virtual internal + returns (uint256 _evmReward) + { + _evmReward = __reportResult( + _queryId, + _resultTimestamp, + _resultTallyHash, + _resultCborBytes + ); + // transfer reward to reporter + __safeTransferTo( + payable(msg.sender), + _evmReward + ); + } +} diff --git a/contracts/core/trustless/WitOracleTrustlessDefault.sol b/contracts/core/base/WitOracleBaseTrustless.sol similarity index 91% rename from contracts/core/trustless/WitOracleTrustlessDefault.sol rename to contracts/core/base/WitOracleBaseTrustless.sol index f48aa7e1..d88c5ed6 100644 --- a/contracts/core/trustless/WitOracleTrustlessDefault.sol +++ b/contracts/core/base/WitOracleBaseTrustless.sol @@ -1,10 +1,9 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +// SPDX-License-Identifier: MIT -import "./WitOracleTrustlessBase.sol"; +pragma solidity >=0.8.0 <0.9.0; +import "./WitOracleBase.sol"; import "../../interfaces/IWitOracleBlocks.sol"; import "../../interfaces/IWitOracleReporterTrustless.sol"; import "../../patterns/Escrowable.sol"; @@ -14,19 +13,15 @@ import "../../patterns/Escrowable.sol"; /// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. /// The result of the requests will be posted back to this contract by the bridge nodes too. /// @author The Witnet Foundation -contract WitOracleTrustlessDefault +abstract contract WitOracleBaseTrustless is Escrowable, - WitOracleTrustlessBase, + WitOracleBase, IWitOracleBlocks, IWitOracleReporterTrustless { using Witnet for Witnet.QueryResponseReport; - function class() virtual override public view returns (string memory) { - return type(WitOracleTrustlessDefault).name; - } - /// @notice Number of blocks to await for either a dispute or a proven response to some query. uint256 immutable public QUERY_AWAITING_BLOCKS; @@ -44,26 +39,11 @@ contract WitOracleTrustlessDefault } constructor( - WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas, uint256 _queryAwaitingBlocks, uint256 _queryReportingStake ) Payable(address(0)) - WitOracleTrustlessBase( - _registry, - _factory - ) { - __reportResultGasBase = _reportResultGasBase; - __reportResultWithCallbackGasBase = _reportResultWithCallbackGasBase; - __reportResultWithCallbackRevertGasBase = _reportResultWithCallbackRevertGasBase; - __sstoreFromZeroGas = _sstoreFromZeroGas; - _require(_queryAwaitingBlocks < 64, "too many awaiting blocks"); _require(_queryReportingStake > 0, "no reporting stake?"); @@ -71,7 +51,7 @@ contract WitOracleTrustlessDefault QUERY_REPORTING_STAKE = _queryReportingStake; // store genesis beacon: - __storage().beacons[ + WitOracleDataLib.data().beacons[ Witnet.WIT_2_GENESIS_BEACON_INDEX ] = Witnet.Beacon({ index: Witnet.WIT_2_GENESIS_BEACON_INDEX, @@ -86,8 +66,7 @@ contract WitOracleTrustlessDefault Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 ] }); - } - + } // ================================================================================================================ // --- Escrowable ------------------------------------------------------------------------------------------------- @@ -101,7 +80,7 @@ contract WitOracleTrustlessDefault virtual override returns (uint256) { - return __storage().escrows[tenant].collateral; + return WitOracleDataLib.data().escrows[tenant].collateral; } function balanceOf(address tenant) @@ -109,7 +88,7 @@ contract WitOracleTrustlessDefault virtual override returns (uint256) { - return __storage().escrows[tenant].balance; + return WitOracleDataLib.data().escrows[tenant].balance; } function withdraw() @@ -161,12 +140,11 @@ contract WitOracleTrustlessDefault // ================================================================================================================ - // --- IWitOracle (trustlessly) ----------------------------------------------------------------------------------- + // --- Overrides IWitOracle (trustlessly) ------------------------------------------------------------------------- function fetchQueryResponse(uint256 _queryId) virtual override external - onlyRequester(_queryId) returns (Witnet.QueryResponse memory) { try WitOracleDataLib.fetchQueryResponseTrustlessly( @@ -359,6 +337,7 @@ contract WitOracleTrustlessDefault } } + function extractQueryRelayDataBatch(uint256[] calldata _queryIds) virtual override external view returns (QueryRelayData[] memory _relays) @@ -371,14 +350,21 @@ contract WitOracleTrustlessDefault function disputeQueryResponse(uint256 _queryId) virtual override external - inStatus(_queryId, Witnet.QueryStatus.Reported) returns (uint256) { - return WitOracleDataLib.disputeQueryResponse( + try WitOracleDataLib.disputeQueryResponse( _queryId, QUERY_AWAITING_BLOCKS, QUERY_REPORTING_STAKE - ); + ) returns (uint256 _evmPotentialReward) { + return _evmPotentialReward; + + } catch Error(string memory _reason) { + _revert(_reason); + + } catch (bytes memory) { + _revertWitOracleDataLibUnhandledException(); + } } function reportQueryResponse(Witnet.QueryResponseReport calldata _responseReport) diff --git a/contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol b/contracts/core/base/WitOracleBaseUpgradable.sol similarity index 60% rename from contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol rename to contracts/core/base/WitOracleBaseUpgradable.sol index e43a9612..19ed3ada 100644 --- a/contracts/core/trustless/WitOracleTrustlessUpgradableDefault.sol +++ b/contracts/core/base/WitOracleBaseUpgradable.sol @@ -1,9 +1,8 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +pragma solidity >=0.8.0 <0.9.0; -import "./WitOracleTrustlessDefault.sol"; +import "./WitOracleBaseTrustless.sol"; import "../WitnetUpgradableBase.sol"; /// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. @@ -11,30 +10,14 @@ import "../WitnetUpgradableBase.sol"; /// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. /// The result of the requests will be posted back to this contract by the bridge nodes too. /// @author The Witnet Foundation -contract WitOracleTrustlessUpgradableDefault +abstract contract WitOracleBaseUpgradable is - WitOracleTrustlessDefault, + WitOracleBaseTrustless, WitnetUpgradableBase -{ - function class() - virtual override(WitOracleTrustlessDefault, WitnetUpgradableBase) - public view - returns (string memory) - { - return type(WitOracleTrustlessUpgradableDefault).name; - } - +{ constructor( - WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, bytes32 _versionTag, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas, - uint256 _queryAwaitingBlocks, - uint256 _queryReportingStake + bool _upgradable ) Ownable(msg.sender) WitnetUpgradableBase( @@ -42,19 +25,8 @@ contract WitOracleTrustlessUpgradableDefault _versionTag, "io.witnet.proxiable.board" ) - WitOracleTrustlessDefault( - _registry, - _factory, - _reportResultGasBase, - _reportResultWithCallbackGasBase, - _reportResultWithCallbackRevertGasBase, - _sstoreFromZeroGas, - _queryAwaitingBlocks, - _queryReportingStake - ) {} - // ================================================================================================================ // ---Upgradeable ------------------------------------------------------------------------------------------------- @@ -70,7 +42,7 @@ contract WitOracleTrustlessUpgradableDefault _transferOwnership(_owner); // save into storage genesis beacon - __storage().beacons[ + WitOracleDataLib.data().beacons[ Witnet.WIT_2_GENESIS_BEACON_INDEX ] = Witnet.Beacon({ index: Witnet.WIT_2_GENESIS_BEACON_INDEX, @@ -103,32 +75,19 @@ contract WitOracleTrustlessUpgradableDefault __proxiable().codehash = codehash(); _require(address(registry).code.length > 0, "inexistent registry"); - _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); + _require( + registry.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracleRadonRegistry).interfaceId + ), "uncompliant registry" + ); // Settle given beacon, if any: if (_initData.length > 0) { Witnet.Beacon memory _beacon = abi.decode(_initData, (Witnet.Beacon)); - __storage().beacons[_beacon.index] = _beacon; + WitOracleDataLib.data().beacons[_beacon.index] = _beacon; } emit Upgraded(_owner, base(), codehash(), version()); } - - - /// ================================================================================================================ - /// --- Internal methods ------------------------------------------------------------------------------------------- - - function _require(bool _condition, string memory _reason) - virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) - internal view - { - WitOracleTrustlessBase._require(_condition, _reason); - } - - function _revert(string memory _reason) - virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) - internal view - { - WitOracleTrustlessBase._revert(_reason); - } } diff --git a/contracts/core/trustless/WitOracleRadonRegistryDefault.sol b/contracts/core/base/WitOracleRadonRegistryBase.sol similarity index 82% rename from contracts/core/trustless/WitOracleRadonRegistryDefault.sol rename to contracts/core/base/WitOracleRadonRegistryBase.sol index c47f2a5e..81f1ea0e 100644 --- a/contracts/core/trustless/WitOracleRadonRegistryDefault.sol +++ b/contracts/core/base/WitOracleRadonRegistryBase.sol @@ -2,7 +2,6 @@ pragma solidity >=0.8.4 <0.9.0; -import "../WitnetUpgradableBase.sol"; import "../../WitOracleRadonRegistry.sol"; import "../../data/WitOracleRadonRegistryData.sol"; import "../../interfaces/IWitOracleRadonRegistryLegacy.sol"; @@ -13,11 +12,10 @@ import "../../libs/WitOracleRadonEncodingLib.sol"; /// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. /// The result of the requests will be posted back to this contract by the bridge nodes too. /// @author The Witnet Foundation -contract WitOracleRadonRegistryDefault +abstract contract WitOracleRadonRegistryBase is WitOracleRadonRegistry, WitOracleRadonRegistryData, - WitnetUpgradableBase, IWitOracleRadonRegistryLegacy { using Witnet for bytes; @@ -31,12 +29,6 @@ contract WitOracleRadonRegistryDefault using WitOracleRadonEncodingLib for Witnet.RadonRetrievalMethods; using WitOracleRadonEncodingLib for Witnet.RadonSLAv1; - function class() public view virtual override(IWitAppliance, WitnetUpgradableBase) returns (string memory) { - return type(WitOracleRadonRegistryDefault).name; - } - - bytes4 public immutable override specs = type(WitOracleRadonRegistry).interfaceId; - modifier radonRequestExists(bytes32 _radHash) { _require( __database().requests[_radHash].aggregateTallyHashes != bytes32(0), @@ -51,15 +43,6 @@ contract WitOracleRadonRegistryDefault ); _; } - constructor(bool _upgradable, bytes32 _versionTag) - Ownable(address(msg.sender)) - WitnetUpgradableBase( - _upgradable, - _versionTag, - "io.witnet.proxiable.bytecodes" - ) - {} - function _witOracleHash(bytes memory chunk) virtual internal pure returns (bytes32) { return sha256(chunk); } @@ -68,101 +51,6 @@ contract WitOracleRadonRegistryDefault _revert("no transfers"); } - - // ================================================================================================================ - // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- - - /// Returns the address of the pending owner. - function pendingOwner() - public view - virtual override - returns (address) - { - return __bytecodes().pendingOwner; - } - - /// Returns the address of the current owner. - function owner() - public view - virtual override - returns (address) - { - return __bytecodes().owner; - } - - /// Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. - /// @dev Can only be called by the current owner. - function transferOwnership(address _newOwner) - public - virtual override - onlyOwner - { - __bytecodes().pendingOwner = _newOwner; - emit OwnershipTransferStarted(owner(), _newOwner); - } - - /// @dev Transfers ownership of the contract to a new account (`_newOwner`) and deletes any pending owner. - /// @dev Internal function without access restriction. - function _transferOwnership(address _newOwner) - internal - virtual override - { - delete __bytecodes().pendingOwner; - address _oldOwner = owner(); - if (_newOwner != _oldOwner) { - __bytecodes().owner = _newOwner; - emit OwnershipTransferred(_oldOwner, _newOwner); - } - } - - - // ================================================================================================================ - // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- - - /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - public - override - { - address _owner = __bytecodes().owner; - if (_owner == address(0)) { - // set owner from the one specified in _initData - _owner = abi.decode(_initData, (address)); - __bytecodes().owner = _owner; - } else { - // only owner can initialize: - if (msg.sender != _owner) { - _revert("not the owner"); - } - } - - if (__bytecodes().base != address(0)) { - // current implementation cannot be initialized more than once: - if(__bytecodes().base == base()) { - _revert("already initialized"); - } - } - __bytecodes().base = base(); - - emit Upgraded( - _owner, - base(), - codehash(), - version() - ); - } - - /// Tells whether provided address could eventually upgrade the contract. - function isUpgradableFrom(address _from) external view override returns (bool) { - address _owner = __bytecodes().owner; - return ( - // false if the WRB is intrinsically not upgradable, or `_from` is no owner - isUpgradable() - && _owner == _from - ); - } - // ================================================================================================================ // --- Implementation of 'IWitOracleRadonRegistry' ----------------------------------------------------------------------- @@ -637,5 +525,4 @@ contract WitOracleRadonRegistryDefault __reducer.filters.push(_filters[_ix]); } } - -} \ No newline at end of file +} diff --git a/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol b/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol new file mode 100644 index 00000000..98555b2e --- /dev/null +++ b/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol @@ -0,0 +1,107 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.4 <0.9.0; + +import "../WitnetUpgradableBase.sol"; +import "../base/WitOracleRadonRegistryBase.sol"; + +/// @title Witnet Request Board EVM-default implementation contract. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +abstract contract WitOracleRadonRegistryBaseUpgradable + is + WitOracleRadonRegistryBase, + WitnetUpgradableBase +{ + constructor( + bytes32 _versionTag, + bool _upgradable + ) + Ownable(address(msg.sender)) + WitnetUpgradableBase( + _upgradable, + _versionTag, + "io.witnet.proxiable.bytecodes" + ) + {} + + // ================================================================================================================ + // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- + + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) + public + override + { + address _owner = __bytecodes().owner; + if (_owner == address(0)) { + // set owner from the one specified in _initData + _owner = abi.decode(_initData, (address)); + __bytecodes().owner = _owner; + } else { + // only owner can initialize: + if (msg.sender != _owner) { + _revert("not the owner"); + } + } + + if (__bytecodes().base != address(0)) { + // current implementation cannot be initialized more than once: + if(__bytecodes().base == base()) { + _revert("already initialized"); + } + } + __bytecodes().base = base(); + + emit Upgraded(_owner, base(), codehash(), version()); + } + + // ================================================================================================================ + // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- + + /// Returns the address of the pending owner. + function pendingOwner() + public view + virtual override + returns (address) + { + return __bytecodes().pendingOwner; + } + + /// Returns the address of the current owner. + function owner() + public view + virtual override + returns (address) + { + return __bytecodes().owner; + } + + /// Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. + /// @dev Can only be called by the current owner. + function transferOwnership(address _newOwner) + public + virtual override + onlyOwner + { + __bytecodes().pendingOwner = _newOwner; + emit OwnershipTransferStarted(owner(), _newOwner); + } + + /// @dev Transfers ownership of the contract to a new account (`_newOwner`) and deletes any pending owner. + /// @dev Internal function without access restriction. + function _transferOwnership(address _newOwner) + internal + virtual override + { + delete __bytecodes().pendingOwner; + address _oldOwner = owner(); + if (_newOwner != _oldOwner) { + __bytecodes().owner = _newOwner; + emit OwnershipTransferred(_oldOwner, _newOwner); + } + } +} diff --git a/contracts/core/trustless/WitOracleRequestFactoryDefault.sol b/contracts/core/base/WitOracleRequestFactoryBase.sol similarity index 75% rename from contracts/core/trustless/WitOracleRequestFactoryDefault.sol rename to contracts/core/base/WitOracleRequestFactoryBase.sol index 8242d392..116f4b17 100644 --- a/contracts/core/trustless/WitOracleRequestFactoryDefault.sol +++ b/contracts/core/base/WitOracleRequestFactoryBase.sol @@ -1,46 +1,34 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +pragma solidity >=0.8.0 <0.9.0; -import "../WitnetUpgradableBase.sol"; import "../../WitOracleRadonRegistry.sol"; import "../../WitOracleRequestFactory.sol"; import "../../data/WitOracleRequestFactoryData.sol"; -import "../../interfaces/IWitOracleRadonRegistryLegacy.sol"; +import "../../interfaces/IWitOracle.sol"; import "../../patterns/Clonable.sol"; -contract WitOracleRequestFactoryDefault +abstract contract WitOracleRequestFactoryBase is Clonable, WitOracleRequest, WitOracleRequestFactory, WitOracleRequestFactoryData, - WitOracleRequestTemplate, - WitnetUpgradableBase + WitOracleRequestTemplate { /// @notice Reference to the Witnet Request Board that all templates built out from this factory will refer to. WitOracle immutable public override witOracle; - modifier notOnFactory { + modifier notOnFactory virtual { _require( - address(this) != __proxy() - && address(this) != base(), + address(this) != self(), "not on factory" ); _; } - modifier onlyDelegateCalls override(Clonable, Upgradeable) { + modifier onlyOnFactory virtual { _require( - address(this) != _BASE, - "not a delegate call" - ); _; - } - - modifier onlyOnFactory { - _require( - address(this) == __proxy() - || address(this) == base(), + address(this) == self(), "not the factory" ); _; } @@ -59,23 +47,8 @@ contract WitOracleRequestFactoryDefault ); _; } - constructor( - WitOracle _witOracle, - bool _upgradable, - bytes32 _versionTag - ) - Ownable(address(msg.sender)) - WitnetUpgradableBase( - _upgradable, - _versionTag, - "io.witnet.requests.factory" - ) - { + constructor(WitOracle _witOracle) { witOracle = _witOracle; - // let logic contract be used as a factory, while avoiding further initializations: - __proxiable().proxy = address(this); - __proxiable().implementation = address(this); - __witOracleRequestFactory().owner = address(0); } function _getWitOracleRadonRegistry() virtual internal view returns (WitOracleRadonRegistry) { @@ -110,107 +83,8 @@ contract WitOracleRequestFactoryDefault return address(this); } - // ================================================================================================================ - // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- - - /// @notice Returns the address of the pending owner. - function pendingOwner() - public view - virtual override - returns (address) - { - return __witOracleRequestFactory().pendingOwner; - } - - /// @notice Returns the address of the current owner. - function owner() - virtual override - public view - returns (address) - { - return __witOracleRequestFactory().owner; - } - - /// @notice Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. - /// @dev Can only be called by the current owner. - function transferOwnership(address _newOwner) - virtual override public - onlyOwner - { - __witOracleRequestFactory().pendingOwner = _newOwner; - emit OwnershipTransferStarted(owner(), _newOwner); - } - - /// @dev Transfers ownership of the contract to a new account (`_newOwner`) and deletes any pending owner. - /// @dev Internal function without access restriction. - function _transferOwnership(address _newOwner) - internal - virtual override - { - delete __witOracleRequestFactory().pendingOwner; - address _oldOwner = owner(); - if (_newOwner != _oldOwner) { - __witOracleRequestFactory().owner = _newOwner; - emit OwnershipTransferred(_oldOwner, _newOwner); - } - } - - - // ================================================================================================================ - // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- - - /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - virtual override public - onlyDelegateCalls - { - _require(!initialized(), "already initialized"); - - // Trying to intialize an upgradable factory instance... - { - address _owner = __witOracleRequestFactory().owner; - if (_owner == address(0)) { - // Upon first initialization of an upgradable factory, - // set owner from the one specified in _initData - _owner = abi.decode(_initData, (address)); - __witOracleRequestFactory().owner = _owner; - } else { - // only the owner can upgrade an upgradable factory - _require( - msg.sender == _owner, - "not the owner" - ); - } - - if (__proxiable().proxy == address(0)) { - // first initialization of the proxy - __proxiable().proxy = address(this); - } - __proxiable().implementation = base(); - - _require(address(witOracle).code.length > 0, "inexistent request board"); - _require(witOracle.specs() == type(WitOracle).interfaceId, "uncompliant request board"); - - emit Upgraded(msg.sender, base(), codehash(), version()); - } - } - - /// Tells whether provided address could eventually upgrade the contract. - function isUpgradableFrom(address _from) external view override returns (bool) { - address _owner = __witOracleRequestFactory().owner; - return ( - // false if the logic contract is intrinsically not upgradable, or `_from` is no owner - isUpgradable() - && _owner == _from - && _owner != address(0) - ); - } - - - // ================================================================================================================ - /// --- Clonable implementation and override ---------------------------------------------------------------------- + /// --- Overrides Clonable ---------------------------------------------------------------------------------------- /// @notice Tells whether a WitOracleRequest or a WitOracleRequestTemplate has been properly initialized. function initialized() @@ -221,31 +95,26 @@ contract WitOracleRequestFactoryDefault return ( __witOracleRequestTemplate().tallyReduceHash != bytes16(0) || __witOracleRequest().radHash != bytes32(0) - || __implementation() == base() ); } - /// @notice Contract address to which clones will be re-directed. - function self() - virtual override - public view - returns (address) - { - return (__proxy() != address(0) - ? __implementation() - : base() - ); - } + // /// @notice Contract address to which clones will be re-directed. + // function self() + // virtual override + // public view + // returns (address) + // { + // return (__proxy() != address(0) + // ? __implementation() + // : base() + // ); + // } /// =============================================================================================================== - /// --- IWitOracleRequestFactory, IWitOracleRequestTemplate, IWitOracleRequest polymorphic methods ------------------------- + /// --- IWitOracleRequestFactory, IWitOracleRequestTemplate, IWitOracleRequest polymorphic methods ---------------- - function class() - virtual override(IWitAppliance, WitnetUpgradableBase) - public view - returns (string memory) - { + function class() virtual override public view returns (string memory) { if (__witOracleRequest().radHash != bytes32(0)) { return type(WitOracleRequest).name; } else if (__witOracleRequestTemplate().tallyReduceHash != bytes16(0)) { @@ -261,17 +130,26 @@ contract WitOracleRequestFactoryDefault returns (bytes4) { if (__witOracleRequest().radHash != bytes32(0)) { - return type(WitOracleRequest).interfaceId; + return ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitOracleRequest).interfaceId + ); } else if (__witOracleRequestTemplate().tallyReduceHash != bytes16(0)) { - return type(WitOracleRequestTemplate).interfaceId; + return ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitOracleRequestTemplate).interfaceId + ); } else { - return type(WitOracleRequestFactory).interfaceId; + return ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitOracleRequestFactory).interfaceId + ); } } /// =============================================================================================================== - /// --- IWitOracleRequestTemplate, IWitOracleRequest polymorphic methods ------------------------------------------------ + /// --- IWitOracleRequestTemplate, IWitOracleRequest polymorphic methods ------------------------------------------ function getRadonReducers() virtual override (IWitOracleRequest, IWitOracleRequestTemplate) @@ -354,11 +232,11 @@ contract WitOracleRequestFactoryDefault } function version() - virtual override(IWitOracleRequest, IWitOracleRequestTemplate, WitnetUpgradableBase) + virtual override(IWitOracleRequest, IWitOracleRequestTemplate) public view returns (string memory) { - return WitnetUpgradableBase.version(); + return IWitAppliance(address(this)).class(); } @@ -588,7 +466,7 @@ contract WitOracleRequestFactoryDefault // Create and initialize counter-factual request just once: if (_requestAddr.code.length == 0) { - _requestAddr = WitOracleRequestFactoryDefault(_cloneDeterministic(_requestSalt)) + _requestAddr = WitOracleRequestFactoryBase(_cloneDeterministic(_requestSalt)) .initializeWitOracleRequest( _radHash ); @@ -617,7 +495,7 @@ contract WitOracleRequestFactoryDefault // Create and initialize counter-factual template just once: if (_templateAddr.code.length == 0) { _templateAddr = address( - WitOracleRequestFactoryDefault(_cloneDeterministic(_templateSalt)) + WitOracleRequestFactoryBase(_cloneDeterministic(_templateSalt)) .initializeWitOracleRequestTemplate( _retrieveHashes, _aggregateReducerHash, @@ -658,7 +536,7 @@ contract WitOracleRequestFactoryDefault bytes32 _salt = keccak256( abi.encodePacked( _radHash, - bytes4(_WITNET_UPGRADABLE_VERSION) + class() ) ); return ( @@ -684,8 +562,8 @@ contract WitOracleRequestFactoryDefault bytes32 _salt = keccak256( // As to avoid template address collisions from: abi.encodePacked( - // - different factory major or mid versions: - bytes4(_WITNET_UPGRADABLE_VERSION), + // - different factory implementation class + class(), // - different templates params: _retrieveHashes, _aggregateReducerHash, diff --git a/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol b/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol new file mode 100644 index 00000000..f836a9b5 --- /dev/null +++ b/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol @@ -0,0 +1,231 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.4 <0.9.0; + +import "./WitOracleRequestFactoryBase.sol"; +import "../WitnetUpgradableBase.sol"; + +/// @title Witnet Request Board EVM-default implementation contract. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +abstract contract WitOracleRequestFactoryBaseUpgradable + is + WitOracleRequestFactoryBase, + WitnetUpgradableBase +{ + modifier onlyDelegateCalls override(Clonable, Upgradeable) { + _require( + address(this) != _BASE, + "not a delegate call" + ); _; + } + + modifier notOnFactory virtual override { + _require( + address(this) != __proxy() + && address(this) != base(), + "not on factory" + ); _; + } + + modifier onlyOnFactory virtual override { + _require( + address(this) == __proxy() + || address(this) == base(), + "not the factory" + ); _; + } + + constructor( + bytes32 _versionTag, + bool _upgradable + ) + Ownable(address(msg.sender)) + WitnetUpgradableBase( + _upgradable, + _versionTag, + "io.witnet.requests.factory" + ) + { + // let logic contract be used as a factory, while avoiding further initializations: + __proxiable().proxy = address(this); + __proxiable().implementation = address(this); + __witOracleRequestFactory().owner = address(0); + } + + function version() + virtual override(WitOracleRequestFactoryBase, WitnetUpgradableBase) + public view + returns (string memory) + { + return WitnetUpgradableBase.version(); + } + + // ================================================================================================================ + // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- + + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) + virtual override public + onlyDelegateCalls + { + _require(!initialized(), "already initialized"); + + // Trying to intialize an upgradable factory instance... + { + address _owner = __witOracleRequestFactory().owner; + if (_owner == address(0)) { + // Upon first initialization of an upgradable factory, + // set owner from the one specified in _initData + _owner = abi.decode(_initData, (address)); + __witOracleRequestFactory().owner = _owner; + } else { + // only the owner can upgrade an upgradable factory + _require( + msg.sender == _owner, + "not the owner" + ); + } + + if (__proxiable().proxy == address(0)) { + // first initialization of the proxy + __proxiable().proxy = address(this); + } + __proxiable().implementation = base(); + + _require(address(witOracle).code.length > 0, "inexistent request board"); + _require( + witOracle.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ), "uncompliant request board" + ); + + emit Upgraded(msg.sender, base(), codehash(), version()); + } + } + + // ================================================================================================================ + // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- + + /// @notice Returns the address of the pending owner. + function pendingOwner() + public view + virtual override + returns (address) + { + return __witOracleRequestFactory().pendingOwner; + } + + /// @notice Returns the address of the current owner. + function owner() + virtual override + public view + returns (address) + { + return __witOracleRequestFactory().owner; + } + + /// @notice Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. + /// @dev Can only be called by the current owner. + function transferOwnership(address _newOwner) + virtual override public + onlyOwner + { + __witOracleRequestFactory().pendingOwner = _newOwner; + emit OwnershipTransferStarted(owner(), _newOwner); + } + + /// @dev Transfers ownership of the contract to a new account (`_newOwner`) and deletes any pending owner. + /// @dev Internal function without access restriction. + function _transferOwnership(address _newOwner) + internal + virtual override + { + delete __witOracleRequestFactory().pendingOwner; + address _oldOwner = owner(); + if (_newOwner != _oldOwner) { + __witOracleRequestFactory().owner = _newOwner; + emit OwnershipTransferred(_oldOwner, _newOwner); + } + } + + // ================================================================================================================ + /// --- Overrides Clonable ---------------------------------------------------------------------------------------- + + /// @notice Tells whether a WitOracleRequest or a WitOracleRequestTemplate has been properly initialized. + function initialized() virtual override public view returns (bool) { + return ( + super.initialized() + || __implementation() == base() + ); + } + + /// @notice Contract address to which clones will be re-directed. + function self() + virtual override + public view + returns (address) + { + return (__proxy() != address(0) + ? __implementation() + : base() + ); + } + + function _determineWitOracleRequestAddressAndSalt(bytes32 _radHash) + virtual override internal view + returns (address, bytes32) + { + bytes32 _salt = keccak256( + abi.encodePacked( + _radHash, + bytes4(_WITNET_UPGRADABLE_VERSION) + ) + ); + return ( + address(uint160(uint256(keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + _salt, + keccak256(_cloneBytecode()) + ) + )))), _salt + ); + } + + function _determineWitOracleRequestTemplateAddressAndSalt( + bytes32[] memory _retrieveHashes, + bytes16 _aggregateReducerHash, + bytes16 _tallyReducerHash + ) + virtual override internal view + returns (address, bytes32) + { + bytes32 _salt = keccak256( + // As to avoid template address collisions from: + abi.encodePacked( + // - different factory major or mid versions: + bytes4(_WITNET_UPGRADABLE_VERSION), + // - different templates params: + _retrieveHashes, + _aggregateReducerHash, + _tallyReducerHash + ) + ); + return ( + address(uint160(uint256(keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + _salt, + keccak256(_cloneBytecode()) + ) + )))), _salt + ); + } +} diff --git a/contracts/core/trustable/WitOracleTrustableDefault.sol b/contracts/core/trustable/WitOracleTrustableDefault.sol index e0b6e795..8fb08ff8 100644 --- a/contracts/core/trustable/WitOracleTrustableDefault.sol +++ b/contracts/core/trustable/WitOracleTrustableDefault.sol @@ -1,14 +1,8 @@ // SPDX-License-Identifier: MIT -/* solhint-disable var-name-mixedcase */ +pragma solidity >=0.8.0 <0.9.0; -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../WitnetUpgradableBase.sol"; -import "../trustless/WitOracleTrustlessBase.sol"; -import "../../interfaces/IWitOracleAdminACLs.sol"; -import "../../interfaces/IWitOracleReporter.sol"; +import "../base/WitOracleBaseTrustable.sol"; /// @title Witnet Request Board "trustable" implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -17,440 +11,23 @@ import "../../interfaces/IWitOracleReporter.sol"; /// @author The Witnet Foundation contract WitOracleTrustableDefault is - WitnetUpgradableBase, - WitOracleTrustlessBase, - IWitOracleAdminACLs, - IWitOracleReporter + WitOracleBaseTrustable { - using Witnet for Witnet.RadonSLA; - - function class() - virtual override(WitOracleTrustlessBase, WitnetUpgradableBase) - public view - returns (string memory) - { + function class() virtual override public view returns (string memory) { return type(WitOracleTrustableDefault).name; } - /// Asserts the caller is authorized as a reporter - modifier onlyReporters { - _require( - __storage().reporters[msg.sender], - "unauthorized reporter" - ); _; - } - constructor( + EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas + // WitOracleRequestFactory _factory, + bytes32 _versionTag ) - Ownable(msg.sender) - Payable(address(0)) - WitnetUpgradableBase( - _upgradable, - _versionTag, - "io.witnet.proxiable.board" + WitOracleBase( + _immutables, + _registry + // _factory ) - WitOracleTrustlessBase( - _registry, - _factory - ) - { - __reportResultGasBase = _reportResultGasBase; - __reportResultWithCallbackGasBase = _reportResultWithCallbackGasBase; - __reportResultWithCallbackRevertGasBase = _reportResultWithCallbackRevertGasBase; - __sstoreFromZeroGas = _sstoreFromZeroGas; - } - - - // ================================================================================================================ - // --- Upgradeable ------------------------------------------------------------------------------------------------ - - /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) virtual override public { - address _owner = owner(); - address[] memory _newReporters; - - if (_owner == address(0)) { - // get owner (and reporters) from _initData - bytes memory _newReportersRaw; - (_owner, _newReportersRaw) = abi.decode(_initData, (address, bytes)); - _transferOwnership(_owner); - _newReporters = abi.decode(_newReportersRaw, (address[])); - } else { - // only owner can initialize: - _require( - msg.sender == _owner, - "not the owner" - ); - // get reporters from _initData - _newReporters = abi.decode(_initData, (address[])); - } - - if ( - __proxiable().codehash != bytes32(0) - && __proxiable().codehash == codehash() - ) { - _revert("already upgraded"); - } - __proxiable().codehash = codehash(); - - _require(address(registry).code.length > 0, "inexistent registry"); - _require(registry.specs() == type(WitOracleRadonRegistry).interfaceId, "uncompliant registry"); - - // Set reporters, if any - WitOracleDataLib.setReporters(_newReporters); - - emit Upgraded(_owner, base(), codehash(), version()); - } - - - // ================================================================================================================ - // --- IWitOracle ------------------------------------------------------------------------------------------------- - - /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. - /// @dev Fails if the `_queryId` is not in 'Finalized' or 'Expired' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @dev If in 'Expired' status, query reward is transfer back to the requester. - /// @param _queryId The unique query identifier. - function fetchQueryResponse(uint256 _queryId) - virtual override external - onlyRequester(_queryId) - returns (Witnet.QueryResponse memory) - { - try WitOracleDataLib.fetchQueryResponse( - _queryId - - ) returns ( - Witnet.QueryResponse memory _queryResponse, - uint72 _queryEvmExpiredReward - ) { - if (_queryEvmExpiredReward > 0) { - // transfer unused reward to requester, only if the query expired: - __safeTransferTo( - payable(msg.sender), - _queryEvmExpiredReward - ); - } - return _queryResponse; - - } catch Error(string memory _reason) { - _revert(_reason); - - } catch (bytes memory) { - _revertWitOracleDataLibUnhandledException(); - } - } - - /// @notice Returns query's result current status from a requester's point of view: - /// @notice - 0 => Void: the query is either non-existent or deleted; - /// @notice - 1 => Awaiting: the query has not yet been reported; - /// @notice - 2 => Ready: the query has been succesfully solved; - /// @notice - 3 => Error: the query couldn't get solved due to some issue. - /// @param _queryId The unique query identifier. - function getQueryResponseStatus(uint256 _queryId) - virtual override - public view - returns (Witnet.QueryResponseStatus) - { - return WitOracleDataLib.getQueryResponseStatus(_queryId); - } - - /// Gets current status of given query. - function getQueryStatus(uint256 _queryId) - virtual override - public view - returns (Witnet.QueryStatus) - { - return WitOracleDataLib.getQueryStatus(_queryId); - } - - - // ================================================================================================================ - // --- IWitOracleAdminACLs ---------------------------------------------------------------------------------------- - - /// Tells whether given address is included in the active reporters control list. - /// @param _queryResponseReporter The address to be checked. - function isReporter(address _queryResponseReporter) virtual override public view returns (bool) { - return WitOracleDataLib.isReporter(_queryResponseReporter); - } - - /// Adds given addresses to the active reporters control list. - /// @dev Can only be called from the owner address. - /// @dev Emits the `ReportersSet` event. - /// @param _queryResponseReporters List of addresses to be added to the active reporters control list. - function setReporters(address[] calldata _queryResponseReporters) - virtual override public - onlyOwner - { - WitOracleDataLib.setReporters(_queryResponseReporters); - } - - /// Removes given addresses from the active reporters control list. - /// @dev Can only be called from the owner address. - /// @dev Emits the `ReportersUnset` event. - /// @param _exReporters List of addresses to be added to the active reporters control list. - function unsetReporters(address[] calldata _exReporters) - virtual override public - onlyOwner - { - WitOracleDataLib.unsetReporters(_exReporters); - } - - - // ================================================================================================================ - // --- IWitOracleReporter ----------------------------------------------------------------------------------------- - - /// @notice Estimates the actual earnings (or loss), in WEI, that a reporter would get by reporting result to given query, - /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on - /// @notice queries providing no actual earnings. - function estimateReportEarnings( - uint256[] calldata _queryIds, - bytes calldata, - uint256 _evmGasPrice, - uint256 _evmWitPrice - ) - external view - virtual override - returns (uint256 _revenues, uint256 _expenses) - { - for (uint _ix = 0; _ix < _queryIds.length; _ix ++) { - if ( - getQueryStatus(_queryIds[_ix]) == Witnet.QueryStatus.Posted - ) { - Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); - if (__request.gasCallback > 0) { - _expenses += ( - estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) - + estimateExtraFee( - _evmGasPrice, - _evmWitPrice, - Witnet.RadonSLA({ - witNumWitnesses: __request.radonSLA.witNumWitnesses, - witUnitaryReward: __request.radonSLA.witUnitaryReward, - maxTallyResultSize: uint16(0) - }) - ) - ); - } else { - _expenses += ( - estimateBaseFee(_evmGasPrice) - + estimateExtraFee( - _evmGasPrice, - _evmWitPrice, - __request.radonSLA - ) - ); - } - _expenses += _evmWitPrice * __request.radonSLA.witUnitaryReward; - _revenues += __request.evmReward; - } - } - } - - /// @notice Retrieves the Witnet Data Request bytecodes and SLAs of previously posted queries. - /// @dev Returns empty buffer if the query does not exist. - /// @param _queryIds Query identifies. - function extractWitnetDataRequests(uint256[] calldata _queryIds) - external view - virtual override - returns (bytes[] memory _bytecodes) - { - return WitOracleDataLib.extractWitnetDataRequests(registry, _queryIds); - } - - /// Reports the Witnet-provable result to a previously posted request. - /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. - /// @dev Fails if: - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_resultTallyHash` is zero; - /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique identifier of the data request. - /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _resultCborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - external override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - // results cannot be empty: - _require( - _resultCborBytes.length != 0, - "result cannot be empty" - ); - // do actual report and return reward transfered to the reproter: - // solhint-disable not-rely-on-time - return __reportResultAndReward( - _queryId, - uint32(block.timestamp), - _resultTallyHash, - _resultCborBytes - ); - } - - /// Reports the Witnet-provable result to a previously posted request. - /// @dev Fails if: - /// @dev - called from unauthorized address; - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_resultTallyHash` is zero; - /// @dev - length of provided `_resultCborBytes` is zero. - /// @param _queryId The unique query identifier - /// @param _resultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. - /// @param _resultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _resultCborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - external - override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - // validate timestamp - _require( - _resultTimestamp > 0, - "bad timestamp" - ); - // results cannot be empty - _require( - _resultCborBytes.length != 0, - "result cannot be empty" - ); - // do actual report and return reward transfered to the reproter: - return __reportResultAndReward( - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - } - - /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. - /// @notice Emits either a WitOracleQueryResponse* or a BatchReportError event per batched report. - /// @dev Fails only if called from unauthorized address. - /// @param _batchResults Array of BatchResult structs, every one containing: - /// - unique query identifier; - /// - timestamp of the solving tally txs in Witnet. If zero is provided, EVM-timestamp will be used instead; - /// - hash of the corresponding data request tx at the Witnet side-chain level; - /// - data request result in raw bytes. - function reportResultBatch(IWitOracleReporter.BatchResult[] calldata _batchResults) - external override - onlyReporters - returns (uint256 _batchReward) - { - for (uint _i = 0; _i < _batchResults.length; _i ++) { - if ( - getQueryStatus(_batchResults[_i].queryId) - != Witnet.QueryStatus.Posted - ) { - emit BatchReportError( - _batchResults[_i].queryId, - WitOracleDataLib.notInStatusRevertMessage(Witnet.QueryStatus.Posted) - ); - } else if ( - uint256(_batchResults[_i].resultTimestamp) > block.timestamp - || _batchResults[_i].resultTimestamp == 0 - || _batchResults[_i].resultCborBytes.length == 0 - ) { - emit BatchReportError( - _batchResults[_i].queryId, - string(abi.encodePacked( - class(), - ": invalid report data" - )) - ); - } else { - _batchReward += __reportResult( - _batchResults[_i].queryId, - _batchResults[_i].resultTimestamp, - _batchResults[_i].resultTallyHash, - _batchResults[_i].resultCborBytes - ); - } - } - // Transfer rewards to all reported results in one single transfer to the reporter: - if (_batchReward > 0) { - __safeTransferTo( - payable(msg.sender), - _batchReward - ); - } - } - - - /// ================================================================================================================ - /// --- Internal methods ------------------------------------------------------------------------------------------- - - function _require(bool _condition, string memory _reason) - virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) - internal view - { - WitOracleTrustlessBase._require(_condition, _reason); - } - - function _revert(string memory _reason) - virtual override (WitOracleTrustlessBase, WitnetUpgradableBase) - internal view - { - WitOracleTrustlessBase._revert(_reason); - } - - function __reportResult( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - virtual internal - returns (uint256) - { - return WitOracleDataLib.reportResult( - msg.sender, - tx.gasprice, - uint64(block.number), - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - } - - function __reportResultAndReward( - uint256 _queryId, - uint32 _resultTimestamp, - bytes32 _resultTallyHash, - bytes calldata _resultCborBytes - ) - virtual internal - returns (uint256 _evmReward) - { - _evmReward = __reportResult( - _queryId, - _resultTimestamp, - _resultTallyHash, - _resultCborBytes - ); - // transfer reward to reporter - __safeTransferTo( - payable(msg.sender), - _evmReward - ); - } - + WitOracleBaseTrustable(_versionTag) + {} } diff --git a/contracts/core/trustable/WitOracleTrustableObscuro.sol b/contracts/core/trustable/WitOracleTrustableObscuro.sol index db30a597..cdb506b8 100644 --- a/contracts/core/trustable/WitOracleTrustableObscuro.sol +++ b/contracts/core/trustable/WitOracleTrustableObscuro.sol @@ -1,11 +1,8 @@ // SPDX-License-Identifier: MIT -/* solhint-disable var-name-mixedcase */ +pragma solidity >=0.8.0 <0.9.0; -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./WitOracleTrustableDefault.sol"; +import "../base/WitOracleBaseTrustable.sol"; /// @title Witnet Request Board "trustable" implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -14,37 +11,28 @@ import "./WitOracleTrustableDefault.sol"; /// @author The Witnet Foundation contract WitOracleTrustableObscuro is - WitOracleTrustableDefault + WitOracleBaseTrustable { function class() virtual override public view returns (string memory) { - return type(WitOracleTrustableObscuro).name; + return type(WitOracleBaseTrustable).name; } constructor( + EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas + // WitOracleRequestFactory _factory, + bytes32 _versionTag ) - WitOracleTrustableDefault( - _registry, - _factory, - _upgradable, - _versionTag, - _reportResultGasBase, - _reportResultWithCallbackGasBase, - _reportResultWithCallbackRevertGasBase, - _sstoreFromZeroGas + WitOracleBase( + _immutables, + _registry + // _factory ) + WitOracleBaseTrustable(_versionTag) {} - // ================================================================================================================ - // --- Overrides implementation of 'IWitOracleView' ------------------------------------------------------ + // --- Overrides 'IWitOracle' ------------------------------------------------------------------------------------- /// @notice Gets the whole Query data contents, if any, no matter its current status. /// @dev Fails if or if `msg.sender` is not the actual requester. @@ -78,6 +66,5 @@ contract WitOracleTrustableObscuro returns (Witnet.ResultError memory) { return super.getQueryResultError(_queryId); - } - + } } diff --git a/contracts/core/trustable/WitOracleTrustableOvm2.sol b/contracts/core/trustable/WitOracleTrustableOvm2.sol index 09d14d9b..76bdaa71 100644 --- a/contracts/core/trustable/WitOracleTrustableOvm2.sol +++ b/contracts/core/trustable/WitOracleTrustableOvm2.sol @@ -1,11 +1,8 @@ // SPDX-License-Identifier: MIT -/* solhint-disable var-name-mixedcase */ +pragma solidity >=0.8.0 <0.9.0; -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./WitOracleTrustableDefault.sol"; +import "../base/WitOracleBaseTrustable.sol"; // solhint-disable-next-line interface OVM_GasPriceOracle { @@ -19,34 +16,24 @@ interface OVM_GasPriceOracle { /// @author The Witnet Foundation contract WitOracleTrustableOvm2 is - WitOracleTrustableDefault + WitOracleBaseTrustable { - using Witnet for Witnet.RadonSLA; - function class() virtual override public view returns (string memory) { return type(WitOracleTrustableOvm2).name; } constructor( + EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas + // WitOracleRequestFactory _factory, + bytes32 _versionTag ) - WitOracleTrustableDefault( - _registry, - _factory, - _upgradable, - _versionTag, - _reportResultGasBase, - _reportResultWithCallbackGasBase, - _reportResultWithCallbackRevertGasBase, - _sstoreFromZeroGas + WitOracleBase( + _immutables, + _registry + // _factory ) + WitOracleBaseTrustable(_versionTag) { __gasPriceOracleL1 = OVM_GasPriceOracle(0x420000000000000000000000000000000000000F); } @@ -87,7 +74,7 @@ contract WitOracleTrustableOvm2 virtual override returns (uint256) { - return _getCurrentL1Fee(_resultMaxSize) + WitOracleTrustlessBase.estimateBaseFee(_gasPrice, _resultMaxSize); + return _getCurrentL1Fee(_resultMaxSize) + WitOracleBase.estimateBaseFee(_gasPrice, _resultMaxSize); } /// @notice Estimate the minimum reward required for posting a data request with a callback. @@ -98,7 +85,7 @@ contract WitOracleTrustableOvm2 virtual override returns (uint256) { - return _getCurrentL1Fee(32) + WitOracleTrustlessBase.estimateBaseFeeWithCallback(_gasPrice, _callbackGasLimit); + return _getCurrentL1Fee(32) + WitOracleBase.estimateBaseFeeWithCallback(_gasPrice, _callbackGasLimit); } /// @notice Estimate the extra reward (i.e. over the base fee) to be paid when posting a new @@ -119,7 +106,7 @@ contract WitOracleTrustableOvm2 { return ( _getCurrentL1Fee(_querySLA.maxTallyResultSize) - + WitOracleTrustlessBase.estimateExtraFee( + + WitOracleBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, _querySLA @@ -150,8 +137,8 @@ contract WitOracleTrustableOvm2 Witnet.QueryRequest storage __request = WitOracleDataLib.seekQueryRequest(_queryIds[_ix]); if (__request.gasCallback > 0) { _expenses += ( - WitOracleTrustlessBase.estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) - + WitOracleTrustlessBase.estimateExtraFee( + WitOracleBase.estimateBaseFeeWithCallback(_evmGasPrice, __request.gasCallback) + + WitOracleBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, Witnet.RadonSLA({ @@ -163,8 +150,8 @@ contract WitOracleTrustableOvm2 ); } else { _expenses += ( - WitOracleTrustlessBase.estimateBaseFee(_evmGasPrice) - + WitOracleTrustlessBase.estimateExtraFee( + WitOracleBase.estimateBaseFee(_evmGasPrice) + + WitOracleBase.estimateExtraFee( _evmGasPrice, _evmWitPrice, __request.radonSLA diff --git a/contracts/core/trustable/WitOracleTrustableReef.sol b/contracts/core/trustable/WitOracleTrustableReef.sol index 5a65ffa8..def29053 100644 --- a/contracts/core/trustable/WitOracleTrustableReef.sol +++ b/contracts/core/trustable/WitOracleTrustableReef.sol @@ -2,11 +2,9 @@ /* solhint-disable var-name-mixedcase */ -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; +pragma solidity >=0.8.0 <0.9.0; -// Inherits from: -import "./WitOracleTrustableDefault.sol"; +import "../base/WitOracleBaseTrustable.sol"; /// @title Witnet Request Board OVM-compatible (Optimism) "trustable" implementation. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -15,34 +13,38 @@ import "./WitOracleTrustableDefault.sol"; /// @author The Witnet Foundation contract WitOracleTrustableReef is - WitOracleTrustableDefault + WitOracleBaseTrustable { - function class() virtual override public view returns (string memory) { + function class() virtual override public view returns (string memory) { return type(WitOracleTrustableReef).name; } constructor( + EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - WitOracleRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - uint256 _reportResultGasBase, - uint256 _reportResultWithCallbackGasBase, - uint256 _reportResultWithCallbackRevertGasBase, - uint256 _sstoreFromZeroGas + // WitOracleRequestFactory _factory, + bytes32 _versionTag ) - WitOracleTrustableDefault( - _registry, - _factory, - _upgradable, - _versionTag, - _reportResultGasBase, - _reportResultWithCallbackGasBase, - _reportResultWithCallbackRevertGasBase, - _sstoreFromZeroGas + WitOracleBase( + _immutables, + _registry + // _factory ) + WitOracleBaseTrustable(_versionTag) {} - + + // ================================================================================================================ + // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- + + /// Gets current transaction price. + function _getGasPrice() + internal pure + virtual override + returns (uint256) + { + return 1; + } + // ================================================================================================================ // --- Overrides 'IWitOracle' ---------------------------------------------------------------------------- @@ -54,7 +56,7 @@ contract WitOracleTrustableReef virtual override returns (uint256) { - return WitOracleTrustlessBase.estimateBaseFee(1, _resultMaxSize); + return WitOracleBase.estimateBaseFee(1, _resultMaxSize); } /// @notice Estimate the minimum reward required for posting a data request with a callback. @@ -64,19 +66,6 @@ contract WitOracleTrustableReef virtual override returns (uint256) { - return WitOracleTrustlessBase.estimateBaseFeeWithCallback(1, _callbackGasLimit); - } - - - // ================================================================================================================ - // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- - - /// Gets current transaction price. - function _getGasPrice() - internal pure - virtual override - returns (uint256) - { - return 1; + return WitOracleBase.estimateBaseFeeWithCallback(1, _callbackGasLimit); } } diff --git a/contracts/core/trustless/WitOracleRadonRegistryDefaultV21.sol b/contracts/core/trustless/WitOracleRadonRegistryDefaultV21.sol new file mode 100644 index 00000000..986edc6f --- /dev/null +++ b/contracts/core/trustless/WitOracleRadonRegistryDefaultV21.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleRadonRegistryBase.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +contract WitOracleRadonRegistryDefaultV21 + is + WitOracleRadonRegistryBase +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRadonRegistryDefaultV21).name; + } +} diff --git a/contracts/core/trustless/WitOracleRadonRegistryNoSha256.sol b/contracts/core/trustless/WitOracleRadonRegistryNoSha256.sol deleted file mode 100644 index 9987c174..00000000 --- a/contracts/core/trustless/WitOracleRadonRegistryNoSha256.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./WitOracleRadonRegistryDefault.sol"; - -contract WitOracleRadonRegistryNoSha256 - is - WitOracleRadonRegistryDefault -{ - function class() virtual override public view returns (string memory) { - return type(WitOracleRadonRegistryNoSha256).name; - } - - constructor(bool _upgradable, bytes32 _versionTag) - WitOracleRadonRegistryDefault(_upgradable, _versionTag) - {} - - function _witOracleHash(bytes memory chunk) virtual override internal pure returns (bytes32) { - return keccak256(chunk); - } -} \ No newline at end of file diff --git a/contracts/core/trustless/WitOracleRequestFactoryCfxCore.sol b/contracts/core/trustless/WitOracleRequestFactoryCfxCore.sol deleted file mode 100644 index 7f5df49a..00000000 --- a/contracts/core/trustless/WitOracleRequestFactoryCfxCore.sol +++ /dev/null @@ -1,31 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./WitOracleRequestFactoryDefault.sol"; - -contract WitOracleRequestFactoryCfxCore - is - WitOracleRequestFactoryDefault -{ - constructor( - WitOracle _witOracle, - bool _upgradable, - bytes32 _versionTag - ) - WitOracleRequestFactoryDefault(_witOracle, _upgradable, _versionTag) - {} - - function _cloneDeterministic(bytes32 _salt) - override internal - returns (address _instance) - { - bytes memory ptr = _cloneBytecodePtr(); - assembly { - // CREATE2 new instance: - _instance := create2(0, ptr, 0x37, _salt) - } - emit Cloned(msg.sender, self(), _instance); - } -} \ No newline at end of file diff --git a/contracts/core/trustless/WitOracleRequestFactoryDefaultV21.sol b/contracts/core/trustless/WitOracleRequestFactoryDefaultV21.sol new file mode 100644 index 00000000..940c0905 --- /dev/null +++ b/contracts/core/trustless/WitOracleRequestFactoryDefaultV21.sol @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleRequestFactoryBase.sol"; + +contract WitOracleRequestFactoryDefaultV21 + is + WitOracleRequestFactoryBase +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRequestFactoryDefaultV21).name; + } + + constructor(WitOracle _witOracle) + WitOracleRequestFactoryBase(_witOracle) + {} +} diff --git a/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol b/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol new file mode 100644 index 00000000..2ae1edfe --- /dev/null +++ b/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleBaseTrustless.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +contract WitOracleTrustlessDefaultV21 + is + WitOracleBaseTrustless +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleTrustlessDefaultV21).name; + } + + constructor( + EvmImmutables memory _immutables, + uint256 _queryAwaitingBlocks, + uint256 _queryReportingStake, + WitOracleRadonRegistry _registry + // WitOracleRequestFactory _factory + ) + WitOracleBase( + _immutables, + _registry + // _factory + ) + WitOracleBaseTrustless( + _queryAwaitingBlocks, + _queryReportingStake + ) + { + // _require( + // _registry.specs() == ( + // type(IWitAppliance).interfaceId + // ^ type(IWitOracleRadonRegistry).interfaceId + // ), "uncompliant registry" + // ); + } +} diff --git a/contracts/core/upgradable/WitOracleRadonRegistryUpgradableDefault.sol b/contracts/core/upgradable/WitOracleRadonRegistryUpgradableDefault.sol new file mode 100644 index 00000000..5a0df43c --- /dev/null +++ b/contracts/core/upgradable/WitOracleRadonRegistryUpgradableDefault.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleRadonRegistryBaseUpgradable.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +contract WitOracleRadonRegistryUpgradableDefault + is + WitOracleRadonRegistryBaseUpgradable +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRadonRegistryUpgradableDefault).name; + } + + constructor( + bytes32 _versionTag, + bool _upgradable + ) + WitOracleRadonRegistryBaseUpgradable( + _versionTag, + _upgradable + ) + {} +} diff --git a/contracts/core/upgradable/WitOracleRadonRegistryUpgradableNoSha256.sol b/contracts/core/upgradable/WitOracleRadonRegistryUpgradableNoSha256.sol new file mode 100644 index 00000000..a6867bc7 --- /dev/null +++ b/contracts/core/upgradable/WitOracleRadonRegistryUpgradableNoSha256.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleRadonRegistryBaseUpgradable.sol"; + +contract WitOracleRadonRegistryUpgradableNoSha256 + is + WitOracleRadonRegistryBaseUpgradable +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRadonRegistryUpgradableNoSha256).name; + } + + function _witOracleHash(bytes memory chunk) virtual override internal pure returns (bytes32) { + return keccak256(chunk); + } + + constructor( + bytes32 _versionTag, + bool _upgradable + ) + WitOracleRadonRegistryBaseUpgradable( + _versionTag, + _upgradable + ) + {} +} diff --git a/contracts/core/upgradable/WitOracleRequestFactoryUpgradableConfluxCore.sol b/contracts/core/upgradable/WitOracleRequestFactoryUpgradableConfluxCore.sol new file mode 100644 index 00000000..5d34804a --- /dev/null +++ b/contracts/core/upgradable/WitOracleRequestFactoryUpgradableConfluxCore.sol @@ -0,0 +1,41 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +pragma solidity >=0.8.0 <0.9.0; + +import "./WitOracleRequestFactoryUpgradableDefault.sol"; + +contract WitOracleRequestFactoryUpgradableConfluxCore + is + WitOracleRequestFactoryUpgradableDefault +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRequestFactoryUpgradableConfluxCore).name; + } + + constructor( + WitOracle _witOracle, + bytes32 _versionTag, + bool _upgradable + ) + WitOracleRequestFactoryUpgradableDefault( + _witOracle, + _versionTag, + _upgradable + ) + {} + + function _cloneDeterministic(bytes32 _salt) + override internal + returns (address _instance) + { + bytes memory ptr = _cloneBytecodePtr(); + assembly { + // CREATE2 new instance: + _instance := create2(0, ptr, 0x37, _salt) + } + emit Cloned(msg.sender, self(), _instance); + } +} diff --git a/contracts/core/upgradable/WitOracleRequestFactoryUpgradableDefault.sol b/contracts/core/upgradable/WitOracleRequestFactoryUpgradableDefault.sol new file mode 100644 index 00000000..9a7ef6c1 --- /dev/null +++ b/contracts/core/upgradable/WitOracleRequestFactoryUpgradableDefault.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +pragma solidity >=0.8.0 <0.9.0; + +import "../base/WitOracleRequestFactoryBaseUpgradable.sol"; + +contract WitOracleRequestFactoryUpgradableDefault + is + WitOracleRequestFactoryBaseUpgradable +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleRequestFactoryUpgradableDefault).name; + } + + constructor( + WitOracle _witOracle, + bytes32 _versionTag, + bool _upgradable + ) + WitOracleRequestFactoryBase(_witOracle) + WitOracleRequestFactoryBaseUpgradable( + _versionTag, + _upgradable + ) + {} +} diff --git a/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol b/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol new file mode 100644 index 00000000..3f9e70e7 --- /dev/null +++ b/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../base/WitOracleBaseUpgradable.sol"; + +/// @title Witnet Request Board "trustless" implementation contract for regular EVM-compatible chains. +/// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. +/// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. +/// The result of the requests will be posted back to this contract by the bridge nodes too. +/// @author The Witnet Foundation +abstract contract WitOracleTrustlessUpgradableDefault + is + WitOracleBaseUpgradable +{ + function class() virtual override public view returns (string memory) { + return type(WitOracleTrustlessUpgradableDefault).name; + } + + constructor( + EvmImmutables memory _immutables, + uint256 _queryAwaitingBlocks, + uint256 _queryReportingStake, + WitOracleRadonRegistry _registry, + // WitOracleRequestFactory _factory, + bytes32 _versionTag, + bool _upgradable + ) + WitOracleBase( + _immutables, + _registry + // _factory + ) + WitOracleBaseTrustless( + _queryAwaitingBlocks, + _queryReportingStake + ) + WitOracleBaseUpgradable( + _versionTag, + _upgradable + ) + {} +} diff --git a/contracts/data/WitOracleDataLib.sol b/contracts/data/WitOracleDataLib.sol index 16d92cc0..0b522351 100644 --- a/contracts/data/WitOracleDataLib.sol +++ b/contracts/data/WitOracleDataLib.sol @@ -175,11 +175,15 @@ library WitOracleDataLib { ) { Witnet.Query storage __query = seekQuery(queryId); - Witnet.QueryStatus _queryStatus = getQueryStatus(queryId); + require( + msg.sender == __query.request.requester, + "not the requester" + ); _queryEvmExpiredReward = __query.request.evmReward; __query.request.evmReward = 0; + Witnet.QueryStatus _queryStatus = getQueryStatus(queryId); if ( _queryStatus != Witnet.QueryStatus.Expired && _queryStatus != Witnet.QueryStatus.Finalized @@ -202,11 +206,15 @@ library WitOracleDataLib { public returns (Witnet.QueryResponse memory _queryResponse) { Witnet.Query storage __query = seekQuery(queryId); - Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly(queryId, evmQueryAwaitingBlocks); - + require( + msg.sender == __query.request.requester, + "not the requester" + ); + uint72 _evmReward = __query.request.evmReward; __query.request.evmReward = 0; - + + Witnet.QueryStatus _queryStatus = getQueryStatusTrustlessly(queryId, evmQueryAwaitingBlocks); if (_queryStatus == Witnet.QueryStatus.Expired) { if (_evmReward > 0) { if (__query.response.disputer != address(0)) { @@ -702,7 +710,16 @@ library WitOracleDataLib { ) public returns (uint256 evmPotentialReward) { - stake(msg.sender, evmQueryReportingStake); + require( + getQueryStatusTrustlessly( + queryId, + evmQueryAwaitingBlocks + ) == Witnet.QueryStatus.Reported, "not in Reported status" + ); + stake( + msg.sender, + evmQueryReportingStake + ); Witnet.Query storage __query = seekQuery(queryId); __query.response.disputer = msg.sender; __query.response.finality = uint64(block.number + evmQueryAwaitingBlocks); diff --git a/contracts/interfaces/IWitAppliance.sol b/contracts/interfaces/IWitAppliance.sol index 813722e8..94858c40 100644 --- a/contracts/interfaces/IWitAppliance.sol +++ b/contracts/interfaces/IWitAppliance.sol @@ -1,12 +1,28 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -interface IWitAppliance { +abstract contract IWitAppliance { /// @notice Returns the name of the actual contract implementing the logic of this Witnet appliance. - function class() external view returns (string memory); + function class() virtual public view returns (string memory); /// @notice Returns the ERC-165 id of the minimal functionality expected for this appliance. - function specs() external view returns (bytes4); + function specs() virtual external view returns (bytes4); + + function _require(bool _condition, string memory _message) virtual internal view { + if (!_condition) { + _revert(_message); + } + } + + function _revert(string memory _message) virtual internal view { + revert( + string(abi.encodePacked( + class(), + ": ", + _message + )) + ); + } } diff --git a/contracts/interfaces/IWitOracle.sol b/contracts/interfaces/IWitOracle.sol index 895d2306..f1f55030 100644 --- a/contracts/interfaces/IWitOracle.sol +++ b/contracts/interfaces/IWitOracle.sol @@ -29,9 +29,9 @@ interface IWitOracle { /// @param querySLA The query SLA data security parameters as required for the Wit/oracle blockchain. function estimateExtraFee(uint256 evmGasPrice, uint256 evmWitPrice, Witnet.RadonSLA calldata querySLA) external view returns (uint256); - /// @notice Returns the address of the WitOracleRequestFactory appliance capable of building compliant data request - /// @notice templates verified into the same WitOracleRadonRegistry instance returned by registry(). - function factory() external view returns (WitOracleRequestFactory); + // /// @notice Returns the address of the WitOracleRequestFactory appliance capable of building compliant data request + // /// @notice templates verified into the same WitOracleRadonRegistry instance returned by registry(). + // function factory() external view returns (WitOracleRequestFactory); /// @notice Retrieves a copy of all Witnet-provable data related to a previously posted request, /// removing the whole query from the WRB storage. From 7554f00968445c6056f5d6972062b298262bb848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 08:54:48 +0200 Subject: [PATCH 10/24] feat(libs): into mem array helper methods --- contracts/apps/WitRandomnessV21.sol | 52 ++++--------------- contracts/libs/Witnet.sol | 33 +++++++++++- .../mockups/WitOracleRandomnessConsumer.sol | 21 ++++---- 3 files changed, 50 insertions(+), 56 deletions(-) diff --git a/contracts/apps/WitRandomnessV21.sol b/contracts/apps/WitRandomnessV21.sol index 2a524c7e..6592d25e 100644 --- a/contracts/apps/WitRandomnessV21.sol +++ b/contracts/apps/WitRandomnessV21.sol @@ -42,25 +42,18 @@ contract WitRandomnessV21 Ownable(_operator) UsingWitOracle(_witOracle) { - _require( - address(_witOracle) == address(0) - || _witOracle.specs() == type(WitOracle).interfaceId, - "uncompliant oracle" - ); // Build Witnet-compliant randomness request: WitOracleRadonRegistry _registry = witOracle().registry(); witOracleQueryRadHash = _registry.verifyRadonRequest( - abi.decode( - abi.encode([ - _registry.verifyRadonRetrieval( - Witnet.RadonRetrievalMethods.RNG, - "", // no request url - "", // no request body - new string[2][](0), // no request headers - hex"80" // no request Radon script - ) - ]), (bytes32[]) - ), + Witnet.intoMemArray([ + _registry.verifyRadonRetrieval( + Witnet.RadonRetrievalMethods.RNG, + "", // no request url + "", // no request body + new string[2][](0), // no request headers + hex"80" // no request Radon script + ) + ]), Witnet.RadonReducer({ opcode: Witnet.RadonReduceOpcodes.Mode, filters: new Witnet.RadonFilter[](0) @@ -91,10 +84,6 @@ contract WitRandomnessV21 return type(WitRandomnessV21).name; } - function specs() virtual override external pure returns (bytes4) { - return type(WitRandomness).interfaceId; - } - function witOracle() override (IWitOracleAppliance, UsingWitOracle) public view returns (WitOracle) { @@ -502,29 +491,6 @@ contract WitRandomnessV21 emit Randomizing(tx.origin, _msgSender(), _queryId); } - function _require( - bool _condition, - string memory _message - ) - internal pure - { - if (!_condition) { - _revert(_message); - } - } - - function _revert(string memory _message) - internal pure - { - revert( - string(abi.encodePacked( - class(), - ": ", - _message - )) - ); - } - /// @dev Recursively searches for the number of the first block after the given one in which a Witnet /// @dev randomness request was posted. Returns 0 if none found. function _searchNextBlock(uint256 _target, uint256 _latest) internal view returns (uint256) { diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index ab900da2..34d6caf2 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -373,7 +373,6 @@ library Witnet { /* 0x0A */ Reserved0x10, //MaximumDeviation, /* 0x0B */ ConcatenateAndHash } - /// Structure containing the Retrieve-Attestation-Delivery parts of a Witnet-compliant Data Request. struct RadonRequest { @@ -798,6 +797,38 @@ library Witnet { return toFixedBytes(_value, 32); } + function intoMemArray(bytes32[1] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 1, _values), (bytes32[])); + } + + function intoMemArray(bytes32[2] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 2, _values), (bytes32[])); + } + + function intoMemArray(bytes32[3] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 3, _values), (bytes32[])); + } + + function intoMemArray(bytes32[4] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 4, _values), (bytes32[])); + } + + function intoMemArray(bytes32[5] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 5, _values), (bytes32[])); + } + + function intoMemArray(bytes32[6] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 6, _values), (bytes32[])); + } + + function intoMemArray(bytes32[7] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 7, _values), (bytes32[])); + } + + function intoMemArray(bytes32[8] memory _values) internal pure returns (bytes32[] memory) { + return abi.decode(abi.encode(uint256(32), 8, _values), (bytes32[])); + } + function toFixedBytes(bytes memory _value, uint8 _numBytes) internal pure returns (bytes32 _bytes32) diff --git a/contracts/mockups/WitOracleRandomnessConsumer.sol b/contracts/mockups/WitOracleRandomnessConsumer.sol index fee5d1b8..0e655780 100644 --- a/contracts/mockups/WitOracleRandomnessConsumer.sol +++ b/contracts/mockups/WitOracleRandomnessConsumer.sol @@ -33,17 +33,15 @@ abstract contract WitOracleRandomnessConsumer WitOracleRadonRegistry _registry = witOracle().registry(); // Build own Witnet Randomness Request: __witOracleRandomnessRadHash = _registry.verifyRadonRequest( - abi.decode( - abi.encode([ - _registry.verifyRadonRetrieval( - Witnet.RadonRetrievalMethods.RNG, - "", // no url - "", // no body - new string[2][](0), // no headers - hex"80" // no retrieval script - ) - ]), (bytes32[]) - ), + Witnet.intoMemArray([ + _registry.verifyRadonRetrieval( + Witnet.RadonRetrievalMethods.RNG, + "", // no url + "", // no body + new string[2][](0), // no headers + hex"80" // no retrieval script + ) + ]), Witnet.RadonReducer({ opcode: Witnet.RadonReduceOpcodes.Mode, filters: new Witnet.RadonFilter[](0) @@ -56,7 +54,6 @@ abstract contract WitOracleRandomnessConsumer } __witOracleBaseFeeOverheadPercentage = _baseFeeOverheadPercentage; __witOracleDefaultQuerySLA.maxTallyResultSize = 34; - } /// @dev Pure P-RNG generator returning uniformly distributed `_range` values based on From 5ed07c62148beccea946b6c84de5d9f025a7095a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 08:55:56 +0200 Subject: [PATCH 11/24] fix(wsb): way specs() is calculated --- contracts/WitOracle.sol | 9 ++++++++- contracts/WitOracleRadonRegistry.sol | 9 ++++++++- contracts/WitPriceFeeds.sol | 9 +++++++++ contracts/WitRandomness.sol | 9 ++++++++- contracts/mockups/UsingWitOracle.sol | 6 ++++-- contracts/mockups/UsingWitPriceFeeds.sol | 5 ++++- contracts/mockups/UsingWitRandomness.sol | 5 ++++- 7 files changed, 45 insertions(+), 7 deletions(-) diff --git a/contracts/WitOracle.sol b/contracts/WitOracle.sol index 0ffef52e..6b5f64b5 100644 --- a/contracts/WitOracle.sol +++ b/contracts/WitOracle.sol @@ -16,4 +16,11 @@ abstract contract WitOracle IWitAppliance, IWitOracle, IWitOracleEvents -{} +{ + function specs() virtual override external pure returns (bytes4) { + return ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ); + } +} diff --git a/contracts/WitOracleRadonRegistry.sol b/contracts/WitOracleRadonRegistry.sol index f928082a..b5eb41e3 100644 --- a/contracts/WitOracleRadonRegistry.sol +++ b/contracts/WitOracleRadonRegistry.sol @@ -12,4 +12,11 @@ abstract contract WitOracleRadonRegistry IWitAppliance, IWitOracleRadonRegistry, IWitOracleRadonRegistryEvents -{} +{ + function specs() virtual override external pure returns (bytes4) { + return ( + type(IWitAppliance).interfaceId + ^ type(IWitOracleRadonRegistry).interfaceId + ); + } +} diff --git a/contracts/WitPriceFeeds.sol b/contracts/WitPriceFeeds.sol index 94c4908e..a4796d9a 100644 --- a/contracts/WitPriceFeeds.sol +++ b/contracts/WitPriceFeeds.sol @@ -18,4 +18,13 @@ abstract contract WitPriceFeeds "Price-" ) {} + + function specs() virtual override external pure returns (bytes4) { + return ( + type(IWitOracleAppliance).interfaceId + ^ type(IERC2362).interfaceId + ^ type(IWitFeeds).interfaceId + ^ type(IWitPriceFeeds).interfaceId + ); + } } diff --git a/contracts/WitRandomness.sol b/contracts/WitRandomness.sol index 25502574..4c34163d 100644 --- a/contracts/WitRandomness.sol +++ b/contracts/WitRandomness.sol @@ -13,4 +13,11 @@ abstract contract WitRandomness IWitOracleEvents, IWitRandomness, IWitRandomnessEvents -{} +{ + function specs() virtual override external pure returns (bytes4) { + return ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitRandomness).interfaceId + ); + } +} diff --git a/contracts/mockups/UsingWitOracle.sol b/contracts/mockups/UsingWitOracle.sol index 6cc3dea5..7690799c 100644 --- a/contracts/mockups/UsingWitOracle.sol +++ b/contracts/mockups/UsingWitOracle.sol @@ -42,8 +42,10 @@ abstract contract UsingWitOracle /// @param _witOracle Address of the WitOracle bridging contract. constructor(WitOracle _witOracle) { require( - _witOracle.specs() == type(WitOracle).interfaceId, - "UsingWitOracle: uncompliant WitOracle" + _witOracle.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ), "UsingWitOracle: uncompliant WitOracle" ); __witOracle = _witOracle; __witOracleDefaultQuerySLA = Witnet.RadonSLA({ diff --git a/contracts/mockups/UsingWitPriceFeeds.sol b/contracts/mockups/UsingWitPriceFeeds.sol index 5fbc438c..d8c6b0ae 100644 --- a/contracts/mockups/UsingWitPriceFeeds.sol +++ b/contracts/mockups/UsingWitPriceFeeds.sol @@ -18,7 +18,10 @@ abstract contract UsingWitPriceFeeds constructor(WitPriceFeeds _witPriceFeeds) { require( address(_witPriceFeeds).code.length > 0 - && _witPriceFeeds.specs() == type(WitPriceFeeds).interfaceId, + && _witPriceFeeds.specs() == ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitPriceFeeds).interfaceId + ), "UsingWitPriceFeeds: uncompliant WitPriceFeeds appliance" ); witPriceFeeds = _witPriceFeeds; diff --git a/contracts/mockups/UsingWitRandomness.sol b/contracts/mockups/UsingWitRandomness.sol index 11e98fc5..fede0b78 100644 --- a/contracts/mockups/UsingWitRandomness.sol +++ b/contracts/mockups/UsingWitRandomness.sol @@ -18,7 +18,10 @@ abstract contract UsingWitRandomness constructor(WitRandomness _witRandomness) { require( address(_witRandomness).code.length > 0 - && _witRandomness.specs() == type(WitRandomness).interfaceId, + && _witRandomness.specs() == ( + type(IWitOracleAppliance).interfaceId + ^ type(IWitRandomness).interfaceId + ), "UsingWitRandomness: uncompliant WitRandomness appliance" ); witRandomness = _witRandomness; From 92859b4284132761e7572953f586f36334dac8a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 08:56:32 +0200 Subject: [PATCH 12/24] refactor: appss/WitnetPriceFeedsV21 -> apps/WitnetPriceFeedsUpgradable --- ...FeedsV21.sol => WitPriceFeedsUpgradable.sol} | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) rename contracts/apps/{WitPriceFeedsV21.sol => WitPriceFeedsUpgradable.sol} (98%) diff --git a/contracts/apps/WitPriceFeedsV21.sol b/contracts/apps/WitPriceFeedsUpgradable.sol similarity index 98% rename from contracts/apps/WitPriceFeedsV21.sol rename to contracts/apps/WitPriceFeedsUpgradable.sol index 30ed3bf4..285b72d6 100644 --- a/contracts/apps/WitPriceFeedsV21.sol +++ b/contracts/apps/WitPriceFeedsUpgradable.sol @@ -16,7 +16,7 @@ import "../patterns/Ownable2Step.sol"; /// @title WitPriceFeeds: Price Feeds live repository reliant on the Witnet Oracle blockchain. /// @author Guillermo Díaz -contract WitPriceFeedsV21 +contract WitPriceFeedsUpgradable is Ownable2Step, WitPriceFeeds, @@ -31,11 +31,10 @@ contract WitPriceFeedsV21 using Witnet for Witnet.RadonSLA; using Witnet for Witnet.Result; - function class() virtual override(IWitAppliance, WitnetUpgradableBase) public view returns (string memory) { - return type(WitPriceFeedsV21).name; + function class() virtual override public view returns (string memory) { + return type(WitPriceFeedsUpgradable).name; } - bytes4 immutable public override specs = type(WitPriceFeeds).interfaceId; WitOracle immutable public override witOracle; WitOracleRadonRegistry immutable internal __registry; @@ -44,8 +43,8 @@ contract WitPriceFeedsV21 constructor( WitOracle _witOracle, - bool _upgradable, - bytes32 _versionTag + bytes32 _versionTag, + bool _upgradable ) Ownable(address(msg.sender)) WitnetUpgradableBase( @@ -131,8 +130,10 @@ contract WitPriceFeedsV21 "inexistent oracle" ); _require( - witOracle.specs() == type(WitOracle).interfaceId, - "uncompliant oracle" + witOracle.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ), "uncompliant oracle" ); emit Upgraded(_owner, base(), codehash(), version()); } From 9ece9907ef7acc7612a4ed3f8095faf3373bb371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 08:56:52 +0200 Subject: [PATCH 13/24] refactor: WitnetDeployerCfxCore -> WitnetDeployerConfluxCore --- ...netDeployerCfxCore.sol => WitnetDeployerConfluxCore.sol} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename contracts/core/{WitnetDeployerCfxCore.sol => WitnetDeployerConfluxCore.sol} (90%) diff --git a/contracts/core/WitnetDeployerCfxCore.sol b/contracts/core/WitnetDeployerConfluxCore.sol similarity index 90% rename from contracts/core/WitnetDeployerCfxCore.sol rename to contracts/core/WitnetDeployerConfluxCore.sol index b29583b6..5c7fb4d1 100644 --- a/contracts/core/WitnetDeployerCfxCore.sol +++ b/contracts/core/WitnetDeployerConfluxCore.sol @@ -4,11 +4,11 @@ pragma solidity >=0.8.0 <0.9.0; import "./WitnetDeployer.sol"; -/// @notice WitnetDeployerCfxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, +/// @notice WitnetDeployerConfluxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, /// @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem. /// @author Guillermo Díaz -contract WitnetDeployerCfxCore is WitnetDeployer { +contract WitnetDeployerConfluxCore is WitnetDeployer { /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`. /// @param _initCode Creation code, including construction logic and input parameters. @@ -61,7 +61,7 @@ contract WitnetDeployerCfxCore is WitnetDeployer { ); return WitnetProxy(payable(_proxyAddr)); } else { - revert("WitnetDeployerCfxCore: already proxified"); + revert("WitnetDeployerConfluxCore: already proxified"); } } From e73a905e2b6d54c1b07c9fc36d90b7e6d7c80dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 08:58:06 +0200 Subject: [PATCH 14/24] feat(migrations): defrost WitnetDeployer + WitnetProxy artifacs --- migrations/frosts/WitnetDeployer.json | 8329 ++++++++++++++ .../frosts/WitnetDeployerConfluxCore.json | 6485 +++++++++++ migrations/frosts/WitnetDeployerMeter.json | 5755 ++++++++++ migrations/frosts/WitnetProxy.json | 9535 +++++++++++++++++ migrations/scripts/1_base.js | 59 + migrations/scripts/1_deployer.js | 51 - 6 files changed, 30163 insertions(+), 51 deletions(-) create mode 100644 migrations/frosts/WitnetDeployer.json create mode 100644 migrations/frosts/WitnetDeployerConfluxCore.json create mode 100644 migrations/frosts/WitnetDeployerMeter.json create mode 100644 migrations/frosts/WitnetProxy.json create mode 100644 migrations/scripts/1_base.js delete mode 100644 migrations/scripts/1_deployer.js diff --git a/migrations/frosts/WitnetDeployer.json b/migrations/frosts/WitnetDeployer.json new file mode 100644 index 00000000..ac9d4b83 --- /dev/null +++ b/migrations/frosts/WitnetDeployer.json @@ -0,0 +1,8329 @@ +{ + "contractName": "WitnetDeployer", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "_deployed", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineProxyAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proxySalt", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_firstImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "proxify", + "outputs": [ + { + "internalType": "contract WitnetProxy", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz \",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployer contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, and CREATE3 (EIP-3171) factory for Witnet proxies.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetDeployer.sol\":\"WitnetDeployer\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetDeployer.sol\":{\"keccak256\":\"0x00866ae27649212bdb7aacfc69d3302325ff82c1302993c1043e6f6ad2b507bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62fbada06d1352d79663f0c4ec26598e60e8a6b8b1015ff821b38d4f76580533\",\"dweb:/ipfs/QmYhDCsKjUPbKJLABxSUNQHsZKwPEVr41GGXV7MpThWvcL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/libs/Create3.sol\":{\"keccak256\":\"0xfbda4c773f859bef9d7878ca9412f244da85f7bd49df07c49a17544f4708d718\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://0f83b72ad1c35c707cc6daa4e8266d9d711f561a188fbb0be1885d3f08146ca6\",\"dweb:/ipfs/QmPJwdieqkxoSvqmczAtRMfb5EN8uWiabqMKj4yVqsUncv\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}", + "bytecode": "0x6080604052348015600f57600080fd5b506111df8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f36600461059b565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e366004610657565b6100ca565b6100646100a136600461069c565b61015b565b6100646100b4366004610657565b61029b565b60006100c4826102f7565b92915050565b60006100d6838361029b565b9050806001600160a01b03163b6000036100c457818351602085016000f590506001600160a01b0381166100c45760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b600080610167856100b9565b9050806001600160a01b03163b600003610242576101a7856040518060200161018f9061058e565b601f1982820381018352601f909101166040526103ca565b50806001600160a01b0316636fbc15e98533866040516020016101cb929190610725565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016101f7929190610725565b6020604051808303816000875af1158015610216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023a9190610767565b509050610294565b60405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a20616c72656164792070726f78696669656044820152601960fa1b6064820152608401610152565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015281516001600160f81b03198183015230606090811b6bffffffffffffffffffffffff19908116602184015260358301959095527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f605580840191909152845180840390910181526075830185528051908401206135a560f21b6095840152901b9093166097840152600160f81b60ab8401528151608c81850301815260ac909301909152815191012090565b600061029483836000806103dd846102f7565b90506001600160a01b0381163b156104375760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a2074617267657420616c72656164792065786973747300006044820152606401610152565b6040805180820190915260108082526f67363d3d37363d34f03d5260086018f360801b6020830190815260009291879184f591506001600160a01b0382166104c15760405162461bcd60e51b815260206004820152601f60248201527f437265617465333a206572726f72206372656174696e6720666163746f7279006044820152606401610152565b6000826001600160a01b031685876040516104dc9190610789565b60006040518083038185875af1925050503d8060008114610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b5050905080801561053857506001600160a01b0384163b15155b6105845760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a206572726f72206372656174696e672074617267657400006044820152606401610152565b5050509392505050565b610a04806107a683390190565b6000602082840312156105ad57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126105db57600080fd5b813567ffffffffffffffff808211156105f6576105f66105b4565b604051601f8301601f19908116603f0116810190828211818310171561061e5761061e6105b4565b8160405283815286602085880101111561063757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561066a57600080fd5b823567ffffffffffffffff81111561068157600080fd5b61068d858286016105ca565b95602094909401359450505050565b6000806000606084860312156106b157600080fd5b8335925060208401356001600160a01b03811681146106cf57600080fd5b9150604084013567ffffffffffffffff8111156106eb57600080fd5b6106f7868287016105ca565b9150509250925092565b60005b8381101561071c578181015183820152602001610704565b50506000910152565b60018060a01b03831681526040602082015260008251806040840152610752816060850160208701610701565b601f01601f1916919091016060019392505050565b60006020828403121561077957600080fd5b8151801515811461029457600080fd5b6000825161079b818460208701610701565b919091019291505056fe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a2646970667358221220c25a2780a8ba38f33425ed136eb8d9b9a006afab4a18bf7dc2f7ee7a6665d2b364736f6c63430008190033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f36600461059b565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e366004610657565b6100ca565b6100646100a136600461069c565b61015b565b6100646100b4366004610657565b61029b565b60006100c4826102f7565b92915050565b60006100d6838361029b565b9050806001600160a01b03163b6000036100c457818351602085016000f590506001600160a01b0381166100c45760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b600080610167856100b9565b9050806001600160a01b03163b600003610242576101a7856040518060200161018f9061058e565b601f1982820381018352601f909101166040526103ca565b50806001600160a01b0316636fbc15e98533866040516020016101cb929190610725565b6040516020818303038152906040526040518363ffffffff1660e01b81526004016101f7929190610725565b6020604051808303816000875af1158015610216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061023a9190610767565b509050610294565b60405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a20616c72656164792070726f78696669656044820152601960fa1b6064820152608401610152565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b604080518082018252601081526f67363d3d37363d34f03d5260086018f360801b60209182015281516001600160f81b03198183015230606090811b6bffffffffffffffffffffffff19908116602184015260358301959095527f21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f605580840191909152845180840390910181526075830185528051908401206135a560f21b6095840152901b9093166097840152600160f81b60ab8401528151608c81850301815260ac909301909152815191012090565b600061029483836000806103dd846102f7565b90506001600160a01b0381163b156104375760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a2074617267657420616c72656164792065786973747300006044820152606401610152565b6040805180820190915260108082526f67363d3d37363d34f03d5260086018f360801b6020830190815260009291879184f591506001600160a01b0382166104c15760405162461bcd60e51b815260206004820152601f60248201527f437265617465333a206572726f72206372656174696e6720666163746f7279006044820152606401610152565b6000826001600160a01b031685876040516104dc9190610789565b60006040518083038185875af1925050503d8060008114610519576040519150601f19603f3d011682016040523d82523d6000602084013e61051e565b606091505b5050905080801561053857506001600160a01b0384163b15155b6105845760405162461bcd60e51b815260206004820152601e60248201527f437265617465333a206572726f72206372656174696e672074617267657400006044820152606401610152565b5050509392505050565b610a04806107a683390190565b6000602082840312156105ad57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126105db57600080fd5b813567ffffffffffffffff808211156105f6576105f66105b4565b604051601f8301601f19908116603f0116810190828211818310171561061e5761061e6105b4565b8160405283815286602085880101111561063757600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561066a57600080fd5b823567ffffffffffffffff81111561068157600080fd5b61068d858286016105ca565b95602094909401359450505050565b6000806000606084860312156106b157600080fd5b8335925060208401356001600160a01b03811681146106cf57600080fd5b9150604084013567ffffffffffffffff8111156106eb57600080fd5b6106f7868287016105ca565b9150509250925092565b60005b8381101561071c578181015183820152602001610704565b50506000910152565b60018060a01b03831681526040602082015260008251806040840152610752816060850160208701610701565b601f01601f1916919091016060019392505050565b60006020828403121561077957600080fd5b8151801515811461029457600080fd5b6000825161079b818460208701610701565b919091019291505056fe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a2646970667358221220c25a2780a8ba38f33425ed136eb8d9b9a006afab4a18bf7dc2f7ee7a6665d2b364736f6c63430008190033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nativeSrc": "0:7139:103", + "nodeType": "YulBlock", + "src": "0:7139:103", + "statements": [ + { + "nativeSrc": "6:3:103", + "nodeType": "YulBlock", + "src": "6:3:103", + "statements": [] + }, + { + "body": { + "nativeSrc": "84:110:103", + "nodeType": "YulBlock", + "src": "84:110:103", + "statements": [ + { + "body": { + "nativeSrc": "130:16:103", + "nodeType": "YulBlock", + "src": "130:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "139:1:103", + "nodeType": "YulLiteral", + "src": "139:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "142:1:103", + "nodeType": "YulLiteral", + "src": "142:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "132:6:103", + "nodeType": "YulIdentifier", + "src": "132:6:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulFunctionCall", + "src": "132:12:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulExpressionStatement", + "src": "132:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "105:7:103", + "nodeType": "YulIdentifier", + "src": "105:7:103" + }, + { + "name": "headStart", + "nativeSrc": "114:9:103", + "nodeType": "YulIdentifier", + "src": "114:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "101:3:103", + "nodeType": "YulIdentifier", + "src": "101:3:103" + }, + "nativeSrc": "101:23:103", + "nodeType": "YulFunctionCall", + "src": "101:23:103" + }, + { + "kind": "number", + "nativeSrc": "126:2:103", + "nodeType": "YulLiteral", + "src": "126:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "97:3:103", + "nodeType": "YulIdentifier", + "src": "97:3:103" + }, + "nativeSrc": "97:32:103", + "nodeType": "YulFunctionCall", + "src": "97:32:103" + }, + "nativeSrc": "94:52:103", + "nodeType": "YulIf", + "src": "94:52:103" + }, + { + "nativeSrc": "155:33:103", + "nodeType": "YulAssignment", + "src": "155:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "178:9:103", + "nodeType": "YulIdentifier", + "src": "178:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "165:12:103", + "nodeType": "YulIdentifier", + "src": "165:12:103" + }, + "nativeSrc": "165:23:103", + "nodeType": "YulFunctionCall", + "src": "165:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "155:6:103", + "nodeType": "YulIdentifier", + "src": "155:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32", + "nativeSrc": "14:180:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "50:9:103", + "nodeType": "YulTypedName", + "src": "50:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "61:7:103", + "nodeType": "YulTypedName", + "src": "61:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "73:6:103", + "nodeType": "YulTypedName", + "src": "73:6:103", + "type": "" + } + ], + "src": "14:180:103" + }, + { + "body": { + "nativeSrc": "300:102:103", + "nodeType": "YulBlock", + "src": "300:102:103", + "statements": [ + { + "nativeSrc": "310:26:103", + "nodeType": "YulAssignment", + "src": "310:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "322:9:103", + "nodeType": "YulIdentifier", + "src": "322:9:103" + }, + { + "kind": "number", + "nativeSrc": "333:2:103", + "nodeType": "YulLiteral", + "src": "333:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "318:3:103", + "nodeType": "YulIdentifier", + "src": "318:3:103" + }, + "nativeSrc": "318:18:103", + "nodeType": "YulFunctionCall", + "src": "318:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "310:4:103", + "nodeType": "YulIdentifier", + "src": "310:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "352:9:103", + "nodeType": "YulIdentifier", + "src": "352:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "367:6:103", + "nodeType": "YulIdentifier", + "src": "367:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "383:3:103", + "nodeType": "YulLiteral", + "src": "383:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "388:1:103", + "nodeType": "YulLiteral", + "src": "388:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "379:3:103", + "nodeType": "YulIdentifier", + "src": "379:3:103" + }, + "nativeSrc": "379:11:103", + "nodeType": "YulFunctionCall", + "src": "379:11:103" + }, + { + "kind": "number", + "nativeSrc": "392:1:103", + "nodeType": "YulLiteral", + "src": "392:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "375:3:103", + "nodeType": "YulIdentifier", + "src": "375:3:103" + }, + "nativeSrc": "375:19:103", + "nodeType": "YulFunctionCall", + "src": "375:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "363:3:103", + "nodeType": "YulIdentifier", + "src": "363:3:103" + }, + "nativeSrc": "363:32:103", + "nodeType": "YulFunctionCall", + "src": "363:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "345:6:103", + "nodeType": "YulIdentifier", + "src": "345:6:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulFunctionCall", + "src": "345:51:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulExpressionStatement", + "src": "345:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "199:203:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "269:9:103", + "nodeType": "YulTypedName", + "src": "269:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "280:6:103", + "nodeType": "YulTypedName", + "src": "280:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "291:4:103", + "nodeType": "YulTypedName", + "src": "291:4:103", + "type": "" + } + ], + "src": "199:203:103" + }, + { + "body": { + "nativeSrc": "439:95:103", + "nodeType": "YulBlock", + "src": "439:95:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "456:1:103", + "nodeType": "YulLiteral", + "src": "456:1:103", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "463:3:103", + "nodeType": "YulLiteral", + "src": "463:3:103", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "468:10:103", + "nodeType": "YulLiteral", + "src": "468:10:103", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "459:3:103", + "nodeType": "YulIdentifier", + "src": "459:3:103" + }, + "nativeSrc": "459:20:103", + "nodeType": "YulFunctionCall", + "src": "459:20:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "449:6:103", + "nodeType": "YulIdentifier", + "src": "449:6:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulFunctionCall", + "src": "449:31:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulExpressionStatement", + "src": "449:31:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "496:1:103", + "nodeType": "YulLiteral", + "src": "496:1:103", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "499:4:103", + "nodeType": "YulLiteral", + "src": "499:4:103", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "489:6:103", + "nodeType": "YulIdentifier", + "src": "489:6:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulFunctionCall", + "src": "489:15:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulExpressionStatement", + "src": "489:15:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "520:1:103", + "nodeType": "YulLiteral", + "src": "520:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "523:4:103", + "nodeType": "YulLiteral", + "src": "523:4:103", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "513:6:103", + "nodeType": "YulIdentifier", + "src": "513:6:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulFunctionCall", + "src": "513:15:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulExpressionStatement", + "src": "513:15:103" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "407:127:103", + "nodeType": "YulFunctionDefinition", + "src": "407:127:103" + }, + { + "body": { + "nativeSrc": "591:666:103", + "nodeType": "YulBlock", + "src": "591:666:103", + "statements": [ + { + "body": { + "nativeSrc": "640:16:103", + "nodeType": "YulBlock", + "src": "640:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "649:1:103", + "nodeType": "YulLiteral", + "src": "649:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "652:1:103", + "nodeType": "YulLiteral", + "src": "652:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "642:6:103", + "nodeType": "YulIdentifier", + "src": "642:6:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulFunctionCall", + "src": "642:12:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulExpressionStatement", + "src": "642:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "619:6:103", + "nodeType": "YulIdentifier", + "src": "619:6:103" + }, + { + "kind": "number", + "nativeSrc": "627:4:103", + "nodeType": "YulLiteral", + "src": "627:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "615:3:103", + "nodeType": "YulIdentifier", + "src": "615:3:103" + }, + "nativeSrc": "615:17:103", + "nodeType": "YulFunctionCall", + "src": "615:17:103" + }, + { + "name": "end", + "nativeSrc": "634:3:103", + "nodeType": "YulIdentifier", + "src": "634:3:103" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "611:3:103", + "nodeType": "YulIdentifier", + "src": "611:3:103" + }, + "nativeSrc": "611:27:103", + "nodeType": "YulFunctionCall", + "src": "611:27:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "604:6:103", + "nodeType": "YulIdentifier", + "src": "604:6:103" + }, + "nativeSrc": "604:35:103", + "nodeType": "YulFunctionCall", + "src": "604:35:103" + }, + "nativeSrc": "601:55:103", + "nodeType": "YulIf", + "src": "601:55:103" + }, + { + "nativeSrc": "665:30:103", + "nodeType": "YulVariableDeclaration", + "src": "665:30:103", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "688:6:103", + "nodeType": "YulIdentifier", + "src": "688:6:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "675:12:103", + "nodeType": "YulIdentifier", + "src": "675:12:103" + }, + "nativeSrc": "675:20:103", + "nodeType": "YulFunctionCall", + "src": "675:20:103" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "669:2:103", + "nodeType": "YulTypedName", + "src": "669:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "704:28:103", + "nodeType": "YulVariableDeclaration", + "src": "704:28:103", + "value": { + "kind": "number", + "nativeSrc": "714:18:103", + "nodeType": "YulLiteral", + "src": "714:18:103", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "708:2:103", + "nodeType": "YulTypedName", + "src": "708:2:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "755:22:103", + "nodeType": "YulBlock", + "src": "755:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "757:16:103", + "nodeType": "YulIdentifier", + "src": "757:16:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulFunctionCall", + "src": "757:18:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulExpressionStatement", + "src": "757:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "747:2:103", + "nodeType": "YulIdentifier", + "src": "747:2:103" + }, + { + "name": "_2", + "nativeSrc": "751:2:103", + "nodeType": "YulIdentifier", + "src": "751:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "744:2:103", + "nodeType": "YulIdentifier", + "src": "744:2:103" + }, + "nativeSrc": "744:10:103", + "nodeType": "YulFunctionCall", + "src": "744:10:103" + }, + "nativeSrc": "741:36:103", + "nodeType": "YulIf", + "src": "741:36:103" + }, + { + "nativeSrc": "786:17:103", + "nodeType": "YulVariableDeclaration", + "src": "786:17:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "800:2:103", + "nodeType": "YulLiteral", + "src": "800:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "796:3:103", + "nodeType": "YulIdentifier", + "src": "796:3:103" + }, + "nativeSrc": "796:7:103", + "nodeType": "YulFunctionCall", + "src": "796:7:103" + }, + "variables": [ + { + "name": "_3", + "nativeSrc": "790:2:103", + "nodeType": "YulTypedName", + "src": "790:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "812:23:103", + "nodeType": "YulVariableDeclaration", + "src": "812:23:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "832:2:103", + "nodeType": "YulLiteral", + "src": "832:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "826:5:103", + "nodeType": "YulIdentifier", + "src": "826:5:103" + }, + "nativeSrc": "826:9:103", + "nodeType": "YulFunctionCall", + "src": "826:9:103" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "816:6:103", + "nodeType": "YulTypedName", + "src": "816:6:103", + "type": "" + } + ] + }, + { + "nativeSrc": "844:71:103", + "nodeType": "YulVariableDeclaration", + "src": "844:71:103", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "866:6:103", + "nodeType": "YulIdentifier", + "src": "866:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "890:2:103", + "nodeType": "YulIdentifier", + "src": "890:2:103" + }, + { + "kind": "number", + "nativeSrc": "894:4:103", + "nodeType": "YulLiteral", + "src": "894:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "886:3:103", + "nodeType": "YulIdentifier", + "src": "886:3:103" + }, + "nativeSrc": "886:13:103", + "nodeType": "YulFunctionCall", + "src": "886:13:103" + }, + { + "name": "_3", + "nativeSrc": "901:2:103", + "nodeType": "YulIdentifier", + "src": "901:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "882:3:103", + "nodeType": "YulIdentifier", + "src": "882:3:103" + }, + "nativeSrc": "882:22:103", + "nodeType": "YulFunctionCall", + "src": "882:22:103" + }, + { + "kind": "number", + "nativeSrc": "906:2:103", + "nodeType": "YulLiteral", + "src": "906:2:103", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "878:3:103", + "nodeType": "YulIdentifier", + "src": "878:3:103" + }, + "nativeSrc": "878:31:103", + "nodeType": "YulFunctionCall", + "src": "878:31:103" + }, + { + "name": "_3", + "nativeSrc": "911:2:103", + "nodeType": "YulIdentifier", + "src": "911:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "874:3:103", + "nodeType": "YulIdentifier", + "src": "874:3:103" + }, + "nativeSrc": "874:40:103", + "nodeType": "YulFunctionCall", + "src": "874:40:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "862:3:103", + "nodeType": "YulIdentifier", + "src": "862:3:103" + }, + "nativeSrc": "862:53:103", + "nodeType": "YulFunctionCall", + "src": "862:53:103" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "848:10:103", + "nodeType": "YulTypedName", + "src": "848:10:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "974:22:103", + "nodeType": "YulBlock", + "src": "974:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "976:16:103", + "nodeType": "YulIdentifier", + "src": "976:16:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulFunctionCall", + "src": "976:18:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulExpressionStatement", + "src": "976:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "933:10:103", + "nodeType": "YulIdentifier", + "src": "933:10:103" + }, + { + "name": "_2", + "nativeSrc": "945:2:103", + "nodeType": "YulIdentifier", + "src": "945:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "930:2:103", + "nodeType": "YulIdentifier", + "src": "930:2:103" + }, + "nativeSrc": "930:18:103", + "nodeType": "YulFunctionCall", + "src": "930:18:103" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "953:10:103", + "nodeType": "YulIdentifier", + "src": "953:10:103" + }, + { + "name": "memPtr", + "nativeSrc": "965:6:103", + "nodeType": "YulIdentifier", + "src": "965:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "950:2:103", + "nodeType": "YulIdentifier", + "src": "950:2:103" + }, + "nativeSrc": "950:22:103", + "nodeType": "YulFunctionCall", + "src": "950:22:103" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "927:2:103", + "nodeType": "YulIdentifier", + "src": "927:2:103" + }, + "nativeSrc": "927:46:103", + "nodeType": "YulFunctionCall", + "src": "927:46:103" + }, + "nativeSrc": "924:72:103", + "nodeType": "YulIf", + "src": "924:72:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1012:2:103", + "nodeType": "YulLiteral", + "src": "1012:2:103", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "1016:10:103", + "nodeType": "YulIdentifier", + "src": "1016:10:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1005:6:103", + "nodeType": "YulIdentifier", + "src": "1005:6:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulFunctionCall", + "src": "1005:22:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulExpressionStatement", + "src": "1005:22:103" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1043:6:103", + "nodeType": "YulIdentifier", + "src": "1043:6:103" + }, + { + "name": "_1", + "nativeSrc": "1051:2:103", + "nodeType": "YulIdentifier", + "src": "1051:2:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1036:6:103", + "nodeType": "YulIdentifier", + "src": "1036:6:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulFunctionCall", + "src": "1036:18:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulExpressionStatement", + "src": "1036:18:103" + }, + { + "body": { + "nativeSrc": "1102:16:103", + "nodeType": "YulBlock", + "src": "1102:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1111:1:103", + "nodeType": "YulLiteral", + "src": "1111:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1114:1:103", + "nodeType": "YulLiteral", + "src": "1114:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1104:6:103", + "nodeType": "YulIdentifier", + "src": "1104:6:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulFunctionCall", + "src": "1104:12:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulExpressionStatement", + "src": "1104:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1077:6:103", + "nodeType": "YulIdentifier", + "src": "1077:6:103" + }, + { + "name": "_1", + "nativeSrc": "1085:2:103", + "nodeType": "YulIdentifier", + "src": "1085:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1073:3:103", + "nodeType": "YulIdentifier", + "src": "1073:3:103" + }, + "nativeSrc": "1073:15:103", + "nodeType": "YulFunctionCall", + "src": "1073:15:103" + }, + { + "kind": "number", + "nativeSrc": "1090:4:103", + "nodeType": "YulLiteral", + "src": "1090:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1069:3:103", + "nodeType": "YulIdentifier", + "src": "1069:3:103" + }, + "nativeSrc": "1069:26:103", + "nodeType": "YulFunctionCall", + "src": "1069:26:103" + }, + { + "name": "end", + "nativeSrc": "1097:3:103", + "nodeType": "YulIdentifier", + "src": "1097:3:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1066:2:103", + "nodeType": "YulIdentifier", + "src": "1066:2:103" + }, + "nativeSrc": "1066:35:103", + "nodeType": "YulFunctionCall", + "src": "1066:35:103" + }, + "nativeSrc": "1063:55:103", + "nodeType": "YulIf", + "src": "1063:55:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1144:6:103", + "nodeType": "YulIdentifier", + "src": "1144:6:103" + }, + { + "kind": "number", + "nativeSrc": "1152:4:103", + "nodeType": "YulLiteral", + "src": "1152:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1140:3:103", + "nodeType": "YulIdentifier", + "src": "1140:3:103" + }, + "nativeSrc": "1140:17:103", + "nodeType": "YulFunctionCall", + "src": "1140:17:103" + }, + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1163:6:103", + "nodeType": "YulIdentifier", + "src": "1163:6:103" + }, + { + "kind": "number", + "nativeSrc": "1171:4:103", + "nodeType": "YulLiteral", + "src": "1171:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1159:3:103", + "nodeType": "YulIdentifier", + "src": "1159:3:103" + }, + "nativeSrc": "1159:17:103", + "nodeType": "YulFunctionCall", + "src": "1159:17:103" + }, + { + "name": "_1", + "nativeSrc": "1178:2:103", + "nodeType": "YulIdentifier", + "src": "1178:2:103" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "1127:12:103", + "nodeType": "YulIdentifier", + "src": "1127:12:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulFunctionCall", + "src": "1127:54:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulExpressionStatement", + "src": "1127:54:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1205:6:103", + "nodeType": "YulIdentifier", + "src": "1205:6:103" + }, + { + "name": "_1", + "nativeSrc": "1213:2:103", + "nodeType": "YulIdentifier", + "src": "1213:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1201:3:103", + "nodeType": "YulIdentifier", + "src": "1201:3:103" + }, + "nativeSrc": "1201:15:103", + "nodeType": "YulFunctionCall", + "src": "1201:15:103" + }, + { + "kind": "number", + "nativeSrc": "1218:4:103", + "nodeType": "YulLiteral", + "src": "1218:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1197:3:103", + "nodeType": "YulIdentifier", + "src": "1197:3:103" + }, + "nativeSrc": "1197:26:103", + "nodeType": "YulFunctionCall", + "src": "1197:26:103" + }, + { + "kind": "number", + "nativeSrc": "1225:1:103", + "nodeType": "YulLiteral", + "src": "1225:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1190:6:103", + "nodeType": "YulIdentifier", + "src": "1190:6:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulFunctionCall", + "src": "1190:37:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulExpressionStatement", + "src": "1190:37:103" + }, + { + "nativeSrc": "1236:15:103", + "nodeType": "YulAssignment", + "src": "1236:15:103", + "value": { + "name": "memPtr", + "nativeSrc": "1245:6:103", + "nodeType": "YulIdentifier", + "src": "1245:6:103" + }, + "variableNames": [ + { + "name": "array", + "nativeSrc": "1236:5:103", + "nodeType": "YulIdentifier", + "src": "1236:5:103" + } + ] + } + ] + }, + "name": "abi_decode_bytes", + "nativeSrc": "539:718:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "565:6:103", + "nodeType": "YulTypedName", + "src": "565:6:103", + "type": "" + }, + { + "name": "end", + "nativeSrc": "573:3:103", + "nodeType": "YulTypedName", + "src": "573:3:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nativeSrc": "581:5:103", + "nodeType": "YulTypedName", + "src": "581:5:103", + "type": "" + } + ], + "src": "539:718:103" + }, + { + "body": { + "nativeSrc": "1358:292:103", + "nodeType": "YulBlock", + "src": "1358:292:103", + "statements": [ + { + "body": { + "nativeSrc": "1404:16:103", + "nodeType": "YulBlock", + "src": "1404:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1413:1:103", + "nodeType": "YulLiteral", + "src": "1413:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1416:1:103", + "nodeType": "YulLiteral", + "src": "1416:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1406:6:103", + "nodeType": "YulIdentifier", + "src": "1406:6:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulFunctionCall", + "src": "1406:12:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulExpressionStatement", + "src": "1406:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1379:7:103", + "nodeType": "YulIdentifier", + "src": "1379:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1388:9:103", + "nodeType": "YulIdentifier", + "src": "1388:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1375:3:103", + "nodeType": "YulIdentifier", + "src": "1375:3:103" + }, + "nativeSrc": "1375:23:103", + "nodeType": "YulFunctionCall", + "src": "1375:23:103" + }, + { + "kind": "number", + "nativeSrc": "1400:2:103", + "nodeType": "YulLiteral", + "src": "1400:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1371:3:103", + "nodeType": "YulIdentifier", + "src": "1371:3:103" + }, + "nativeSrc": "1371:32:103", + "nodeType": "YulFunctionCall", + "src": "1371:32:103" + }, + "nativeSrc": "1368:52:103", + "nodeType": "YulIf", + "src": "1368:52:103" + }, + { + "nativeSrc": "1429:37:103", + "nodeType": "YulVariableDeclaration", + "src": "1429:37:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1456:9:103", + "nodeType": "YulIdentifier", + "src": "1456:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1443:12:103", + "nodeType": "YulIdentifier", + "src": "1443:12:103" + }, + "nativeSrc": "1443:23:103", + "nodeType": "YulFunctionCall", + "src": "1443:23:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "1433:6:103", + "nodeType": "YulTypedName", + "src": "1433:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1509:16:103", + "nodeType": "YulBlock", + "src": "1509:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1518:1:103", + "nodeType": "YulLiteral", + "src": "1518:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1521:1:103", + "nodeType": "YulLiteral", + "src": "1521:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1511:6:103", + "nodeType": "YulIdentifier", + "src": "1511:6:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulFunctionCall", + "src": "1511:12:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulExpressionStatement", + "src": "1511:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1481:6:103", + "nodeType": "YulIdentifier", + "src": "1481:6:103" + }, + { + "kind": "number", + "nativeSrc": "1489:18:103", + "nodeType": "YulLiteral", + "src": "1489:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1478:2:103", + "nodeType": "YulIdentifier", + "src": "1478:2:103" + }, + "nativeSrc": "1478:30:103", + "nodeType": "YulFunctionCall", + "src": "1478:30:103" + }, + "nativeSrc": "1475:50:103", + "nodeType": "YulIf", + "src": "1475:50:103" + }, + { + "nativeSrc": "1534:59:103", + "nodeType": "YulAssignment", + "src": "1534:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1565:9:103", + "nodeType": "YulIdentifier", + "src": "1565:9:103" + }, + { + "name": "offset", + "nativeSrc": "1576:6:103", + "nodeType": "YulIdentifier", + "src": "1576:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1561:3:103", + "nodeType": "YulIdentifier", + "src": "1561:3:103" + }, + "nativeSrc": "1561:22:103", + "nodeType": "YulFunctionCall", + "src": "1561:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "1585:7:103", + "nodeType": "YulIdentifier", + "src": "1585:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "1544:16:103", + "nodeType": "YulIdentifier", + "src": "1544:16:103" + }, + "nativeSrc": "1544:49:103", + "nodeType": "YulFunctionCall", + "src": "1544:49:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1534:6:103", + "nodeType": "YulIdentifier", + "src": "1534:6:103" + } + ] + }, + { + "nativeSrc": "1602:42:103", + "nodeType": "YulAssignment", + "src": "1602:42:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1629:9:103", + "nodeType": "YulIdentifier", + "src": "1629:9:103" + }, + { + "kind": "number", + "nativeSrc": "1640:2:103", + "nodeType": "YulLiteral", + "src": "1640:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1625:3:103", + "nodeType": "YulIdentifier", + "src": "1625:3:103" + }, + "nativeSrc": "1625:18:103", + "nodeType": "YulFunctionCall", + "src": "1625:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1612:12:103", + "nodeType": "YulIdentifier", + "src": "1612:12:103" + }, + "nativeSrc": "1612:32:103", + "nodeType": "YulFunctionCall", + "src": "1612:32:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1602:6:103", + "nodeType": "YulIdentifier", + "src": "1602:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32", + "nativeSrc": "1262:388:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1316:9:103", + "nodeType": "YulTypedName", + "src": "1316:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1327:7:103", + "nodeType": "YulTypedName", + "src": "1327:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1339:6:103", + "nodeType": "YulTypedName", + "src": "1339:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1347:6:103", + "nodeType": "YulTypedName", + "src": "1347:6:103", + "type": "" + } + ], + "src": "1262:388:103" + }, + { + "body": { + "nativeSrc": "1768:449:103", + "nodeType": "YulBlock", + "src": "1768:449:103", + "statements": [ + { + "body": { + "nativeSrc": "1814:16:103", + "nodeType": "YulBlock", + "src": "1814:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1823:1:103", + "nodeType": "YulLiteral", + "src": "1823:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1826:1:103", + "nodeType": "YulLiteral", + "src": "1826:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1816:6:103", + "nodeType": "YulIdentifier", + "src": "1816:6:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulFunctionCall", + "src": "1816:12:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulExpressionStatement", + "src": "1816:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1789:7:103", + "nodeType": "YulIdentifier", + "src": "1789:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1798:9:103", + "nodeType": "YulIdentifier", + "src": "1798:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1785:3:103", + "nodeType": "YulIdentifier", + "src": "1785:3:103" + }, + "nativeSrc": "1785:23:103", + "nodeType": "YulFunctionCall", + "src": "1785:23:103" + }, + { + "kind": "number", + "nativeSrc": "1810:2:103", + "nodeType": "YulLiteral", + "src": "1810:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1781:3:103", + "nodeType": "YulIdentifier", + "src": "1781:3:103" + }, + "nativeSrc": "1781:32:103", + "nodeType": "YulFunctionCall", + "src": "1781:32:103" + }, + "nativeSrc": "1778:52:103", + "nodeType": "YulIf", + "src": "1778:52:103" + }, + { + "nativeSrc": "1839:33:103", + "nodeType": "YulAssignment", + "src": "1839:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1862:9:103", + "nodeType": "YulIdentifier", + "src": "1862:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1849:12:103", + "nodeType": "YulIdentifier", + "src": "1849:12:103" + }, + "nativeSrc": "1849:23:103", + "nodeType": "YulFunctionCall", + "src": "1849:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1839:6:103", + "nodeType": "YulIdentifier", + "src": "1839:6:103" + } + ] + }, + { + "nativeSrc": "1881:45:103", + "nodeType": "YulVariableDeclaration", + "src": "1881:45:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1911:9:103", + "nodeType": "YulIdentifier", + "src": "1911:9:103" + }, + { + "kind": "number", + "nativeSrc": "1922:2:103", + "nodeType": "YulLiteral", + "src": "1922:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1907:3:103", + "nodeType": "YulIdentifier", + "src": "1907:3:103" + }, + "nativeSrc": "1907:18:103", + "nodeType": "YulFunctionCall", + "src": "1907:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1894:12:103", + "nodeType": "YulIdentifier", + "src": "1894:12:103" + }, + "nativeSrc": "1894:32:103", + "nodeType": "YulFunctionCall", + "src": "1894:32:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1885:5:103", + "nodeType": "YulTypedName", + "src": "1885:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1989:16:103", + "nodeType": "YulBlock", + "src": "1989:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1998:1:103", + "nodeType": "YulLiteral", + "src": "1998:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2001:1:103", + "nodeType": "YulLiteral", + "src": "2001:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1991:6:103", + "nodeType": "YulIdentifier", + "src": "1991:6:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulFunctionCall", + "src": "1991:12:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulExpressionStatement", + "src": "1991:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1948:5:103", + "nodeType": "YulIdentifier", + "src": "1948:5:103" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1959:5:103", + "nodeType": "YulIdentifier", + "src": "1959:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1974:3:103", + "nodeType": "YulLiteral", + "src": "1974:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1979:1:103", + "nodeType": "YulLiteral", + "src": "1979:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1970:3:103", + "nodeType": "YulIdentifier", + "src": "1970:3:103" + }, + "nativeSrc": "1970:11:103", + "nodeType": "YulFunctionCall", + "src": "1970:11:103" + }, + { + "kind": "number", + "nativeSrc": "1983:1:103", + "nodeType": "YulLiteral", + "src": "1983:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1966:3:103", + "nodeType": "YulIdentifier", + "src": "1966:3:103" + }, + "nativeSrc": "1966:19:103", + "nodeType": "YulFunctionCall", + "src": "1966:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1955:3:103", + "nodeType": "YulIdentifier", + "src": "1955:3:103" + }, + "nativeSrc": "1955:31:103", + "nodeType": "YulFunctionCall", + "src": "1955:31:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1945:2:103", + "nodeType": "YulIdentifier", + "src": "1945:2:103" + }, + "nativeSrc": "1945:42:103", + "nodeType": "YulFunctionCall", + "src": "1945:42:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1938:6:103", + "nodeType": "YulIdentifier", + "src": "1938:6:103" + }, + "nativeSrc": "1938:50:103", + "nodeType": "YulFunctionCall", + "src": "1938:50:103" + }, + "nativeSrc": "1935:70:103", + "nodeType": "YulIf", + "src": "1935:70:103" + }, + { + "nativeSrc": "2014:15:103", + "nodeType": "YulAssignment", + "src": "2014:15:103", + "value": { + "name": "value", + "nativeSrc": "2024:5:103", + "nodeType": "YulIdentifier", + "src": "2024:5:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2014:6:103", + "nodeType": "YulIdentifier", + "src": "2014:6:103" + } + ] + }, + { + "nativeSrc": "2038:46:103", + "nodeType": "YulVariableDeclaration", + "src": "2038:46:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2069:9:103", + "nodeType": "YulIdentifier", + "src": "2069:9:103" + }, + { + "kind": "number", + "nativeSrc": "2080:2:103", + "nodeType": "YulLiteral", + "src": "2080:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2065:3:103", + "nodeType": "YulIdentifier", + "src": "2065:3:103" + }, + "nativeSrc": "2065:18:103", + "nodeType": "YulFunctionCall", + "src": "2065:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2052:12:103", + "nodeType": "YulIdentifier", + "src": "2052:12:103" + }, + "nativeSrc": "2052:32:103", + "nodeType": "YulFunctionCall", + "src": "2052:32:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "2042:6:103", + "nodeType": "YulTypedName", + "src": "2042:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2127:16:103", + "nodeType": "YulBlock", + "src": "2127:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2136:1:103", + "nodeType": "YulLiteral", + "src": "2136:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2139:1:103", + "nodeType": "YulLiteral", + "src": "2139:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2129:6:103", + "nodeType": "YulIdentifier", + "src": "2129:6:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulFunctionCall", + "src": "2129:12:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulExpressionStatement", + "src": "2129:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2099:6:103", + "nodeType": "YulIdentifier", + "src": "2099:6:103" + }, + { + "kind": "number", + "nativeSrc": "2107:18:103", + "nodeType": "YulLiteral", + "src": "2107:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2096:2:103", + "nodeType": "YulIdentifier", + "src": "2096:2:103" + }, + "nativeSrc": "2096:30:103", + "nodeType": "YulFunctionCall", + "src": "2096:30:103" + }, + "nativeSrc": "2093:50:103", + "nodeType": "YulIf", + "src": "2093:50:103" + }, + { + "nativeSrc": "2152:59:103", + "nodeType": "YulAssignment", + "src": "2152:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2183:9:103", + "nodeType": "YulIdentifier", + "src": "2183:9:103" + }, + { + "name": "offset", + "nativeSrc": "2194:6:103", + "nodeType": "YulIdentifier", + "src": "2194:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2179:3:103", + "nodeType": "YulIdentifier", + "src": "2179:3:103" + }, + "nativeSrc": "2179:22:103", + "nodeType": "YulFunctionCall", + "src": "2179:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "2203:7:103", + "nodeType": "YulIdentifier", + "src": "2203:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "2162:16:103", + "nodeType": "YulIdentifier", + "src": "2162:16:103" + }, + "nativeSrc": "2162:49:103", + "nodeType": "YulFunctionCall", + "src": "2162:49:103" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "2152:6:103", + "nodeType": "YulIdentifier", + "src": "2152:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr", + "nativeSrc": "1655:562:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1718:9:103", + "nodeType": "YulTypedName", + "src": "1718:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1729:7:103", + "nodeType": "YulTypedName", + "src": "1729:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1741:6:103", + "nodeType": "YulTypedName", + "src": "1741:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1749:6:103", + "nodeType": "YulTypedName", + "src": "1749:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1757:6:103", + "nodeType": "YulTypedName", + "src": "1757:6:103", + "type": "" + } + ], + "src": "1655:562:103" + }, + { + "body": { + "nativeSrc": "2351:102:103", + "nodeType": "YulBlock", + "src": "2351:102:103", + "statements": [ + { + "nativeSrc": "2361:26:103", + "nodeType": "YulAssignment", + "src": "2361:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2373:9:103", + "nodeType": "YulIdentifier", + "src": "2373:9:103" + }, + { + "kind": "number", + "nativeSrc": "2384:2:103", + "nodeType": "YulLiteral", + "src": "2384:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2369:3:103", + "nodeType": "YulIdentifier", + "src": "2369:3:103" + }, + "nativeSrc": "2369:18:103", + "nodeType": "YulFunctionCall", + "src": "2369:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2361:4:103", + "nodeType": "YulIdentifier", + "src": "2361:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2403:9:103", + "nodeType": "YulIdentifier", + "src": "2403:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2418:6:103", + "nodeType": "YulIdentifier", + "src": "2418:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2434:3:103", + "nodeType": "YulLiteral", + "src": "2434:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2439:1:103", + "nodeType": "YulLiteral", + "src": "2439:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2430:3:103", + "nodeType": "YulIdentifier", + "src": "2430:3:103" + }, + "nativeSrc": "2430:11:103", + "nodeType": "YulFunctionCall", + "src": "2430:11:103" + }, + { + "kind": "number", + "nativeSrc": "2443:1:103", + "nodeType": "YulLiteral", + "src": "2443:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2426:3:103", + "nodeType": "YulIdentifier", + "src": "2426:3:103" + }, + "nativeSrc": "2426:19:103", + "nodeType": "YulFunctionCall", + "src": "2426:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2414:3:103", + "nodeType": "YulIdentifier", + "src": "2414:3:103" + }, + "nativeSrc": "2414:32:103", + "nodeType": "YulFunctionCall", + "src": "2414:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2396:6:103", + "nodeType": "YulIdentifier", + "src": "2396:6:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulFunctionCall", + "src": "2396:51:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulExpressionStatement", + "src": "2396:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed", + "nativeSrc": "2222:231:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2320:9:103", + "nodeType": "YulTypedName", + "src": "2320:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2331:6:103", + "nodeType": "YulTypedName", + "src": "2331:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2342:4:103", + "nodeType": "YulTypedName", + "src": "2342:4:103", + "type": "" + } + ], + "src": "2222:231:103" + }, + { + "body": { + "nativeSrc": "2632:223:103", + "nodeType": "YulBlock", + "src": "2632:223:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2649:9:103", + "nodeType": "YulIdentifier", + "src": "2649:9:103" + }, + { + "kind": "number", + "nativeSrc": "2660:2:103", + "nodeType": "YulLiteral", + "src": "2660:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2642:6:103", + "nodeType": "YulIdentifier", + "src": "2642:6:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulFunctionCall", + "src": "2642:21:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulExpressionStatement", + "src": "2642:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2683:9:103", + "nodeType": "YulIdentifier", + "src": "2683:9:103" + }, + { + "kind": "number", + "nativeSrc": "2694:2:103", + "nodeType": "YulLiteral", + "src": "2694:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2679:3:103", + "nodeType": "YulIdentifier", + "src": "2679:3:103" + }, + "nativeSrc": "2679:18:103", + "nodeType": "YulFunctionCall", + "src": "2679:18:103" + }, + { + "kind": "number", + "nativeSrc": "2699:2:103", + "nodeType": "YulLiteral", + "src": "2699:2:103", + "type": "", + "value": "33" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2672:6:103", + "nodeType": "YulIdentifier", + "src": "2672:6:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulFunctionCall", + "src": "2672:30:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulExpressionStatement", + "src": "2672:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2722:9:103", + "nodeType": "YulIdentifier", + "src": "2722:9:103" + }, + { + "kind": "number", + "nativeSrc": "2733:2:103", + "nodeType": "YulLiteral", + "src": "2733:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2718:3:103", + "nodeType": "YulIdentifier", + "src": "2718:3:103" + }, + "nativeSrc": "2718:18:103", + "nodeType": "YulFunctionCall", + "src": "2718:18:103" + }, + { + "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c65", + "kind": "string", + "nativeSrc": "2738:34:103", + "nodeType": "YulLiteral", + "src": "2738:34:103", + "type": "", + "value": "WitnetDeployer: deployment faile" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2711:6:103", + "nodeType": "YulIdentifier", + "src": "2711:6:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulFunctionCall", + "src": "2711:62:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulExpressionStatement", + "src": "2711:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2793:9:103", + "nodeType": "YulIdentifier", + "src": "2793:9:103" + }, + { + "kind": "number", + "nativeSrc": "2804:2:103", + "nodeType": "YulLiteral", + "src": "2804:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2789:3:103", + "nodeType": "YulIdentifier", + "src": "2789:3:103" + }, + "nativeSrc": "2789:18:103", + "nodeType": "YulFunctionCall", + "src": "2789:18:103" + }, + { + "hexValue": "64", + "kind": "string", + "nativeSrc": "2809:3:103", + "nodeType": "YulLiteral", + "src": "2809:3:103", + "type": "", + "value": "d" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2782:6:103", + "nodeType": "YulIdentifier", + "src": "2782:6:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulFunctionCall", + "src": "2782:31:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulExpressionStatement", + "src": "2782:31:103" + }, + { + "nativeSrc": "2822:27:103", + "nodeType": "YulAssignment", + "src": "2822:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2834:9:103", + "nodeType": "YulIdentifier", + "src": "2834:9:103" + }, + { + "kind": "number", + "nativeSrc": "2845:3:103", + "nodeType": "YulLiteral", + "src": "2845:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2830:3:103", + "nodeType": "YulIdentifier", + "src": "2830:3:103" + }, + "nativeSrc": "2830:19:103", + "nodeType": "YulFunctionCall", + "src": "2830:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2822:4:103", + "nodeType": "YulIdentifier", + "src": "2822:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2458:397:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2609:9:103", + "nodeType": "YulTypedName", + "src": "2609:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2623:4:103", + "nodeType": "YulTypedName", + "src": "2623:4:103", + "type": "" + } + ], + "src": "2458:397:103" + }, + { + "body": { + "nativeSrc": "2926:184:103", + "nodeType": "YulBlock", + "src": "2926:184:103", + "statements": [ + { + "nativeSrc": "2936:10:103", + "nodeType": "YulVariableDeclaration", + "src": "2936:10:103", + "value": { + "kind": "number", + "nativeSrc": "2945:1:103", + "nodeType": "YulLiteral", + "src": "2945:1:103", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "2940:1:103", + "nodeType": "YulTypedName", + "src": "2940:1:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3005:63:103", + "nodeType": "YulBlock", + "src": "3005:63:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "3030:3:103", + "nodeType": "YulIdentifier", + "src": "3030:3:103" + }, + { + "name": "i", + "nativeSrc": "3035:1:103", + "nodeType": "YulIdentifier", + "src": "3035:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3026:3:103", + "nodeType": "YulIdentifier", + "src": "3026:3:103" + }, + "nativeSrc": "3026:11:103", + "nodeType": "YulFunctionCall", + "src": "3026:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "3049:3:103", + "nodeType": "YulIdentifier", + "src": "3049:3:103" + }, + { + "name": "i", + "nativeSrc": "3054:1:103", + "nodeType": "YulIdentifier", + "src": "3054:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3045:3:103", + "nodeType": "YulIdentifier", + "src": "3045:3:103" + }, + "nativeSrc": "3045:11:103", + "nodeType": "YulFunctionCall", + "src": "3045:11:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3039:5:103", + "nodeType": "YulIdentifier", + "src": "3039:5:103" + }, + "nativeSrc": "3039:18:103", + "nodeType": "YulFunctionCall", + "src": "3039:18:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3019:6:103", + "nodeType": "YulIdentifier", + "src": "3019:6:103" + }, + "nativeSrc": "3019:39:103", + "nodeType": "YulFunctionCall", + "src": "3019:39:103" + }, + "nativeSrc": "3019:39:103", + "nodeType": "YulExpressionStatement", + "src": "3019:39:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "2966:1:103", + "nodeType": "YulIdentifier", + "src": "2966:1:103" + }, + { + "name": "length", + "nativeSrc": "2969:6:103", + "nodeType": "YulIdentifier", + "src": "2969:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "2963:2:103", + "nodeType": "YulIdentifier", + "src": "2963:2:103" + }, + "nativeSrc": "2963:13:103", + "nodeType": "YulFunctionCall", + "src": "2963:13:103" + }, + "nativeSrc": "2955:113:103", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "2977:19:103", + "nodeType": "YulBlock", + "src": "2977:19:103", + "statements": [ + { + "nativeSrc": "2979:15:103", + "nodeType": "YulAssignment", + "src": "2979:15:103", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "2988:1:103", + "nodeType": "YulIdentifier", + "src": "2988:1:103" + }, + { + "kind": "number", + "nativeSrc": "2991:2:103", + "nodeType": "YulLiteral", + "src": "2991:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2984:3:103", + "nodeType": "YulIdentifier", + "src": "2984:3:103" + }, + "nativeSrc": "2984:10:103", + "nodeType": "YulFunctionCall", + "src": "2984:10:103" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "2979:1:103", + "nodeType": "YulIdentifier", + "src": "2979:1:103" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "2959:3:103", + "nodeType": "YulBlock", + "src": "2959:3:103", + "statements": [] + }, + "src": "2955:113:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "3088:3:103", + "nodeType": "YulIdentifier", + "src": "3088:3:103" + }, + { + "name": "length", + "nativeSrc": "3093:6:103", + "nodeType": "YulIdentifier", + "src": "3093:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3084:3:103", + "nodeType": "YulIdentifier", + "src": "3084:3:103" + }, + "nativeSrc": "3084:16:103", + "nodeType": "YulFunctionCall", + "src": "3084:16:103" + }, + { + "kind": "number", + "nativeSrc": "3102:1:103", + "nodeType": "YulLiteral", + "src": "3102:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3077:6:103", + "nodeType": "YulIdentifier", + "src": "3077:6:103" + }, + "nativeSrc": "3077:27:103", + "nodeType": "YulFunctionCall", + "src": "3077:27:103" + }, + "nativeSrc": "3077:27:103", + "nodeType": "YulExpressionStatement", + "src": "3077:27:103" + } + ] + }, + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "2860:250:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nativeSrc": "2904:3:103", + "nodeType": "YulTypedName", + "src": "2904:3:103", + "type": "" + }, + { + "name": "dst", + "nativeSrc": "2909:3:103", + "nodeType": "YulTypedName", + "src": "2909:3:103", + "type": "" + }, + { + "name": "length", + "nativeSrc": "2914:6:103", + "nodeType": "YulTypedName", + "src": "2914:6:103", + "type": "" + } + ], + "src": "2860:250:103" + }, + { + "body": { + "nativeSrc": "3262:344:103", + "nodeType": "YulBlock", + "src": "3262:344:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3279:9:103", + "nodeType": "YulIdentifier", + "src": "3279:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3294:6:103", + "nodeType": "YulIdentifier", + "src": "3294:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3310:3:103", + "nodeType": "YulLiteral", + "src": "3310:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3315:1:103", + "nodeType": "YulLiteral", + "src": "3315:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3306:3:103", + "nodeType": "YulIdentifier", + "src": "3306:3:103" + }, + "nativeSrc": "3306:11:103", + "nodeType": "YulFunctionCall", + "src": "3306:11:103" + }, + { + "kind": "number", + "nativeSrc": "3319:1:103", + "nodeType": "YulLiteral", + "src": "3319:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3302:3:103", + "nodeType": "YulIdentifier", + "src": "3302:3:103" + }, + "nativeSrc": "3302:19:103", + "nodeType": "YulFunctionCall", + "src": "3302:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3290:3:103", + "nodeType": "YulIdentifier", + "src": "3290:3:103" + }, + "nativeSrc": "3290:32:103", + "nodeType": "YulFunctionCall", + "src": "3290:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3272:6:103", + "nodeType": "YulIdentifier", + "src": "3272:6:103" + }, + "nativeSrc": "3272:51:103", + "nodeType": "YulFunctionCall", + "src": "3272:51:103" + }, + "nativeSrc": "3272:51:103", + "nodeType": "YulExpressionStatement", + "src": "3272:51:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3343:9:103", + "nodeType": "YulIdentifier", + "src": "3343:9:103" + }, + { + "kind": "number", + "nativeSrc": "3354:2:103", + "nodeType": "YulLiteral", + "src": "3354:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3339:3:103", + "nodeType": "YulIdentifier", + "src": "3339:3:103" + }, + "nativeSrc": "3339:18:103", + "nodeType": "YulFunctionCall", + "src": "3339:18:103" + }, + { + "kind": "number", + "nativeSrc": "3359:2:103", + "nodeType": "YulLiteral", + "src": "3359:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3332:6:103", + "nodeType": "YulIdentifier", + "src": "3332:6:103" + }, + "nativeSrc": "3332:30:103", + "nodeType": "YulFunctionCall", + "src": "3332:30:103" + }, + "nativeSrc": "3332:30:103", + "nodeType": "YulExpressionStatement", + "src": "3332:30:103" + }, + { + "nativeSrc": "3371:27:103", + "nodeType": "YulVariableDeclaration", + "src": "3371:27:103", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3391:6:103", + "nodeType": "YulIdentifier", + "src": "3391:6:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3385:5:103", + "nodeType": "YulIdentifier", + "src": "3385:5:103" + }, + "nativeSrc": "3385:13:103", + "nodeType": "YulFunctionCall", + "src": "3385:13:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "3375:6:103", + "nodeType": "YulTypedName", + "src": "3375:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3418:9:103", + "nodeType": "YulIdentifier", + "src": "3418:9:103" + }, + { + "kind": "number", + "nativeSrc": "3429:2:103", + "nodeType": "YulLiteral", + "src": "3429:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3414:3:103", + "nodeType": "YulIdentifier", + "src": "3414:3:103" + }, + "nativeSrc": "3414:18:103", + "nodeType": "YulFunctionCall", + "src": "3414:18:103" + }, + { + "name": "length", + "nativeSrc": "3434:6:103", + "nodeType": "YulIdentifier", + "src": "3434:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3407:6:103", + "nodeType": "YulIdentifier", + "src": "3407:6:103" + }, + "nativeSrc": "3407:34:103", + "nodeType": "YulFunctionCall", + "src": "3407:34:103" + }, + "nativeSrc": "3407:34:103", + "nodeType": "YulExpressionStatement", + "src": "3407:34:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3489:6:103", + "nodeType": "YulIdentifier", + "src": "3489:6:103" + }, + { + "kind": "number", + "nativeSrc": "3497:2:103", + "nodeType": "YulLiteral", + "src": "3497:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3485:3:103", + "nodeType": "YulIdentifier", + "src": "3485:3:103" + }, + "nativeSrc": "3485:15:103", + "nodeType": "YulFunctionCall", + "src": "3485:15:103" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3506:9:103", + "nodeType": "YulIdentifier", + "src": "3506:9:103" + }, + { + "kind": "number", + "nativeSrc": "3517:2:103", + "nodeType": "YulLiteral", + "src": "3517:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3502:3:103", + "nodeType": "YulIdentifier", + "src": "3502:3:103" + }, + "nativeSrc": "3502:18:103", + "nodeType": "YulFunctionCall", + "src": "3502:18:103" + }, + { + "name": "length", + "nativeSrc": "3522:6:103", + "nodeType": "YulIdentifier", + "src": "3522:6:103" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "3450:34:103", + "nodeType": "YulIdentifier", + "src": "3450:34:103" + }, + "nativeSrc": "3450:79:103", + "nodeType": "YulFunctionCall", + "src": "3450:79:103" + }, + "nativeSrc": "3450:79:103", + "nodeType": "YulExpressionStatement", + "src": "3450:79:103" + }, + { + "nativeSrc": "3538:62:103", + "nodeType": "YulAssignment", + "src": "3538:62:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3554:9:103", + "nodeType": "YulIdentifier", + "src": "3554:9:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "3573:6:103", + "nodeType": "YulIdentifier", + "src": "3573:6:103" + }, + { + "kind": "number", + "nativeSrc": "3581:2:103", + "nodeType": "YulLiteral", + "src": "3581:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3569:3:103", + "nodeType": "YulIdentifier", + "src": "3569:3:103" + }, + "nativeSrc": "3569:15:103", + "nodeType": "YulFunctionCall", + "src": "3569:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3590:2:103", + "nodeType": "YulLiteral", + "src": "3590:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3586:3:103", + "nodeType": "YulIdentifier", + "src": "3586:3:103" + }, + "nativeSrc": "3586:7:103", + "nodeType": "YulFunctionCall", + "src": "3586:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3565:3:103", + "nodeType": "YulIdentifier", + "src": "3565:3:103" + }, + "nativeSrc": "3565:29:103", + "nodeType": "YulFunctionCall", + "src": "3565:29:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3550:3:103", + "nodeType": "YulIdentifier", + "src": "3550:3:103" + }, + "nativeSrc": "3550:45:103", + "nodeType": "YulFunctionCall", + "src": "3550:45:103" + }, + { + "kind": "number", + "nativeSrc": "3597:2:103", + "nodeType": "YulLiteral", + "src": "3597:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3546:3:103", + "nodeType": "YulIdentifier", + "src": "3546:3:103" + }, + "nativeSrc": "3546:54:103", + "nodeType": "YulFunctionCall", + "src": "3546:54:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3538:4:103", + "nodeType": "YulIdentifier", + "src": "3538:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "3115:491:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3223:9:103", + "nodeType": "YulTypedName", + "src": "3223:9:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "3234:6:103", + "nodeType": "YulTypedName", + "src": "3234:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "3242:6:103", + "nodeType": "YulTypedName", + "src": "3242:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3253:4:103", + "nodeType": "YulTypedName", + "src": "3253:4:103", + "type": "" + } + ], + "src": "3115:491:103" + }, + { + "body": { + "nativeSrc": "3689:199:103", + "nodeType": "YulBlock", + "src": "3689:199:103", + "statements": [ + { + "body": { + "nativeSrc": "3735:16:103", + "nodeType": "YulBlock", + "src": "3735:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3744:1:103", + "nodeType": "YulLiteral", + "src": "3744:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3747:1:103", + "nodeType": "YulLiteral", + "src": "3747:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3737:6:103", + "nodeType": "YulIdentifier", + "src": "3737:6:103" + }, + "nativeSrc": "3737:12:103", + "nodeType": "YulFunctionCall", + "src": "3737:12:103" + }, + "nativeSrc": "3737:12:103", + "nodeType": "YulExpressionStatement", + "src": "3737:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3710:7:103", + "nodeType": "YulIdentifier", + "src": "3710:7:103" + }, + { + "name": "headStart", + "nativeSrc": "3719:9:103", + "nodeType": "YulIdentifier", + "src": "3719:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3706:3:103", + "nodeType": "YulIdentifier", + "src": "3706:3:103" + }, + "nativeSrc": "3706:23:103", + "nodeType": "YulFunctionCall", + "src": "3706:23:103" + }, + { + "kind": "number", + "nativeSrc": "3731:2:103", + "nodeType": "YulLiteral", + "src": "3731:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3702:3:103", + "nodeType": "YulIdentifier", + "src": "3702:3:103" + }, + "nativeSrc": "3702:32:103", + "nodeType": "YulFunctionCall", + "src": "3702:32:103" + }, + "nativeSrc": "3699:52:103", + "nodeType": "YulIf", + "src": "3699:52:103" + }, + { + "nativeSrc": "3760:29:103", + "nodeType": "YulVariableDeclaration", + "src": "3760:29:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3779:9:103", + "nodeType": "YulIdentifier", + "src": "3779:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3773:5:103", + "nodeType": "YulIdentifier", + "src": "3773:5:103" + }, + "nativeSrc": "3773:16:103", + "nodeType": "YulFunctionCall", + "src": "3773:16:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3764:5:103", + "nodeType": "YulTypedName", + "src": "3764:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3842:16:103", + "nodeType": "YulBlock", + "src": "3842:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3851:1:103", + "nodeType": "YulLiteral", + "src": "3851:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3854:1:103", + "nodeType": "YulLiteral", + "src": "3854:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3844:6:103", + "nodeType": "YulIdentifier", + "src": "3844:6:103" + }, + "nativeSrc": "3844:12:103", + "nodeType": "YulFunctionCall", + "src": "3844:12:103" + }, + "nativeSrc": "3844:12:103", + "nodeType": "YulExpressionStatement", + "src": "3844:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3811:5:103", + "nodeType": "YulIdentifier", + "src": "3811:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3832:5:103", + "nodeType": "YulIdentifier", + "src": "3832:5:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3825:6:103", + "nodeType": "YulIdentifier", + "src": "3825:6:103" + }, + "nativeSrc": "3825:13:103", + "nodeType": "YulFunctionCall", + "src": "3825:13:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3818:6:103", + "nodeType": "YulIdentifier", + "src": "3818:6:103" + }, + "nativeSrc": "3818:21:103", + "nodeType": "YulFunctionCall", + "src": "3818:21:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3808:2:103", + "nodeType": "YulIdentifier", + "src": "3808:2:103" + }, + "nativeSrc": "3808:32:103", + "nodeType": "YulFunctionCall", + "src": "3808:32:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3801:6:103", + "nodeType": "YulIdentifier", + "src": "3801:6:103" + }, + "nativeSrc": "3801:40:103", + "nodeType": "YulFunctionCall", + "src": "3801:40:103" + }, + "nativeSrc": "3798:60:103", + "nodeType": "YulIf", + "src": "3798:60:103" + }, + { + "nativeSrc": "3867:15:103", + "nodeType": "YulAssignment", + "src": "3867:15:103", + "value": { + "name": "value", + "nativeSrc": "3877:5:103", + "nodeType": "YulIdentifier", + "src": "3877:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "3867:6:103", + "nodeType": "YulIdentifier", + "src": "3867:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "3611:277:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3655:9:103", + "nodeType": "YulTypedName", + "src": "3655:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3666:7:103", + "nodeType": "YulTypedName", + "src": "3666:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3678:6:103", + "nodeType": "YulTypedName", + "src": "3678:6:103", + "type": "" + } + ], + "src": "3611:277:103" + }, + { + "body": { + "nativeSrc": "4067:223:103", + "nodeType": "YulBlock", + "src": "4067:223:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4084:9:103", + "nodeType": "YulIdentifier", + "src": "4084:9:103" + }, + { + "kind": "number", + "nativeSrc": "4095:2:103", + "nodeType": "YulLiteral", + "src": "4095:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4077:6:103", + "nodeType": "YulIdentifier", + "src": "4077:6:103" + }, + "nativeSrc": "4077:21:103", + "nodeType": "YulFunctionCall", + "src": "4077:21:103" + }, + "nativeSrc": "4077:21:103", + "nodeType": "YulExpressionStatement", + "src": "4077:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4118:9:103", + "nodeType": "YulIdentifier", + "src": "4118:9:103" + }, + { + "kind": "number", + "nativeSrc": "4129:2:103", + "nodeType": "YulLiteral", + "src": "4129:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4114:3:103", + "nodeType": "YulIdentifier", + "src": "4114:3:103" + }, + "nativeSrc": "4114:18:103", + "nodeType": "YulFunctionCall", + "src": "4114:18:103" + }, + { + "kind": "number", + "nativeSrc": "4134:2:103", + "nodeType": "YulLiteral", + "src": "4134:2:103", + "type": "", + "value": "33" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4107:6:103", + "nodeType": "YulIdentifier", + "src": "4107:6:103" + }, + "nativeSrc": "4107:30:103", + "nodeType": "YulFunctionCall", + "src": "4107:30:103" + }, + "nativeSrc": "4107:30:103", + "nodeType": "YulExpressionStatement", + "src": "4107:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4157:9:103", + "nodeType": "YulIdentifier", + "src": "4157:9:103" + }, + { + "kind": "number", + "nativeSrc": "4168:2:103", + "nodeType": "YulLiteral", + "src": "4168:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4153:3:103", + "nodeType": "YulIdentifier", + "src": "4153:3:103" + }, + "nativeSrc": "4153:18:103", + "nodeType": "YulFunctionCall", + "src": "4153:18:103" + }, + { + "hexValue": "5769746e65744465706c6f7965723a20616c72656164792070726f7869666965", + "kind": "string", + "nativeSrc": "4173:34:103", + "nodeType": "YulLiteral", + "src": "4173:34:103", + "type": "", + "value": "WitnetDeployer: already proxifie" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4146:6:103", + "nodeType": "YulIdentifier", + "src": "4146:6:103" + }, + "nativeSrc": "4146:62:103", + "nodeType": "YulFunctionCall", + "src": "4146:62:103" + }, + "nativeSrc": "4146:62:103", + "nodeType": "YulExpressionStatement", + "src": "4146:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4228:9:103", + "nodeType": "YulIdentifier", + "src": "4228:9:103" + }, + { + "kind": "number", + "nativeSrc": "4239:2:103", + "nodeType": "YulLiteral", + "src": "4239:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4224:3:103", + "nodeType": "YulIdentifier", + "src": "4224:3:103" + }, + "nativeSrc": "4224:18:103", + "nodeType": "YulFunctionCall", + "src": "4224:18:103" + }, + { + "hexValue": "64", + "kind": "string", + "nativeSrc": "4244:3:103", + "nodeType": "YulLiteral", + "src": "4244:3:103", + "type": "", + "value": "d" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4217:6:103", + "nodeType": "YulIdentifier", + "src": "4217:6:103" + }, + "nativeSrc": "4217:31:103", + "nodeType": "YulFunctionCall", + "src": "4217:31:103" + }, + "nativeSrc": "4217:31:103", + "nodeType": "YulExpressionStatement", + "src": "4217:31:103" + }, + { + "nativeSrc": "4257:27:103", + "nodeType": "YulAssignment", + "src": "4257:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4269:9:103", + "nodeType": "YulIdentifier", + "src": "4269:9:103" + }, + { + "kind": "number", + "nativeSrc": "4280:3:103", + "nodeType": "YulLiteral", + "src": "4280:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4265:3:103", + "nodeType": "YulIdentifier", + "src": "4265:3:103" + }, + "nativeSrc": "4265:19:103", + "nodeType": "YulFunctionCall", + "src": "4265:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4257:4:103", + "nodeType": "YulIdentifier", + "src": "4257:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "3893:397:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4044:9:103", + "nodeType": "YulTypedName", + "src": "4044:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "4058:4:103", + "nodeType": "YulTypedName", + "src": "4058:4:103", + "type": "" + } + ], + "src": "3893:397:103" + }, + { + "body": { + "nativeSrc": "4496:240:103", + "nodeType": "YulBlock", + "src": "4496:240:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4513:3:103", + "nodeType": "YulIdentifier", + "src": "4513:3:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4522:6:103", + "nodeType": "YulIdentifier", + "src": "4522:6:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4534:3:103", + "nodeType": "YulLiteral", + "src": "4534:3:103", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "4539:3:103", + "nodeType": "YulLiteral", + "src": "4539:3:103", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4530:3:103", + "nodeType": "YulIdentifier", + "src": "4530:3:103" + }, + "nativeSrc": "4530:13:103", + "nodeType": "YulFunctionCall", + "src": "4530:13:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4518:3:103", + "nodeType": "YulIdentifier", + "src": "4518:3:103" + }, + "nativeSrc": "4518:26:103", + "nodeType": "YulFunctionCall", + "src": "4518:26:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4506:6:103", + "nodeType": "YulIdentifier", + "src": "4506:6:103" + }, + "nativeSrc": "4506:39:103", + "nodeType": "YulFunctionCall", + "src": "4506:39:103" + }, + "nativeSrc": "4506:39:103", + "nodeType": "YulExpressionStatement", + "src": "4506:39:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4565:3:103", + "nodeType": "YulIdentifier", + "src": "4565:3:103" + }, + { + "kind": "number", + "nativeSrc": "4570:1:103", + "nodeType": "YulLiteral", + "src": "4570:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4561:3:103", + "nodeType": "YulIdentifier", + "src": "4561:3:103" + }, + "nativeSrc": "4561:11:103", + "nodeType": "YulFunctionCall", + "src": "4561:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4582:2:103", + "nodeType": "YulLiteral", + "src": "4582:2:103", + "type": "", + "value": "96" + }, + { + "name": "value1", + "nativeSrc": "4586:6:103", + "nodeType": "YulIdentifier", + "src": "4586:6:103" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4578:3:103", + "nodeType": "YulIdentifier", + "src": "4578:3:103" + }, + "nativeSrc": "4578:15:103", + "nodeType": "YulFunctionCall", + "src": "4578:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4599:26:103", + "nodeType": "YulLiteral", + "src": "4599:26:103", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "4595:3:103", + "nodeType": "YulIdentifier", + "src": "4595:3:103" + }, + "nativeSrc": "4595:31:103", + "nodeType": "YulFunctionCall", + "src": "4595:31:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4574:3:103", + "nodeType": "YulIdentifier", + "src": "4574:3:103" + }, + "nativeSrc": "4574:53:103", + "nodeType": "YulFunctionCall", + "src": "4574:53:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4554:6:103", + "nodeType": "YulIdentifier", + "src": "4554:6:103" + }, + "nativeSrc": "4554:74:103", + "nodeType": "YulFunctionCall", + "src": "4554:74:103" + }, + "nativeSrc": "4554:74:103", + "nodeType": "YulExpressionStatement", + "src": "4554:74:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4648:3:103", + "nodeType": "YulIdentifier", + "src": "4648:3:103" + }, + { + "kind": "number", + "nativeSrc": "4653:2:103", + "nodeType": "YulLiteral", + "src": "4653:2:103", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4644:3:103", + "nodeType": "YulIdentifier", + "src": "4644:3:103" + }, + "nativeSrc": "4644:12:103", + "nodeType": "YulFunctionCall", + "src": "4644:12:103" + }, + { + "name": "value2", + "nativeSrc": "4658:6:103", + "nodeType": "YulIdentifier", + "src": "4658:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4637:6:103", + "nodeType": "YulIdentifier", + "src": "4637:6:103" + }, + "nativeSrc": "4637:28:103", + "nodeType": "YulFunctionCall", + "src": "4637:28:103" + }, + "nativeSrc": "4637:28:103", + "nodeType": "YulExpressionStatement", + "src": "4637:28:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4685:3:103", + "nodeType": "YulIdentifier", + "src": "4685:3:103" + }, + { + "kind": "number", + "nativeSrc": "4690:2:103", + "nodeType": "YulLiteral", + "src": "4690:2:103", + "type": "", + "value": "53" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4681:3:103", + "nodeType": "YulIdentifier", + "src": "4681:3:103" + }, + "nativeSrc": "4681:12:103", + "nodeType": "YulFunctionCall", + "src": "4681:12:103" + }, + { + "name": "value3", + "nativeSrc": "4695:6:103", + "nodeType": "YulIdentifier", + "src": "4695:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4674:6:103", + "nodeType": "YulIdentifier", + "src": "4674:6:103" + }, + "nativeSrc": "4674:28:103", + "nodeType": "YulFunctionCall", + "src": "4674:28:103" + }, + "nativeSrc": "4674:28:103", + "nodeType": "YulExpressionStatement", + "src": "4674:28:103" + }, + { + "nativeSrc": "4711:19:103", + "nodeType": "YulAssignment", + "src": "4711:19:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4722:3:103", + "nodeType": "YulIdentifier", + "src": "4722:3:103" + }, + { + "kind": "number", + "nativeSrc": "4727:2:103", + "nodeType": "YulLiteral", + "src": "4727:2:103", + "type": "", + "value": "85" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4718:3:103", + "nodeType": "YulIdentifier", + "src": "4718:3:103" + }, + "nativeSrc": "4718:12:103", + "nodeType": "YulFunctionCall", + "src": "4718:12:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "4711:3:103", + "nodeType": "YulIdentifier", + "src": "4711:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "4295:441:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "4448:3:103", + "nodeType": "YulTypedName", + "src": "4448:3:103", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "4453:6:103", + "nodeType": "YulTypedName", + "src": "4453:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "4461:6:103", + "nodeType": "YulTypedName", + "src": "4461:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "4469:6:103", + "nodeType": "YulTypedName", + "src": "4469:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4477:6:103", + "nodeType": "YulTypedName", + "src": "4477:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "4488:3:103", + "nodeType": "YulTypedName", + "src": "4488:3:103", + "type": "" + } + ], + "src": "4295:441:103" + }, + { + "body": { + "nativeSrc": "5017:227:103", + "nodeType": "YulBlock", + "src": "5017:227:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5034:3:103", + "nodeType": "YulIdentifier", + "src": "5034:3:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5043:3:103", + "nodeType": "YulLiteral", + "src": "5043:3:103", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "5048:3:103", + "nodeType": "YulLiteral", + "src": "5048:3:103", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5039:3:103", + "nodeType": "YulIdentifier", + "src": "5039:3:103" + }, + "nativeSrc": "5039:13:103", + "nodeType": "YulFunctionCall", + "src": "5039:13:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5027:6:103", + "nodeType": "YulIdentifier", + "src": "5027:6:103" + }, + "nativeSrc": "5027:26:103", + "nodeType": "YulFunctionCall", + "src": "5027:26:103" + }, + "nativeSrc": "5027:26:103", + "nodeType": "YulExpressionStatement", + "src": "5027:26:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5073:3:103", + "nodeType": "YulIdentifier", + "src": "5073:3:103" + }, + { + "kind": "number", + "nativeSrc": "5078:1:103", + "nodeType": "YulLiteral", + "src": "5078:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5069:3:103", + "nodeType": "YulIdentifier", + "src": "5069:3:103" + }, + "nativeSrc": "5069:11:103", + "nodeType": "YulFunctionCall", + "src": "5069:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5090:2:103", + "nodeType": "YulLiteral", + "src": "5090:2:103", + "type": "", + "value": "96" + }, + { + "name": "value0", + "nativeSrc": "5094:6:103", + "nodeType": "YulIdentifier", + "src": "5094:6:103" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5086:3:103", + "nodeType": "YulIdentifier", + "src": "5086:3:103" + }, + "nativeSrc": "5086:15:103", + "nodeType": "YulFunctionCall", + "src": "5086:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5107:26:103", + "nodeType": "YulLiteral", + "src": "5107:26:103", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5103:3:103", + "nodeType": "YulIdentifier", + "src": "5103:3:103" + }, + "nativeSrc": "5103:31:103", + "nodeType": "YulFunctionCall", + "src": "5103:31:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5082:3:103", + "nodeType": "YulIdentifier", + "src": "5082:3:103" + }, + "nativeSrc": "5082:53:103", + "nodeType": "YulFunctionCall", + "src": "5082:53:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5062:6:103", + "nodeType": "YulIdentifier", + "src": "5062:6:103" + }, + "nativeSrc": "5062:74:103", + "nodeType": "YulFunctionCall", + "src": "5062:74:103" + }, + "nativeSrc": "5062:74:103", + "nodeType": "YulExpressionStatement", + "src": "5062:74:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5156:3:103", + "nodeType": "YulIdentifier", + "src": "5156:3:103" + }, + { + "kind": "number", + "nativeSrc": "5161:2:103", + "nodeType": "YulLiteral", + "src": "5161:2:103", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5152:3:103", + "nodeType": "YulIdentifier", + "src": "5152:3:103" + }, + "nativeSrc": "5152:12:103", + "nodeType": "YulFunctionCall", + "src": "5152:12:103" + }, + { + "name": "value1", + "nativeSrc": "5166:6:103", + "nodeType": "YulIdentifier", + "src": "5166:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5145:6:103", + "nodeType": "YulIdentifier", + "src": "5145:6:103" + }, + "nativeSrc": "5145:28:103", + "nodeType": "YulFunctionCall", + "src": "5145:28:103" + }, + "nativeSrc": "5145:28:103", + "nodeType": "YulExpressionStatement", + "src": "5145:28:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5193:3:103", + "nodeType": "YulIdentifier", + "src": "5193:3:103" + }, + { + "kind": "number", + "nativeSrc": "5198:2:103", + "nodeType": "YulLiteral", + "src": "5198:2:103", + "type": "", + "value": "53" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5189:3:103", + "nodeType": "YulIdentifier", + "src": "5189:3:103" + }, + "nativeSrc": "5189:12:103", + "nodeType": "YulFunctionCall", + "src": "5189:12:103" + }, + { + "name": "value2", + "nativeSrc": "5203:6:103", + "nodeType": "YulIdentifier", + "src": "5203:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5182:6:103", + "nodeType": "YulIdentifier", + "src": "5182:6:103" + }, + "nativeSrc": "5182:28:103", + "nodeType": "YulFunctionCall", + "src": "5182:28:103" + }, + "nativeSrc": "5182:28:103", + "nodeType": "YulExpressionStatement", + "src": "5182:28:103" + }, + { + "nativeSrc": "5219:19:103", + "nodeType": "YulAssignment", + "src": "5219:19:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5230:3:103", + "nodeType": "YulIdentifier", + "src": "5230:3:103" + }, + { + "kind": "number", + "nativeSrc": "5235:2:103", + "nodeType": "YulLiteral", + "src": "5235:2:103", + "type": "", + "value": "85" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5226:3:103", + "nodeType": "YulIdentifier", + "src": "5226:3:103" + }, + "nativeSrc": "5226:12:103", + "nodeType": "YulFunctionCall", + "src": "5226:12:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "5219:3:103", + "nodeType": "YulIdentifier", + "src": "5219:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9_t_address_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "4741:503:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "4977:3:103", + "nodeType": "YulTypedName", + "src": "4977:3:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "4982:6:103", + "nodeType": "YulTypedName", + "src": "4982:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "4990:6:103", + "nodeType": "YulTypedName", + "src": "4990:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4998:6:103", + "nodeType": "YulTypedName", + "src": "4998:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "5009:3:103", + "nodeType": "YulTypedName", + "src": "5009:3:103", + "type": "" + } + ], + "src": "4741:503:103" + }, + { + "body": { + "nativeSrc": "5570:197:103", + "nodeType": "YulBlock", + "src": "5570:197:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5587:3:103", + "nodeType": "YulIdentifier", + "src": "5587:3:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5596:3:103", + "nodeType": "YulLiteral", + "src": "5596:3:103", + "type": "", + "value": "242" + }, + { + "kind": "number", + "nativeSrc": "5601:5:103", + "nodeType": "YulLiteral", + "src": "5601:5:103", + "type": "", + "value": "13733" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5592:3:103", + "nodeType": "YulIdentifier", + "src": "5592:3:103" + }, + "nativeSrc": "5592:15:103", + "nodeType": "YulFunctionCall", + "src": "5592:15:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5580:6:103", + "nodeType": "YulIdentifier", + "src": "5580:6:103" + }, + "nativeSrc": "5580:28:103", + "nodeType": "YulFunctionCall", + "src": "5580:28:103" + }, + "nativeSrc": "5580:28:103", + "nodeType": "YulExpressionStatement", + "src": "5580:28:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5628:3:103", + "nodeType": "YulIdentifier", + "src": "5628:3:103" + }, + { + "kind": "number", + "nativeSrc": "5633:1:103", + "nodeType": "YulLiteral", + "src": "5633:1:103", + "type": "", + "value": "2" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5624:3:103", + "nodeType": "YulIdentifier", + "src": "5624:3:103" + }, + "nativeSrc": "5624:11:103", + "nodeType": "YulFunctionCall", + "src": "5624:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5645:2:103", + "nodeType": "YulLiteral", + "src": "5645:2:103", + "type": "", + "value": "96" + }, + { + "name": "value0", + "nativeSrc": "5649:6:103", + "nodeType": "YulIdentifier", + "src": "5649:6:103" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5641:3:103", + "nodeType": "YulIdentifier", + "src": "5641:3:103" + }, + "nativeSrc": "5641:15:103", + "nodeType": "YulFunctionCall", + "src": "5641:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5662:26:103", + "nodeType": "YulLiteral", + "src": "5662:26:103", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5658:3:103", + "nodeType": "YulIdentifier", + "src": "5658:3:103" + }, + "nativeSrc": "5658:31:103", + "nodeType": "YulFunctionCall", + "src": "5658:31:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5637:3:103", + "nodeType": "YulIdentifier", + "src": "5637:3:103" + }, + "nativeSrc": "5637:53:103", + "nodeType": "YulFunctionCall", + "src": "5637:53:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5617:6:103", + "nodeType": "YulIdentifier", + "src": "5617:6:103" + }, + "nativeSrc": "5617:74:103", + "nodeType": "YulFunctionCall", + "src": "5617:74:103" + }, + "nativeSrc": "5617:74:103", + "nodeType": "YulExpressionStatement", + "src": "5617:74:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5711:3:103", + "nodeType": "YulIdentifier", + "src": "5711:3:103" + }, + { + "kind": "number", + "nativeSrc": "5716:2:103", + "nodeType": "YulLiteral", + "src": "5716:2:103", + "type": "", + "value": "22" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5707:3:103", + "nodeType": "YulIdentifier", + "src": "5707:3:103" + }, + "nativeSrc": "5707:12:103", + "nodeType": "YulFunctionCall", + "src": "5707:12:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5725:3:103", + "nodeType": "YulLiteral", + "src": "5725:3:103", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "5730:1:103", + "nodeType": "YulLiteral", + "src": "5730:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "5721:3:103", + "nodeType": "YulIdentifier", + "src": "5721:3:103" + }, + "nativeSrc": "5721:11:103", + "nodeType": "YulFunctionCall", + "src": "5721:11:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5700:6:103", + "nodeType": "YulIdentifier", + "src": "5700:6:103" + }, + "nativeSrc": "5700:33:103", + "nodeType": "YulFunctionCall", + "src": "5700:33:103" + }, + "nativeSrc": "5700:33:103", + "nodeType": "YulExpressionStatement", + "src": "5700:33:103" + }, + { + "nativeSrc": "5742:19:103", + "nodeType": "YulAssignment", + "src": "5742:19:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5753:3:103", + "nodeType": "YulIdentifier", + "src": "5753:3:103" + }, + { + "kind": "number", + "nativeSrc": "5758:2:103", + "nodeType": "YulLiteral", + "src": "5758:2:103", + "type": "", + "value": "23" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5749:3:103", + "nodeType": "YulIdentifier", + "src": "5749:3:103" + }, + "nativeSrc": "5749:12:103", + "nodeType": "YulFunctionCall", + "src": "5749:12:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "5742:3:103", + "nodeType": "YulIdentifier", + "src": "5742:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_stringliteral_4fdc04d28c8d22070e5fd0f23f00bae0b21cc4e5091b5fd7a9cad9babd3668cf_t_address_t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2__to_t_string_memory_ptr_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "5249:518:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "5546:3:103", + "nodeType": "YulTypedName", + "src": "5546:3:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "5551:6:103", + "nodeType": "YulTypedName", + "src": "5551:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "5562:3:103", + "nodeType": "YulTypedName", + "src": "5562:3:103", + "type": "" + } + ], + "src": "5249:518:103" + }, + { + "body": { + "nativeSrc": "5946:180:103", + "nodeType": "YulBlock", + "src": "5946:180:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5963:9:103", + "nodeType": "YulIdentifier", + "src": "5963:9:103" + }, + { + "kind": "number", + "nativeSrc": "5974:2:103", + "nodeType": "YulLiteral", + "src": "5974:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5956:6:103", + "nodeType": "YulIdentifier", + "src": "5956:6:103" + }, + "nativeSrc": "5956:21:103", + "nodeType": "YulFunctionCall", + "src": "5956:21:103" + }, + "nativeSrc": "5956:21:103", + "nodeType": "YulExpressionStatement", + "src": "5956:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5997:9:103", + "nodeType": "YulIdentifier", + "src": "5997:9:103" + }, + { + "kind": "number", + "nativeSrc": "6008:2:103", + "nodeType": "YulLiteral", + "src": "6008:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5993:3:103", + "nodeType": "YulIdentifier", + "src": "5993:3:103" + }, + "nativeSrc": "5993:18:103", + "nodeType": "YulFunctionCall", + "src": "5993:18:103" + }, + { + "kind": "number", + "nativeSrc": "6013:2:103", + "nodeType": "YulLiteral", + "src": "6013:2:103", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5986:6:103", + "nodeType": "YulIdentifier", + "src": "5986:6:103" + }, + "nativeSrc": "5986:30:103", + "nodeType": "YulFunctionCall", + "src": "5986:30:103" + }, + "nativeSrc": "5986:30:103", + "nodeType": "YulExpressionStatement", + "src": "5986:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6036:9:103", + "nodeType": "YulIdentifier", + "src": "6036:9:103" + }, + { + "kind": "number", + "nativeSrc": "6047:2:103", + "nodeType": "YulLiteral", + "src": "6047:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6032:3:103", + "nodeType": "YulIdentifier", + "src": "6032:3:103" + }, + "nativeSrc": "6032:18:103", + "nodeType": "YulFunctionCall", + "src": "6032:18:103" + }, + { + "hexValue": "437265617465333a2074617267657420616c726561647920657869737473", + "kind": "string", + "nativeSrc": "6052:32:103", + "nodeType": "YulLiteral", + "src": "6052:32:103", + "type": "", + "value": "Create3: target already exists" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6025:6:103", + "nodeType": "YulIdentifier", + "src": "6025:6:103" + }, + "nativeSrc": "6025:60:103", + "nodeType": "YulFunctionCall", + "src": "6025:60:103" + }, + "nativeSrc": "6025:60:103", + "nodeType": "YulExpressionStatement", + "src": "6025:60:103" + }, + { + "nativeSrc": "6094:26:103", + "nodeType": "YulAssignment", + "src": "6094:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6106:9:103", + "nodeType": "YulIdentifier", + "src": "6106:9:103" + }, + { + "kind": "number", + "nativeSrc": "6117:2:103", + "nodeType": "YulLiteral", + "src": "6117:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6102:3:103", + "nodeType": "YulIdentifier", + "src": "6102:3:103" + }, + "nativeSrc": "6102:18:103", + "nodeType": "YulFunctionCall", + "src": "6102:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6094:4:103", + "nodeType": "YulIdentifier", + "src": "6094:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_eff5890756d2c5621f001169bb16c941329db031eba2edbb4865370c160b3eae__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "5772:354:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "5923:9:103", + "nodeType": "YulTypedName", + "src": "5923:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "5937:4:103", + "nodeType": "YulTypedName", + "src": "5937:4:103", + "type": "" + } + ], + "src": "5772:354:103" + }, + { + "body": { + "nativeSrc": "6305:181:103", + "nodeType": "YulBlock", + "src": "6305:181:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6322:9:103", + "nodeType": "YulIdentifier", + "src": "6322:9:103" + }, + { + "kind": "number", + "nativeSrc": "6333:2:103", + "nodeType": "YulLiteral", + "src": "6333:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6315:6:103", + "nodeType": "YulIdentifier", + "src": "6315:6:103" + }, + "nativeSrc": "6315:21:103", + "nodeType": "YulFunctionCall", + "src": "6315:21:103" + }, + "nativeSrc": "6315:21:103", + "nodeType": "YulExpressionStatement", + "src": "6315:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6356:9:103", + "nodeType": "YulIdentifier", + "src": "6356:9:103" + }, + { + "kind": "number", + "nativeSrc": "6367:2:103", + "nodeType": "YulLiteral", + "src": "6367:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6352:3:103", + "nodeType": "YulIdentifier", + "src": "6352:3:103" + }, + "nativeSrc": "6352:18:103", + "nodeType": "YulFunctionCall", + "src": "6352:18:103" + }, + { + "kind": "number", + "nativeSrc": "6372:2:103", + "nodeType": "YulLiteral", + "src": "6372:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6345:6:103", + "nodeType": "YulIdentifier", + "src": "6345:6:103" + }, + "nativeSrc": "6345:30:103", + "nodeType": "YulFunctionCall", + "src": "6345:30:103" + }, + "nativeSrc": "6345:30:103", + "nodeType": "YulExpressionStatement", + "src": "6345:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6395:9:103", + "nodeType": "YulIdentifier", + "src": "6395:9:103" + }, + { + "kind": "number", + "nativeSrc": "6406:2:103", + "nodeType": "YulLiteral", + "src": "6406:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6391:3:103", + "nodeType": "YulIdentifier", + "src": "6391:3:103" + }, + "nativeSrc": "6391:18:103", + "nodeType": "YulFunctionCall", + "src": "6391:18:103" + }, + { + "hexValue": "437265617465333a206572726f72206372656174696e6720666163746f7279", + "kind": "string", + "nativeSrc": "6411:33:103", + "nodeType": "YulLiteral", + "src": "6411:33:103", + "type": "", + "value": "Create3: error creating factory" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6384:6:103", + "nodeType": "YulIdentifier", + "src": "6384:6:103" + }, + "nativeSrc": "6384:61:103", + "nodeType": "YulFunctionCall", + "src": "6384:61:103" + }, + "nativeSrc": "6384:61:103", + "nodeType": "YulExpressionStatement", + "src": "6384:61:103" + }, + { + "nativeSrc": "6454:26:103", + "nodeType": "YulAssignment", + "src": "6454:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6466:9:103", + "nodeType": "YulIdentifier", + "src": "6466:9:103" + }, + { + "kind": "number", + "nativeSrc": "6477:2:103", + "nodeType": "YulLiteral", + "src": "6477:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6462:3:103", + "nodeType": "YulIdentifier", + "src": "6462:3:103" + }, + "nativeSrc": "6462:18:103", + "nodeType": "YulFunctionCall", + "src": "6462:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6454:4:103", + "nodeType": "YulIdentifier", + "src": "6454:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_9c800ce8d486c3397a1a9cc324cfcd264ced53e7b922ccf3390ef85c645102b0__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "6131:355:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6282:9:103", + "nodeType": "YulTypedName", + "src": "6282:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "6296:4:103", + "nodeType": "YulTypedName", + "src": "6296:4:103", + "type": "" + } + ], + "src": "6131:355:103" + }, + { + "body": { + "nativeSrc": "6628:150:103", + "nodeType": "YulBlock", + "src": "6628:150:103", + "statements": [ + { + "nativeSrc": "6638:27:103", + "nodeType": "YulVariableDeclaration", + "src": "6638:27:103", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6658:6:103", + "nodeType": "YulIdentifier", + "src": "6658:6:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "6652:5:103", + "nodeType": "YulIdentifier", + "src": "6652:5:103" + }, + "nativeSrc": "6652:13:103", + "nodeType": "YulFunctionCall", + "src": "6652:13:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "6642:6:103", + "nodeType": "YulTypedName", + "src": "6642:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6713:6:103", + "nodeType": "YulIdentifier", + "src": "6713:6:103" + }, + { + "kind": "number", + "nativeSrc": "6721:4:103", + "nodeType": "YulLiteral", + "src": "6721:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6709:3:103", + "nodeType": "YulIdentifier", + "src": "6709:3:103" + }, + "nativeSrc": "6709:17:103", + "nodeType": "YulFunctionCall", + "src": "6709:17:103" + }, + { + "name": "pos", + "nativeSrc": "6728:3:103", + "nodeType": "YulIdentifier", + "src": "6728:3:103" + }, + { + "name": "length", + "nativeSrc": "6733:6:103", + "nodeType": "YulIdentifier", + "src": "6733:6:103" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "6674:34:103", + "nodeType": "YulIdentifier", + "src": "6674:34:103" + }, + "nativeSrc": "6674:66:103", + "nodeType": "YulFunctionCall", + "src": "6674:66:103" + }, + "nativeSrc": "6674:66:103", + "nodeType": "YulExpressionStatement", + "src": "6674:66:103" + }, + { + "nativeSrc": "6749:23:103", + "nodeType": "YulAssignment", + "src": "6749:23:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "6760:3:103", + "nodeType": "YulIdentifier", + "src": "6760:3:103" + }, + { + "name": "length", + "nativeSrc": "6765:6:103", + "nodeType": "YulIdentifier", + "src": "6765:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6756:3:103", + "nodeType": "YulIdentifier", + "src": "6756:3:103" + }, + "nativeSrc": "6756:16:103", + "nodeType": "YulFunctionCall", + "src": "6756:16:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "6749:3:103", + "nodeType": "YulIdentifier", + "src": "6749:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "6491:287:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "6604:3:103", + "nodeType": "YulTypedName", + "src": "6604:3:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "6609:6:103", + "nodeType": "YulTypedName", + "src": "6609:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "6620:3:103", + "nodeType": "YulTypedName", + "src": "6620:3:103", + "type": "" + } + ], + "src": "6491:287:103" + }, + { + "body": { + "nativeSrc": "6957:180:103", + "nodeType": "YulBlock", + "src": "6957:180:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6974:9:103", + "nodeType": "YulIdentifier", + "src": "6974:9:103" + }, + { + "kind": "number", + "nativeSrc": "6985:2:103", + "nodeType": "YulLiteral", + "src": "6985:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6967:6:103", + "nodeType": "YulIdentifier", + "src": "6967:6:103" + }, + "nativeSrc": "6967:21:103", + "nodeType": "YulFunctionCall", + "src": "6967:21:103" + }, + "nativeSrc": "6967:21:103", + "nodeType": "YulExpressionStatement", + "src": "6967:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7008:9:103", + "nodeType": "YulIdentifier", + "src": "7008:9:103" + }, + { + "kind": "number", + "nativeSrc": "7019:2:103", + "nodeType": "YulLiteral", + "src": "7019:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7004:3:103", + "nodeType": "YulIdentifier", + "src": "7004:3:103" + }, + "nativeSrc": "7004:18:103", + "nodeType": "YulFunctionCall", + "src": "7004:18:103" + }, + { + "kind": "number", + "nativeSrc": "7024:2:103", + "nodeType": "YulLiteral", + "src": "7024:2:103", + "type": "", + "value": "30" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6997:6:103", + "nodeType": "YulIdentifier", + "src": "6997:6:103" + }, + "nativeSrc": "6997:30:103", + "nodeType": "YulFunctionCall", + "src": "6997:30:103" + }, + "nativeSrc": "6997:30:103", + "nodeType": "YulExpressionStatement", + "src": "6997:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7047:9:103", + "nodeType": "YulIdentifier", + "src": "7047:9:103" + }, + { + "kind": "number", + "nativeSrc": "7058:2:103", + "nodeType": "YulLiteral", + "src": "7058:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7043:3:103", + "nodeType": "YulIdentifier", + "src": "7043:3:103" + }, + "nativeSrc": "7043:18:103", + "nodeType": "YulFunctionCall", + "src": "7043:18:103" + }, + { + "hexValue": "437265617465333a206572726f72206372656174696e6720746172676574", + "kind": "string", + "nativeSrc": "7063:32:103", + "nodeType": "YulLiteral", + "src": "7063:32:103", + "type": "", + "value": "Create3: error creating target" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7036:6:103", + "nodeType": "YulIdentifier", + "src": "7036:6:103" + }, + "nativeSrc": "7036:60:103", + "nodeType": "YulFunctionCall", + "src": "7036:60:103" + }, + "nativeSrc": "7036:60:103", + "nodeType": "YulExpressionStatement", + "src": "7036:60:103" + }, + { + "nativeSrc": "7105:26:103", + "nodeType": "YulAssignment", + "src": "7105:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7117:9:103", + "nodeType": "YulIdentifier", + "src": "7117:9:103" + }, + { + "kind": "number", + "nativeSrc": "7128:2:103", + "nodeType": "YulLiteral", + "src": "7128:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7113:3:103", + "nodeType": "YulIdentifier", + "src": "7113:3:103" + }, + "nativeSrc": "7113:18:103", + "nodeType": "YulFunctionCall", + "src": "7113:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7105:4:103", + "nodeType": "YulIdentifier", + "src": "7105:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1398d0fda5c4dd82767513d52fb4e190bf03bb7a57b33af8f2bf0a3f254cffa0__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "6783:354:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6934:9:103", + "nodeType": "YulTypedName", + "src": "6934:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "6948:4:103", + "nodeType": "YulTypedName", + "src": "6948:4:103", + "type": "" + } + ], + "src": "6783:354:103" + } + ] + }, + "contents": "{\n { }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n let _2 := 0xffffffffffffffff\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n mstore(add(add(memPtr, _1), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value1 := value\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n }\n function abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 33)\n mstore(add(headStart, 64), \"WitnetDeployer: deployment faile\")\n mstore(add(headStart, 96), \"d\")\n tail := add(headStart, 128)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n mstore(add(headStart, 32), 64)\n let length := mload(value1)\n mstore(add(headStart, 64), length)\n copy_memory_to_memory_with_cleanup(add(value1, 32), add(headStart, 96), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 33)\n mstore(add(headStart, 64), \"WitnetDeployer: already proxifie\")\n mstore(add(headStart, 96), \"d\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, and(value0, shl(248, 255)))\n mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 21), value2)\n mstore(add(pos, 53), value3)\n end := add(pos, 85)\n }\n function abi_encode_tuple_packed_t_stringliteral_8b1a944cf13a9a1c08facb2c9e98623ef3254d2ddb48113885c3e8e97fec8db9_t_address_t_bytes32_t_bytes32__to_t_string_memory_ptr_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, shl(248, 255))\n mstore(add(pos, 1), and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 21), value1)\n mstore(add(pos, 53), value2)\n end := add(pos, 85)\n }\n function abi_encode_tuple_packed_t_stringliteral_4fdc04d28c8d22070e5fd0f23f00bae0b21cc4e5091b5fd7a9cad9babd3668cf_t_address_t_stringliteral_5fe7f977e71dba2ea1a68e21057beebb9be2ac30c6410aa38d4f3fbe41dcffd2__to_t_string_memory_ptr_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n mstore(pos, shl(242, 13733))\n mstore(add(pos, 2), and(shl(96, value0), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 22), shl(248, 1))\n end := add(pos, 23)\n }\n function abi_encode_tuple_t_stringliteral_eff5890756d2c5621f001169bb16c941329db031eba2edbb4865370c160b3eae__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Create3: target already exists\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_9c800ce8d486c3397a1a9cc324cfcd264ced53e7b922ccf3390ef85c645102b0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"Create3: error creating factory\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_1398d0fda5c4dd82767513d52fb4e190bf03bb7a57b33af8f2bf0a3f254cffa0__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 30)\n mstore(add(headStart, 64), \"Create3: error creating target\")\n tail := add(headStart, 96)\n }\n}", + "id": 103, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "356:2917:18:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "356:2917:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2119:159;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:103;;;345:51;;333:2;318:18;2119:159:18;;;;;;;900:448;;;;;;:::i;:::-;;:::i;2286:982::-;;;;;;:::i;:::-;;:::i;1694:417::-;;;;;;:::i;:::-;;:::i;2119:159::-;2210:7;2242:28;2264:5;2242:21;:28::i;:::-;2235:35;2119:159;-1:-1:-1;;2119:159:18:o;900:448::-;997:17;1044:31;1058:9;1069:5;1044:13;:31::i;:::-;1032:43;;1090:9;-1:-1:-1;;;;;1090:21:18;;1115:1;1090:26;1086:255;;1225:5;1213:9;1207:16;1200:4;1189:9;1185:20;1182:1;1174:57;1161:70;-1:-1:-1;;;;;;1268:23:18;;1260:69;;;;-1:-1:-1;;;1260:69:18;;2660:2:103;1260:69:18;;;2642:21:103;2699:2;2679:18;;;2672:30;2738:34;2718:18;;;2711:62;-1:-1:-1;;;2789:18:103;;;2782:31;2830:19;;1260:69:18;;;;;;;;2286:982;2422:11;2451:18;2472:30;2491:10;2472:18;:30::i;:::-;2451:51;;2517:10;-1:-1:-1;;;;;2517:22:18;;2543:1;2517:27;2513:748;;2600:58;2615:10;2627:30;;;;;;;;:::i;:::-;-1:-1:-1;;2627:30:18;;;;;;;;;;;;;;2600:14;:58::i;:::-;;2746:10;-1:-1:-1;;;;;2726:42:18;;2787:20;2978:10;3076:9;2876:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2726:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3161:10:18;-1:-1:-1;3134:39:18;;2513:748;3206:43;;-1:-1:-1;;;3206:43:18;;4095:2:103;3206:43:18;;;4077:21:103;4134:2;4114:18;;;4107:30;4173:34;4153:18;;;4146:62;-1:-1:-1;;;4224:18:103;;;4217:31;4265:19;;3206:43:18;3893:397:103;2286:982:18;;;;;;:::o;1694:417::-;2036:20;;;;;;;1898:177;;;-1:-1:-1;;;;;;1898:177:18;;;4506:39:103;1980:4:18;4582:2:103;4578:15;-1:-1:-1;;4574:53:103;4561:11;;;4554:74;4644:12;;;4637:28;;;;4681:12;;;;4674:28;;;;1898:177:18;;;;;;;;;;4718:12:103;;;;1898:177:18;;;1870:220;;;;;;1694:417::o;5013:1163:75:-;2439:24;;;;;;;;;;;-1:-1:-1;;;2439:24:75;;;;;5227:216;;-1:-1:-1;;;;;;5227:216:75;;;5027:26:103;5320:4:75;5090:2:103;5086:15;;;-1:-1:-1;;5082:53:103;;;5069:11;;;5062:74;5152:12;;;5145:28;;;;2429:35:75;5189:12:103;;;;5182:28;;;;5227:216:75;;;;;;;;;;5226:12:103;;;5227:216:75;;5191:275;;;;;;-1:-1:-1;;;5643:457:75;;;5580:28:103;5641:15;;5637:53;;;5624:11;;;5617:74;-1:-1:-1;;;5707:12:103;;;5700:33;5643:457:75;;;;;;;;;5749:12:103;;;;5643:457:75;;;5607:516;;;;;;5013:1163::o;2865:167::-;2961:7;2993:31;3000:5;3007:13;3022:1;3626:17;3710:20;3724:5;3710:13;:20::i;:::-;3698:32;-1:-1:-1;;;;;;3745:21:75;;;:26;3741:72;;3773:40;;-1:-1:-1;;;3773:40:75;;5974:2:103;3773:40:75;;;5956:21:103;6013:2;5993:18;;;5986:30;6052:32;6032:18;;;6025:60;6102:18;;3773:40:75;5772:354:103;3741:72:75;3912:24;;;;;;;;;;;;;-1:-1:-1;;;3912:24:75;;;;;;3853:16;;3912:24;4254:5;;3853:16;4191:69;4179:81;-1:-1:-1;;;;;;4289:22:75;;4281:66;;;;-1:-1:-1;;;4281:66:75;;6333:2:103;4281:66:75;;;6315:21:103;6372:2;6352:18;;;6345:30;6411:33;6391:18;;;6384:61;6462:18;;4281:66:75;6131:355:103;4281:66:75;4409:13;4428:8;-1:-1:-1;;;;;4428:13:75;4449:6;4457:13;4428:43;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4408:63;;;4490:8;:38;;;;-1:-1:-1;;;;;;4502:21:75;;;:26;;4490:38;4482:81;;;;-1:-1:-1;;;4482:81:75;;6985:2:103;4482:81:75;;;6967:21:103;7024:2;7004:18;;;6997:30;7063:32;7043:18;;;7036:60;7113:18;;4482:81:75;6783:354:103;4482:81:75;3650:921;;;3515:1056;;;;;:::o;-1:-1:-1:-;;;;;;;;:::o;14:180:103:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:103;;14:180;-1:-1:-1;14:180:103:o;407:127::-;468:10;463:3;459:20;456:1;449:31;499:4;496:1;489:15;523:4;520:1;513:15;539:718;581:5;634:3;627:4;619:6;615:17;611:27;601:55;;652:1;649;642:12;601:55;688:6;675:20;714:18;751:2;747;744:10;741:36;;;757:18;;:::i;:::-;832:2;826:9;800:2;886:13;;-1:-1:-1;;882:22:103;;;906:2;878:31;874:40;862:53;;;930:18;;;950:22;;;927:46;924:72;;;976:18;;:::i;:::-;1016:10;1012:2;1005:22;1051:2;1043:6;1036:18;1097:3;1090:4;1085:2;1077:6;1073:15;1069:26;1066:35;1063:55;;;1114:1;1111;1104:12;1063:55;1178:2;1171:4;1163:6;1159:17;1152:4;1144:6;1140:17;1127:54;1225:1;1218:4;1213:2;1205:6;1201:15;1197:26;1190:37;1245:6;1236:15;;;;;;539:718;;;;:::o;1262:388::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1456:9;1443:23;1489:18;1481:6;1478:30;1475:50;;;1521:1;1518;1511:12;1475:50;1544:49;1585:7;1576:6;1565:9;1561:22;1544:49;:::i;:::-;1534:59;1640:2;1625:18;;;;1612:32;;-1:-1:-1;;;;1262:388:103:o;1655:562::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:23;;;-1:-1:-1;1922:2:103;1907:18;;1894:32;-1:-1:-1;;;;;1955:31:103;;1945:42;;1935:70;;2001:1;1998;1991:12;1935:70;2024:5;-1:-1:-1;2080:2:103;2065:18;;2052:32;2107:18;2096:30;;2093:50;;;2139:1;2136;2129:12;2093:50;2162:49;2203:7;2194:6;2183:9;2179:22;2162:49;:::i;:::-;2152:59;;;1655:562;;;;;:::o;2860:250::-;2945:1;2955:113;2969:6;2966:1;2963:13;2955:113;;;3045:11;;;3039:18;3026:11;;;3019:39;2991:2;2984:10;2955:113;;;-1:-1:-1;;3102:1:103;3084:16;;3077:27;2860:250::o;3115:491::-;3319:1;3315;3310:3;3306:11;3302:19;3294:6;3290:32;3279:9;3272:51;3359:2;3354;3343:9;3339:18;3332:30;3253:4;3391:6;3385:13;3434:6;3429:2;3418:9;3414:18;3407:34;3450:79;3522:6;3517:2;3506:9;3502:18;3497:2;3489:6;3485:15;3450:79;:::i;:::-;3590:2;3569:15;-1:-1:-1;;3565:29:103;3550:45;;;;3597:2;3546:54;;3115:491;-1:-1:-1;;;3115:491:103:o;3611:277::-;3678:6;3731:2;3719:9;3710:7;3706:23;3702:32;3699:52;;;3747:1;3744;3737:12;3699:52;3779:9;3773:16;3832:5;3825:13;3818:21;3811:5;3808:32;3798:60;;3854:1;3851;3844:12;6491:287;6620:3;6658:6;6652:13;6674:66;6733:6;6728:3;6721:4;6713:6;6709:17;6674:66;:::i;:::-;6756:16;;;;;6491:287;-1:-1:-1;;6491:287:103:o", + "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"./WitnetProxy.sol\";\r\n\r\nimport \"../libs/Create3.sol\";\r\n\r\n/// @notice WitnetDeployer contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, \r\n/// @notice and CREATE3 (EIP-3171) factory for Witnet proxies.\r\n/// @author Guillermo Díaz \r\n\r\ncontract WitnetDeployer {\r\n\r\n /// @notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \r\n /// @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\r\n /// @dev nor the nonce of the caller (i.e. see EIP-1014). \r\n /// @param _initCode Creation code, including construction logic and input parameters.\r\n /// @param _salt Arbitrary value to modify resulting address.\r\n /// @return _deployed Just deployed contract address.\r\n function deploy(bytes memory _initCode, bytes32 _salt)\r\n virtual public\r\n returns (address _deployed)\r\n {\r\n _deployed = determineAddr(_initCode, _salt);\r\n if (_deployed.code.length == 0) {\r\n assembly {\r\n _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt)\r\n }\r\n require(_deployed != address(0), \"WitnetDeployer: deployment failed\");\r\n }\r\n }\r\n\r\n /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\r\n /// @param _initCode Creation code, including construction logic and input parameters.\r\n /// @param _salt Arbitrary value to modify resulting address.\r\n /// @return Deterministic contract address.\r\n function determineAddr(bytes memory _initCode, bytes32 _salt)\r\n virtual public view\r\n returns (address)\r\n {\r\n return address(\r\n uint160(uint(keccak256(\r\n abi.encodePacked(\r\n bytes1(0xff),\r\n address(this),\r\n _salt,\r\n keccak256(_initCode)\r\n )\r\n )))\r\n );\r\n }\r\n\r\n function determineProxyAddr(bytes32 _salt) \r\n virtual public view\r\n returns (address)\r\n {\r\n return Create3.determineAddr(_salt);\r\n }\r\n\r\n function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n virtual external \r\n returns (WitnetProxy)\r\n {\r\n address _proxyAddr = determineProxyAddr(_proxySalt);\r\n if (_proxyAddr.code.length == 0) {\r\n // deploy the WitnetProxy\r\n Create3.deploy(_proxySalt, type(WitnetProxy).creationCode);\r\n // settle first implementation address,\r\n WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n _firstImplementation, \r\n // and initialize it, providing\r\n abi.encode(\r\n // the owner (i.e. the caller of this function)\r\n msg.sender,\r\n // and some (optional) initialization data\r\n _initData\r\n )\r\n );\r\n return WitnetProxy(payable(_proxyAddr));\r\n } else {\r\n revert(\"WitnetDeployer: already proxified\");\r\n }\r\n }\r\n\r\n}", + "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetDeployer.sol", + "ast": { + "absolutePath": "project:/contracts/core/WitnetDeployer.sol", + "exportedSymbols": { + "Create3": [ + 17522 + ], + "ERC165": [ + 602 + ], + "IERC165": [ + 614 + ], + "Initializable": [ + 253 + ], + "Proxiable": [ + 30273 + ], + "Upgradeable": [ + 30388 + ], + "WitnetDeployer": [ + 4262 + ], + "WitnetProxy": [ + 4713 + ] + }, + "id": 4263, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4107, + "literals": [ + "solidity", + ">=", + "0.8", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "35:31:18" + }, + { + "absolutePath": "project:/contracts/core/WitnetProxy.sol", + "file": "./WitnetProxy.sol", + "id": 4108, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4263, + "sourceUnit": 4714, + "src": "70:27:18", + "symbolAliases": [], + "unitAlias": "" + }, + { + "absolutePath": "project:/contracts/libs/Create3.sol", + "file": "../libs/Create3.sol", + "id": 4109, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4263, + "sourceUnit": 17523, + "src": "101:29:18", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "WitnetDeployer", + "contractDependencies": [ + 4713 + ], + "contractKind": "contract", + "documentation": { + "id": 4110, + "nodeType": "StructuredDocumentation", + "src": "134:220:18", + "text": "@notice WitnetDeployer contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, \n @notice and CREATE3 (EIP-3171) factory for Witnet proxies.\n @author Guillermo Díaz " + }, + "fullyImplemented": true, + "id": 4262, + "linearizedBaseContracts": [ + 4262 + ], + "name": "WitnetDeployer", + "nameLocation": "365:14:18", + "nodeType": "ContractDefinition", + "nodes": [ + { + "body": { + "id": 4145, + "nodeType": "Block", + "src": "1021:327:18", + "statements": [ + { + "expression": { + "id": 4125, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 4120, + "name": "_deployed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4118, + "src": "1032:9:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 4122, + "name": "_initCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4113, + "src": "1058:9:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 4123, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4115, + "src": "1069:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4121, + "name": "determineAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4184, + "src": "1044:13:18", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes memory,bytes32) view returns (address)" + } + }, + "id": 4124, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1044:31:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1032:43:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4126, + "nodeType": "ExpressionStatement", + "src": "1032:43:18" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4131, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4127, + "name": "_deployed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4118, + "src": "1090:9:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4128, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1100:4:18", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "1090:14:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4129, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1105:6:18", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1090:21:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4130, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1115:1:18", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1090:26:18", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4144, + "nodeType": "IfStatement", + "src": "1086:255:18", + "trueBody": { + "id": 4143, + "nodeType": "Block", + "src": "1118:223:18", + "statements": [ + { + "AST": { + "nativeSrc": "1142:104:18", + "nodeType": "YulBlock", + "src": "1142:104:18", + "statements": [ + { + "nativeSrc": "1161:70:18", + "nodeType": "YulAssignment", + "src": "1161:70:18", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1182:1:18", + "nodeType": "YulLiteral", + "src": "1182:1:18", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "name": "_initCode", + "nativeSrc": "1189:9:18", + "nodeType": "YulIdentifier", + "src": "1189:9:18" + }, + { + "kind": "number", + "nativeSrc": "1200:4:18", + "nodeType": "YulLiteral", + "src": "1200:4:18", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1185:3:18", + "nodeType": "YulIdentifier", + "src": "1185:3:18" + }, + "nativeSrc": "1185:20:18", + "nodeType": "YulFunctionCall", + "src": "1185:20:18" + }, + { + "arguments": [ + { + "name": "_initCode", + "nativeSrc": "1213:9:18", + "nodeType": "YulIdentifier", + "src": "1213:9:18" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1207:5:18", + "nodeType": "YulIdentifier", + "src": "1207:5:18" + }, + "nativeSrc": "1207:16:18", + "nodeType": "YulFunctionCall", + "src": "1207:16:18" + }, + { + "name": "_salt", + "nativeSrc": "1225:5:18", + "nodeType": "YulIdentifier", + "src": "1225:5:18" + } + ], + "functionName": { + "name": "create2", + "nativeSrc": "1174:7:18", + "nodeType": "YulIdentifier", + "src": "1174:7:18" + }, + "nativeSrc": "1174:57:18", + "nodeType": "YulFunctionCall", + "src": "1174:57:18" + }, + "variableNames": [ + { + "name": "_deployed", + "nativeSrc": "1161:9:18", + "nodeType": "YulIdentifier", + "src": "1161:9:18" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 4118, + "isOffset": false, + "isSlot": false, + "src": "1161:9:18", + "valueSize": 1 + }, + { + "declaration": 4113, + "isOffset": false, + "isSlot": false, + "src": "1189:9:18", + "valueSize": 1 + }, + { + "declaration": 4113, + "isOffset": false, + "isSlot": false, + "src": "1213:9:18", + "valueSize": 1 + }, + { + "declaration": 4115, + "isOffset": false, + "isSlot": false, + "src": "1225:5:18", + "valueSize": 1 + } + ], + "id": 4132, + "nodeType": "InlineAssembly", + "src": "1133:113:18" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4139, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4134, + "name": "_deployed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4118, + "src": "1268:9:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4137, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1289:1:18", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 4136, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1281:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4135, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1281:7:18", + "typeDescriptions": {} + } + }, + "id": 4138, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1281:10:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1268:23:18", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c6564", + "id": 4140, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1293:35:18", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f", + "typeString": "literal_string \"WitnetDeployer: deployment failed\"" + }, + "value": "WitnetDeployer: deployment failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f", + "typeString": "literal_string \"WitnetDeployer: deployment failed\"" + } + ], + "id": 4133, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "1260:7:18", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4141, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1260:69:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4142, + "nodeType": "ExpressionStatement", + "src": "1260:69:18" + } + ] + } + } + ] + }, + "documentation": { + "id": 4111, + "nodeType": "StructuredDocumentation", + "src": "389:505:18", + "text": "@notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \n @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address\n @dev nor the nonce of the caller (i.e. see EIP-1014). \n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return _deployed Just deployed contract address." + }, + "functionSelector": "4af63f02", + "id": 4146, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deploy", + "nameLocation": "909:6:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4116, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4113, + "mutability": "mutable", + "name": "_initCode", + "nameLocation": "929:9:18", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "916:22:18", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4112, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "916:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4115, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "948:5:18", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "940:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4114, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "940:7:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "915:39:18" + }, + "returnParameters": { + "id": 4119, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4118, + "mutability": "mutable", + "name": "_deployed", + "nameLocation": "1005:9:18", + "nodeType": "VariableDeclaration", + "scope": 4146, + "src": "997:17:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4117, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "997:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "996:19:18" + }, + "scope": 4262, + "src": "900:448:18", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4183, + "nodeType": "Block", + "src": "1817:294:18", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30786666", + "id": 4167, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1944:4:18", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "0xff" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + } + ], + "id": 4166, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1937:6:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": { + "id": 4165, + "name": "bytes1", + "nodeType": "ElementaryTypeName", + "src": "1937:6:18", + "typeDescriptions": {} + } + }, + "id": 4168, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1937:12:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "arguments": [ + { + "id": 4171, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "1980:4:18", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetDeployer_$4262", + "typeString": "contract WitnetDeployer" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_WitnetDeployer_$4262", + "typeString": "contract WitnetDeployer" + } + ], + "id": 4170, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1972:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4169, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1972:7:18", + "typeDescriptions": {} + } + }, + "id": 4172, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1972:13:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4173, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4151, + "src": "2008:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 4175, + "name": "_initCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4149, + "src": "2046:9:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4174, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "2036:9:18", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4176, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2036:20:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 4163, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1898:3:18", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4164, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1902:12:18", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "1898:16:18", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4177, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1898:177:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4162, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "1870:9:18", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1870:220:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4161, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1865:4:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 4160, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "1865:4:18", + "typeDescriptions": {} + } + }, + "id": 4179, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1865:226:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1857:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 4158, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "1857:7:18", + "typeDescriptions": {} + } + }, + "id": 4180, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1857:235:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + ], + "id": 4157, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1835:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4156, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1835:7:18", + "typeDescriptions": {} + } + }, + "id": 4181, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1835:268:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4155, + "id": 4182, + "nodeType": "Return", + "src": "1828:275:18" + } + ] + }, + "documentation": { + "id": 4147, + "nodeType": "StructuredDocumentation", + "src": "1356:332:18", + "text": "@notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return Deterministic contract address." + }, + "functionSelector": "d3933c29", + "id": 4184, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "determineAddr", + "nameLocation": "1703:13:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4152, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4149, + "mutability": "mutable", + "name": "_initCode", + "nameLocation": "1730:9:18", + "nodeType": "VariableDeclaration", + "scope": 4184, + "src": "1717:22:18", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4148, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1717:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4151, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "1749:5:18", + "nodeType": "VariableDeclaration", + "scope": 4184, + "src": "1741:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4150, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1741:7:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1716:39:18" + }, + "returnParameters": { + "id": 4155, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4154, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4184, + "src": "1803:7:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4153, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1803:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1802:9:18" + }, + "scope": 4262, + "src": "1694:417:18", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4196, + "nodeType": "Block", + "src": "2224:54:18", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4193, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4186, + "src": "2264:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 4191, + "name": "Create3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17522, + "src": "2242:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Create3_$17522_$", + "typeString": "type(library Create3)" + } + }, + "id": 4192, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2250:13:18", + "memberName": "determineAddr", + "nodeType": "MemberAccess", + "referencedDeclaration": 17521, + "src": "2242:21:18", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) view returns (address)" + } + }, + "id": 4194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2242:28:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4190, + "id": 4195, + "nodeType": "Return", + "src": "2235:35:18" + } + ] + }, + "functionSelector": "4998f038", + "id": 4197, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "determineProxyAddr", + "nameLocation": "2128:18:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4187, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4186, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "2155:5:18", + "nodeType": "VariableDeclaration", + "scope": 4197, + "src": "2147:13:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4185, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2147:7:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2146:15:18" + }, + "returnParameters": { + "id": 4190, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4189, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4197, + "src": "2210:7:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4188, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2210:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2209:9:18" + }, + "scope": 4262, + "src": "2119:159:18", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "body": { + "id": 4260, + "nodeType": "Block", + "src": "2440:828:18", + "statements": [ + { + "assignments": [ + 4210 + ], + "declarations": [ + { + "constant": false, + "id": 4210, + "mutability": "mutable", + "name": "_proxyAddr", + "nameLocation": "2459:10:18", + "nodeType": "VariableDeclaration", + "scope": 4260, + "src": "2451:18:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4209, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2451:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4214, + "initialValue": { + "arguments": [ + { + "id": 4212, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4199, + "src": "2491:10:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4211, + "name": "determineProxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4197, + "src": "2472:18:18", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) view returns (address)" + } + }, + "id": 4213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2472:30:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2451:51:18" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4219, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4215, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "2517:10:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4216, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2528:4:18", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "2517:15:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2533:6:18", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "2517:22:18", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4218, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2543:1:18", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "2517:27:18", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4258, + "nodeType": "Block", + "src": "3191:70:18", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e65744465706c6f7965723a20616c72656164792070726f786966696564", + "id": 4255, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3213:35:18", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734", + "typeString": "literal_string \"WitnetDeployer: already proxified\"" + }, + "value": "WitnetDeployer: already proxified" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_07010c659982893c2bfaa9066955408f5c67d963251677f65ceecaf6871b6734", + "typeString": "literal_string \"WitnetDeployer: already proxified\"" + } + ], + "id": 4254, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "3206:6:18", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4256, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3206:43:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4257, + "nodeType": "ExpressionStatement", + "src": "3206:43:18" + } + ] + }, + "id": 4259, + "nodeType": "IfStatement", + "src": "2513:748:18", + "trueBody": { + "id": 4253, + "nodeType": "Block", + "src": "2546:639:18", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4223, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4199, + "src": "2615:10:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "expression": { + "arguments": [ + { + "id": 4225, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "2632:11:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + ], + "id": 4224, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "2627:4:18", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4226, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2627:17:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$4713", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4227, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2645:12:18", + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "2627:30:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4220, + "name": "Create3", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 17522, + "src": "2600:7:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Create3_$17522_$", + "typeString": "type(library Create3)" + } + }, + "id": 4222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2608:6:18", + "memberName": "deploy", + "nodeType": "MemberAccess", + "referencedDeclaration": 17403, + "src": "2600:14:18", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_address_$", + "typeString": "function (bytes32,bytes memory) returns (address)" + } + }, + "id": 4228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2600:58:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4229, + "nodeType": "ExpressionStatement", + "src": "2600:58:18" + }, + { + "expression": { + "arguments": [ + { + "id": 4237, + "name": "_firstImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4201, + "src": "2787:20:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 4240, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2978:3:18", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2982:6:18", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2978:10:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4242, + "name": "_initData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4203, + "src": "3076:9:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4238, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "2876:3:18", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2880:6:18", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2876:10:18", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4243, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2876:228:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4233, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "2746:10:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4232, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2738:8:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4231, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2738:8:18", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4234, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2738:19:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4230, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "2726:11:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4235, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2726:32:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "id": 4236, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2759:9:18", + "memberName": "upgradeTo", + "nodeType": "MemberAccess", + "referencedDeclaration": 4703, + "src": "2726:42:18", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,bytes memory) external returns (bool)" + } + }, + "id": 4244, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2726:393:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4245, + "nodeType": "ExpressionStatement", + "src": "2726:393:18" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4249, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4210, + "src": "3161:10:18", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4248, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3153:8:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4247, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3153:8:18", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4250, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3153:19:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4246, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "3141:11:18", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4251, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3141:32:18", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "functionReturnParameters": 4208, + "id": 4252, + "nodeType": "Return", + "src": "3134:39:18" + } + ] + } + } + ] + }, + "functionSelector": "5ba489e7", + "id": 4261, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "proxify", + "nameLocation": "2295:7:18", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4204, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4199, + "mutability": "mutable", + "name": "_proxySalt", + "nameLocation": "2311:10:18", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "2303:18:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4198, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2303:7:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4201, + "mutability": "mutable", + "name": "_firstImplementation", + "nameLocation": "2331:20:18", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "2323:28:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4200, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2323:7:18", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4203, + "mutability": "mutable", + "name": "_initData", + "nameLocation": "2366:9:18", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "2353:22:18", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4202, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2353:5:18", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2302:74:18" + }, + "returnParameters": { + "id": 4208, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4207, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4261, + "src": "2422:11:18", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + }, + "typeName": { + "id": 4206, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4205, + "name": "WitnetProxy", + "nameLocations": [ + "2422:11:18" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4713, + "src": "2422:11:18" + }, + "referencedDeclaration": 4713, + "src": "2422:11:18", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "visibility": "internal" + } + ], + "src": "2421:13:18" + }, + "scope": 4262, + "src": "2286:982:18", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "external" + } + ], + "scope": 4263, + "src": "356:2917:18", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "35:3238:18" + }, + "compiler": { + "name": "solc", + "version": "0.8.25+commit.b61c2a91.Emscripten.clang" + }, + "networks": { + "5777": { + "events": {}, + "links": {}, + "address": "0x0CFCA2cE0472e6cCE2ab82c1E95A207794E819f3", + "transactionHash": "0x1b0f05d3cb57a3102b160026ec4e3af88f6dd17d263207d70b1c8f6ecca03ba5" + } + }, + "schemaVersion": "3.4.16", + "updatedAt": "2024-10-20T09:42:12.831Z", + "devdoc": { + "author": "Guillermo Díaz ", + "kind": "dev", + "methods": { + "deploy(bytes,bytes32)": { + "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ", + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_deployed": "Just deployed contract address." + } + }, + "determineAddr(bytes,bytes32)": { + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_0": "Deterministic contract address." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "deploy(bytes,bytes32)": { + "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. " + }, + "determineAddr(bytes,bytes32)": { + "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`." + } + }, + "notice": "WitnetDeployer contract used both as CREATE2 (EIP-1014) factory for Witnet artifacts, and CREATE3 (EIP-3171) factory for Witnet proxies.", + "version": 1 + } + } \ No newline at end of file diff --git a/migrations/frosts/WitnetDeployerConfluxCore.json b/migrations/frosts/WitnetDeployerConfluxCore.json new file mode 100644 index 00000000..ebea5527 --- /dev/null +++ b/migrations/frosts/WitnetDeployerConfluxCore.json @@ -0,0 +1,6485 @@ +{ + "contractName": "WitnetDeployerConfluxCore", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "_deployed", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineProxyAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proxySalt", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_firstImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "proxify", + "outputs": [ + { + "internalType": "contract WitnetProxy", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz \",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployerConfluxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetDeployerConfluxCore.sol\":\"WitnetDeployerConfluxCore\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetDeployer.sol\":{\"keccak256\":\"0x00866ae27649212bdb7aacfc69d3302325ff82c1302993c1043e6f6ad2b507bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62fbada06d1352d79663f0c4ec26598e60e8a6b8b1015ff821b38d4f76580533\",\"dweb:/ipfs/QmYhDCsKjUPbKJLABxSUNQHsZKwPEVr41GGXV7MpThWvcL\"]},\"project:/contracts/core/WitnetDeployerConfluxCore.sol\":{\"keccak256\":\"0xaca9ec166403d7d9f7d7c2943dc41232fead896b515b34ea1d729a1a2c9ca20c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://90db7635ba5dbd446a15318f15c4e87629736fae71a1f42dc4a86bb56e68bed3\",\"dweb:/ipfs/QmcM5T3YYd1p6u6PKs7VqqKCYndB1PQ8Rnw6XKyooFAu8m\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/libs/Create3.sol\":{\"keccak256\":\"0xfbda4c773f859bef9d7878ca9412f244da85f7bd49df07c49a17544f4708d718\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://0f83b72ad1c35c707cc6daa4e8266d9d711f561a188fbb0be1885d3f08146ca6\",\"dweb:/ipfs/QmPJwdieqkxoSvqmczAtRMfb5EN8uWiabqMKj4yVqsUncv\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}", + "bytecode": "0x6080604052348015600f57600080fd5b50610f628061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610341565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103fd565b6100ed565b6100646100a1366004610442565b61017e565b6100646100b43660046103fd565b6102c9565b60006100e7604051806020016100ce90610334565b601f1982820381018352601f90910116604052836102c9565b92915050565b60006100f983836102c9565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b190610334565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee9291906104a7565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a9291906104a7565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d9190610506565b5090506102c2565b60405162461bcd60e51b815260206004820152602c60248201527f5769746e65744465706c6f796572436f6e666c7578436f72653a20616c72656160448201526b191e481c1c9bde1a599a595960a21b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012060016001609c1b03166001609f1b1790565b610a048061052983390190565b60006020828403121561035357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261038157600080fd5b813567ffffffffffffffff8082111561039c5761039c61035a565b604051601f8301601f19908116603f011681019082821181831017156103c4576103c461035a565b816040528381528660208588010111156103dd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561041057600080fd5b823567ffffffffffffffff81111561042757600080fd5b61043385828601610370565b95602094909401359450505050565b60008060006060848603121561045757600080fd5b8335925060208401356001600160a01b038116811461047557600080fd5b9150604084013567ffffffffffffffff81111561049157600080fd5b61049d86828701610370565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104e4578581018301518582016060015282016104c8565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561051857600080fd5b815180151581146102c257600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a26469706673582212200b7d983a8f8afdda5f4575fde8d9163c7ce80cac32696cf093bd7c8e5e81e28264736f6c63430008190033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f366004610341565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103fd565b6100ed565b6100646100a1366004610442565b61017e565b6100646100b43660046103fd565b6102c9565b60006100e7604051806020016100ce90610334565b601f1982820381018352601f90910116604052836102c9565b92915050565b60006100f983836102c9565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b190610334565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee9291906104a7565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a9291906104a7565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d9190610506565b5090506102c2565b60405162461bcd60e51b815260206004820152602c60248201527f5769746e65744465706c6f796572436f6e666c7578436f72653a20616c72656160448201526b191e481c1c9bde1a599a595960a21b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012060016001609c1b03166001609f1b1790565b610a048061052983390190565b60006020828403121561035357600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261038157600080fd5b813567ffffffffffffffff8082111561039c5761039c61035a565b604051601f8301601f19908116603f011681019082821181831017156103c4576103c461035a565b816040528381528660208588010111156103dd57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561041057600080fd5b823567ffffffffffffffff81111561042757600080fd5b61043385828601610370565b95602094909401359450505050565b60008060006060848603121561045757600080fd5b8335925060208401356001600160a01b038116811461047557600080fd5b9150604084013567ffffffffffffffff81111561049157600080fd5b61049d86828701610370565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104e4578581018301518582016060015282016104c8565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561051857600080fd5b815180151581146102c257600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a26469706673582212200b7d983a8f8afdda5f4575fde8d9163c7ce80cac32696cf093bd7c8e5e81e28264736f6c63430008190033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nativeSrc": "0:4646:103", + "nodeType": "YulBlock", + "src": "0:4646:103", + "statements": [ + { + "nativeSrc": "6:3:103", + "nodeType": "YulBlock", + "src": "6:3:103", + "statements": [] + }, + { + "body": { + "nativeSrc": "84:110:103", + "nodeType": "YulBlock", + "src": "84:110:103", + "statements": [ + { + "body": { + "nativeSrc": "130:16:103", + "nodeType": "YulBlock", + "src": "130:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "139:1:103", + "nodeType": "YulLiteral", + "src": "139:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "142:1:103", + "nodeType": "YulLiteral", + "src": "142:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "132:6:103", + "nodeType": "YulIdentifier", + "src": "132:6:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulFunctionCall", + "src": "132:12:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulExpressionStatement", + "src": "132:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "105:7:103", + "nodeType": "YulIdentifier", + "src": "105:7:103" + }, + { + "name": "headStart", + "nativeSrc": "114:9:103", + "nodeType": "YulIdentifier", + "src": "114:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "101:3:103", + "nodeType": "YulIdentifier", + "src": "101:3:103" + }, + "nativeSrc": "101:23:103", + "nodeType": "YulFunctionCall", + "src": "101:23:103" + }, + { + "kind": "number", + "nativeSrc": "126:2:103", + "nodeType": "YulLiteral", + "src": "126:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "97:3:103", + "nodeType": "YulIdentifier", + "src": "97:3:103" + }, + "nativeSrc": "97:32:103", + "nodeType": "YulFunctionCall", + "src": "97:32:103" + }, + "nativeSrc": "94:52:103", + "nodeType": "YulIf", + "src": "94:52:103" + }, + { + "nativeSrc": "155:33:103", + "nodeType": "YulAssignment", + "src": "155:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "178:9:103", + "nodeType": "YulIdentifier", + "src": "178:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "165:12:103", + "nodeType": "YulIdentifier", + "src": "165:12:103" + }, + "nativeSrc": "165:23:103", + "nodeType": "YulFunctionCall", + "src": "165:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "155:6:103", + "nodeType": "YulIdentifier", + "src": "155:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32", + "nativeSrc": "14:180:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "50:9:103", + "nodeType": "YulTypedName", + "src": "50:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "61:7:103", + "nodeType": "YulTypedName", + "src": "61:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "73:6:103", + "nodeType": "YulTypedName", + "src": "73:6:103", + "type": "" + } + ], + "src": "14:180:103" + }, + { + "body": { + "nativeSrc": "300:102:103", + "nodeType": "YulBlock", + "src": "300:102:103", + "statements": [ + { + "nativeSrc": "310:26:103", + "nodeType": "YulAssignment", + "src": "310:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "322:9:103", + "nodeType": "YulIdentifier", + "src": "322:9:103" + }, + { + "kind": "number", + "nativeSrc": "333:2:103", + "nodeType": "YulLiteral", + "src": "333:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "318:3:103", + "nodeType": "YulIdentifier", + "src": "318:3:103" + }, + "nativeSrc": "318:18:103", + "nodeType": "YulFunctionCall", + "src": "318:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "310:4:103", + "nodeType": "YulIdentifier", + "src": "310:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "352:9:103", + "nodeType": "YulIdentifier", + "src": "352:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "367:6:103", + "nodeType": "YulIdentifier", + "src": "367:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "383:3:103", + "nodeType": "YulLiteral", + "src": "383:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "388:1:103", + "nodeType": "YulLiteral", + "src": "388:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "379:3:103", + "nodeType": "YulIdentifier", + "src": "379:3:103" + }, + "nativeSrc": "379:11:103", + "nodeType": "YulFunctionCall", + "src": "379:11:103" + }, + { + "kind": "number", + "nativeSrc": "392:1:103", + "nodeType": "YulLiteral", + "src": "392:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "375:3:103", + "nodeType": "YulIdentifier", + "src": "375:3:103" + }, + "nativeSrc": "375:19:103", + "nodeType": "YulFunctionCall", + "src": "375:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "363:3:103", + "nodeType": "YulIdentifier", + "src": "363:3:103" + }, + "nativeSrc": "363:32:103", + "nodeType": "YulFunctionCall", + "src": "363:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "345:6:103", + "nodeType": "YulIdentifier", + "src": "345:6:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulFunctionCall", + "src": "345:51:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulExpressionStatement", + "src": "345:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "199:203:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "269:9:103", + "nodeType": "YulTypedName", + "src": "269:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "280:6:103", + "nodeType": "YulTypedName", + "src": "280:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "291:4:103", + "nodeType": "YulTypedName", + "src": "291:4:103", + "type": "" + } + ], + "src": "199:203:103" + }, + { + "body": { + "nativeSrc": "439:95:103", + "nodeType": "YulBlock", + "src": "439:95:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "456:1:103", + "nodeType": "YulLiteral", + "src": "456:1:103", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "463:3:103", + "nodeType": "YulLiteral", + "src": "463:3:103", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "468:10:103", + "nodeType": "YulLiteral", + "src": "468:10:103", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "459:3:103", + "nodeType": "YulIdentifier", + "src": "459:3:103" + }, + "nativeSrc": "459:20:103", + "nodeType": "YulFunctionCall", + "src": "459:20:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "449:6:103", + "nodeType": "YulIdentifier", + "src": "449:6:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulFunctionCall", + "src": "449:31:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulExpressionStatement", + "src": "449:31:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "496:1:103", + "nodeType": "YulLiteral", + "src": "496:1:103", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "499:4:103", + "nodeType": "YulLiteral", + "src": "499:4:103", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "489:6:103", + "nodeType": "YulIdentifier", + "src": "489:6:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulFunctionCall", + "src": "489:15:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulExpressionStatement", + "src": "489:15:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "520:1:103", + "nodeType": "YulLiteral", + "src": "520:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "523:4:103", + "nodeType": "YulLiteral", + "src": "523:4:103", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "513:6:103", + "nodeType": "YulIdentifier", + "src": "513:6:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulFunctionCall", + "src": "513:15:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulExpressionStatement", + "src": "513:15:103" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "407:127:103", + "nodeType": "YulFunctionDefinition", + "src": "407:127:103" + }, + { + "body": { + "nativeSrc": "591:666:103", + "nodeType": "YulBlock", + "src": "591:666:103", + "statements": [ + { + "body": { + "nativeSrc": "640:16:103", + "nodeType": "YulBlock", + "src": "640:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "649:1:103", + "nodeType": "YulLiteral", + "src": "649:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "652:1:103", + "nodeType": "YulLiteral", + "src": "652:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "642:6:103", + "nodeType": "YulIdentifier", + "src": "642:6:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulFunctionCall", + "src": "642:12:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulExpressionStatement", + "src": "642:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "619:6:103", + "nodeType": "YulIdentifier", + "src": "619:6:103" + }, + { + "kind": "number", + "nativeSrc": "627:4:103", + "nodeType": "YulLiteral", + "src": "627:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "615:3:103", + "nodeType": "YulIdentifier", + "src": "615:3:103" + }, + "nativeSrc": "615:17:103", + "nodeType": "YulFunctionCall", + "src": "615:17:103" + }, + { + "name": "end", + "nativeSrc": "634:3:103", + "nodeType": "YulIdentifier", + "src": "634:3:103" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "611:3:103", + "nodeType": "YulIdentifier", + "src": "611:3:103" + }, + "nativeSrc": "611:27:103", + "nodeType": "YulFunctionCall", + "src": "611:27:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "604:6:103", + "nodeType": "YulIdentifier", + "src": "604:6:103" + }, + "nativeSrc": "604:35:103", + "nodeType": "YulFunctionCall", + "src": "604:35:103" + }, + "nativeSrc": "601:55:103", + "nodeType": "YulIf", + "src": "601:55:103" + }, + { + "nativeSrc": "665:30:103", + "nodeType": "YulVariableDeclaration", + "src": "665:30:103", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "688:6:103", + "nodeType": "YulIdentifier", + "src": "688:6:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "675:12:103", + "nodeType": "YulIdentifier", + "src": "675:12:103" + }, + "nativeSrc": "675:20:103", + "nodeType": "YulFunctionCall", + "src": "675:20:103" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "669:2:103", + "nodeType": "YulTypedName", + "src": "669:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "704:28:103", + "nodeType": "YulVariableDeclaration", + "src": "704:28:103", + "value": { + "kind": "number", + "nativeSrc": "714:18:103", + "nodeType": "YulLiteral", + "src": "714:18:103", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "708:2:103", + "nodeType": "YulTypedName", + "src": "708:2:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "755:22:103", + "nodeType": "YulBlock", + "src": "755:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "757:16:103", + "nodeType": "YulIdentifier", + "src": "757:16:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulFunctionCall", + "src": "757:18:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulExpressionStatement", + "src": "757:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "747:2:103", + "nodeType": "YulIdentifier", + "src": "747:2:103" + }, + { + "name": "_2", + "nativeSrc": "751:2:103", + "nodeType": "YulIdentifier", + "src": "751:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "744:2:103", + "nodeType": "YulIdentifier", + "src": "744:2:103" + }, + "nativeSrc": "744:10:103", + "nodeType": "YulFunctionCall", + "src": "744:10:103" + }, + "nativeSrc": "741:36:103", + "nodeType": "YulIf", + "src": "741:36:103" + }, + { + "nativeSrc": "786:17:103", + "nodeType": "YulVariableDeclaration", + "src": "786:17:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "800:2:103", + "nodeType": "YulLiteral", + "src": "800:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "796:3:103", + "nodeType": "YulIdentifier", + "src": "796:3:103" + }, + "nativeSrc": "796:7:103", + "nodeType": "YulFunctionCall", + "src": "796:7:103" + }, + "variables": [ + { + "name": "_3", + "nativeSrc": "790:2:103", + "nodeType": "YulTypedName", + "src": "790:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "812:23:103", + "nodeType": "YulVariableDeclaration", + "src": "812:23:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "832:2:103", + "nodeType": "YulLiteral", + "src": "832:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "826:5:103", + "nodeType": "YulIdentifier", + "src": "826:5:103" + }, + "nativeSrc": "826:9:103", + "nodeType": "YulFunctionCall", + "src": "826:9:103" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "816:6:103", + "nodeType": "YulTypedName", + "src": "816:6:103", + "type": "" + } + ] + }, + { + "nativeSrc": "844:71:103", + "nodeType": "YulVariableDeclaration", + "src": "844:71:103", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "866:6:103", + "nodeType": "YulIdentifier", + "src": "866:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "890:2:103", + "nodeType": "YulIdentifier", + "src": "890:2:103" + }, + { + "kind": "number", + "nativeSrc": "894:4:103", + "nodeType": "YulLiteral", + "src": "894:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "886:3:103", + "nodeType": "YulIdentifier", + "src": "886:3:103" + }, + "nativeSrc": "886:13:103", + "nodeType": "YulFunctionCall", + "src": "886:13:103" + }, + { + "name": "_3", + "nativeSrc": "901:2:103", + "nodeType": "YulIdentifier", + "src": "901:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "882:3:103", + "nodeType": "YulIdentifier", + "src": "882:3:103" + }, + "nativeSrc": "882:22:103", + "nodeType": "YulFunctionCall", + "src": "882:22:103" + }, + { + "kind": "number", + "nativeSrc": "906:2:103", + "nodeType": "YulLiteral", + "src": "906:2:103", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "878:3:103", + "nodeType": "YulIdentifier", + "src": "878:3:103" + }, + "nativeSrc": "878:31:103", + "nodeType": "YulFunctionCall", + "src": "878:31:103" + }, + { + "name": "_3", + "nativeSrc": "911:2:103", + "nodeType": "YulIdentifier", + "src": "911:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "874:3:103", + "nodeType": "YulIdentifier", + "src": "874:3:103" + }, + "nativeSrc": "874:40:103", + "nodeType": "YulFunctionCall", + "src": "874:40:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "862:3:103", + "nodeType": "YulIdentifier", + "src": "862:3:103" + }, + "nativeSrc": "862:53:103", + "nodeType": "YulFunctionCall", + "src": "862:53:103" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "848:10:103", + "nodeType": "YulTypedName", + "src": "848:10:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "974:22:103", + "nodeType": "YulBlock", + "src": "974:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "976:16:103", + "nodeType": "YulIdentifier", + "src": "976:16:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulFunctionCall", + "src": "976:18:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulExpressionStatement", + "src": "976:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "933:10:103", + "nodeType": "YulIdentifier", + "src": "933:10:103" + }, + { + "name": "_2", + "nativeSrc": "945:2:103", + "nodeType": "YulIdentifier", + "src": "945:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "930:2:103", + "nodeType": "YulIdentifier", + "src": "930:2:103" + }, + "nativeSrc": "930:18:103", + "nodeType": "YulFunctionCall", + "src": "930:18:103" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "953:10:103", + "nodeType": "YulIdentifier", + "src": "953:10:103" + }, + { + "name": "memPtr", + "nativeSrc": "965:6:103", + "nodeType": "YulIdentifier", + "src": "965:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "950:2:103", + "nodeType": "YulIdentifier", + "src": "950:2:103" + }, + "nativeSrc": "950:22:103", + "nodeType": "YulFunctionCall", + "src": "950:22:103" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "927:2:103", + "nodeType": "YulIdentifier", + "src": "927:2:103" + }, + "nativeSrc": "927:46:103", + "nodeType": "YulFunctionCall", + "src": "927:46:103" + }, + "nativeSrc": "924:72:103", + "nodeType": "YulIf", + "src": "924:72:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1012:2:103", + "nodeType": "YulLiteral", + "src": "1012:2:103", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "1016:10:103", + "nodeType": "YulIdentifier", + "src": "1016:10:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1005:6:103", + "nodeType": "YulIdentifier", + "src": "1005:6:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulFunctionCall", + "src": "1005:22:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulExpressionStatement", + "src": "1005:22:103" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1043:6:103", + "nodeType": "YulIdentifier", + "src": "1043:6:103" + }, + { + "name": "_1", + "nativeSrc": "1051:2:103", + "nodeType": "YulIdentifier", + "src": "1051:2:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1036:6:103", + "nodeType": "YulIdentifier", + "src": "1036:6:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulFunctionCall", + "src": "1036:18:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulExpressionStatement", + "src": "1036:18:103" + }, + { + "body": { + "nativeSrc": "1102:16:103", + "nodeType": "YulBlock", + "src": "1102:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1111:1:103", + "nodeType": "YulLiteral", + "src": "1111:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1114:1:103", + "nodeType": "YulLiteral", + "src": "1114:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1104:6:103", + "nodeType": "YulIdentifier", + "src": "1104:6:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulFunctionCall", + "src": "1104:12:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulExpressionStatement", + "src": "1104:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1077:6:103", + "nodeType": "YulIdentifier", + "src": "1077:6:103" + }, + { + "name": "_1", + "nativeSrc": "1085:2:103", + "nodeType": "YulIdentifier", + "src": "1085:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1073:3:103", + "nodeType": "YulIdentifier", + "src": "1073:3:103" + }, + "nativeSrc": "1073:15:103", + "nodeType": "YulFunctionCall", + "src": "1073:15:103" + }, + { + "kind": "number", + "nativeSrc": "1090:4:103", + "nodeType": "YulLiteral", + "src": "1090:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1069:3:103", + "nodeType": "YulIdentifier", + "src": "1069:3:103" + }, + "nativeSrc": "1069:26:103", + "nodeType": "YulFunctionCall", + "src": "1069:26:103" + }, + { + "name": "end", + "nativeSrc": "1097:3:103", + "nodeType": "YulIdentifier", + "src": "1097:3:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1066:2:103", + "nodeType": "YulIdentifier", + "src": "1066:2:103" + }, + "nativeSrc": "1066:35:103", + "nodeType": "YulFunctionCall", + "src": "1066:35:103" + }, + "nativeSrc": "1063:55:103", + "nodeType": "YulIf", + "src": "1063:55:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1144:6:103", + "nodeType": "YulIdentifier", + "src": "1144:6:103" + }, + { + "kind": "number", + "nativeSrc": "1152:4:103", + "nodeType": "YulLiteral", + "src": "1152:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1140:3:103", + "nodeType": "YulIdentifier", + "src": "1140:3:103" + }, + "nativeSrc": "1140:17:103", + "nodeType": "YulFunctionCall", + "src": "1140:17:103" + }, + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1163:6:103", + "nodeType": "YulIdentifier", + "src": "1163:6:103" + }, + { + "kind": "number", + "nativeSrc": "1171:4:103", + "nodeType": "YulLiteral", + "src": "1171:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1159:3:103", + "nodeType": "YulIdentifier", + "src": "1159:3:103" + }, + "nativeSrc": "1159:17:103", + "nodeType": "YulFunctionCall", + "src": "1159:17:103" + }, + { + "name": "_1", + "nativeSrc": "1178:2:103", + "nodeType": "YulIdentifier", + "src": "1178:2:103" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "1127:12:103", + "nodeType": "YulIdentifier", + "src": "1127:12:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulFunctionCall", + "src": "1127:54:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulExpressionStatement", + "src": "1127:54:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1205:6:103", + "nodeType": "YulIdentifier", + "src": "1205:6:103" + }, + { + "name": "_1", + "nativeSrc": "1213:2:103", + "nodeType": "YulIdentifier", + "src": "1213:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1201:3:103", + "nodeType": "YulIdentifier", + "src": "1201:3:103" + }, + "nativeSrc": "1201:15:103", + "nodeType": "YulFunctionCall", + "src": "1201:15:103" + }, + { + "kind": "number", + "nativeSrc": "1218:4:103", + "nodeType": "YulLiteral", + "src": "1218:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1197:3:103", + "nodeType": "YulIdentifier", + "src": "1197:3:103" + }, + "nativeSrc": "1197:26:103", + "nodeType": "YulFunctionCall", + "src": "1197:26:103" + }, + { + "kind": "number", + "nativeSrc": "1225:1:103", + "nodeType": "YulLiteral", + "src": "1225:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1190:6:103", + "nodeType": "YulIdentifier", + "src": "1190:6:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulFunctionCall", + "src": "1190:37:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulExpressionStatement", + "src": "1190:37:103" + }, + { + "nativeSrc": "1236:15:103", + "nodeType": "YulAssignment", + "src": "1236:15:103", + "value": { + "name": "memPtr", + "nativeSrc": "1245:6:103", + "nodeType": "YulIdentifier", + "src": "1245:6:103" + }, + "variableNames": [ + { + "name": "array", + "nativeSrc": "1236:5:103", + "nodeType": "YulIdentifier", + "src": "1236:5:103" + } + ] + } + ] + }, + "name": "abi_decode_bytes", + "nativeSrc": "539:718:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "565:6:103", + "nodeType": "YulTypedName", + "src": "565:6:103", + "type": "" + }, + { + "name": "end", + "nativeSrc": "573:3:103", + "nodeType": "YulTypedName", + "src": "573:3:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nativeSrc": "581:5:103", + "nodeType": "YulTypedName", + "src": "581:5:103", + "type": "" + } + ], + "src": "539:718:103" + }, + { + "body": { + "nativeSrc": "1358:292:103", + "nodeType": "YulBlock", + "src": "1358:292:103", + "statements": [ + { + "body": { + "nativeSrc": "1404:16:103", + "nodeType": "YulBlock", + "src": "1404:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1413:1:103", + "nodeType": "YulLiteral", + "src": "1413:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1416:1:103", + "nodeType": "YulLiteral", + "src": "1416:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1406:6:103", + "nodeType": "YulIdentifier", + "src": "1406:6:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulFunctionCall", + "src": "1406:12:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulExpressionStatement", + "src": "1406:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1379:7:103", + "nodeType": "YulIdentifier", + "src": "1379:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1388:9:103", + "nodeType": "YulIdentifier", + "src": "1388:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1375:3:103", + "nodeType": "YulIdentifier", + "src": "1375:3:103" + }, + "nativeSrc": "1375:23:103", + "nodeType": "YulFunctionCall", + "src": "1375:23:103" + }, + { + "kind": "number", + "nativeSrc": "1400:2:103", + "nodeType": "YulLiteral", + "src": "1400:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1371:3:103", + "nodeType": "YulIdentifier", + "src": "1371:3:103" + }, + "nativeSrc": "1371:32:103", + "nodeType": "YulFunctionCall", + "src": "1371:32:103" + }, + "nativeSrc": "1368:52:103", + "nodeType": "YulIf", + "src": "1368:52:103" + }, + { + "nativeSrc": "1429:37:103", + "nodeType": "YulVariableDeclaration", + "src": "1429:37:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1456:9:103", + "nodeType": "YulIdentifier", + "src": "1456:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1443:12:103", + "nodeType": "YulIdentifier", + "src": "1443:12:103" + }, + "nativeSrc": "1443:23:103", + "nodeType": "YulFunctionCall", + "src": "1443:23:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "1433:6:103", + "nodeType": "YulTypedName", + "src": "1433:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1509:16:103", + "nodeType": "YulBlock", + "src": "1509:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1518:1:103", + "nodeType": "YulLiteral", + "src": "1518:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1521:1:103", + "nodeType": "YulLiteral", + "src": "1521:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1511:6:103", + "nodeType": "YulIdentifier", + "src": "1511:6:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulFunctionCall", + "src": "1511:12:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulExpressionStatement", + "src": "1511:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1481:6:103", + "nodeType": "YulIdentifier", + "src": "1481:6:103" + }, + { + "kind": "number", + "nativeSrc": "1489:18:103", + "nodeType": "YulLiteral", + "src": "1489:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1478:2:103", + "nodeType": "YulIdentifier", + "src": "1478:2:103" + }, + "nativeSrc": "1478:30:103", + "nodeType": "YulFunctionCall", + "src": "1478:30:103" + }, + "nativeSrc": "1475:50:103", + "nodeType": "YulIf", + "src": "1475:50:103" + }, + { + "nativeSrc": "1534:59:103", + "nodeType": "YulAssignment", + "src": "1534:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1565:9:103", + "nodeType": "YulIdentifier", + "src": "1565:9:103" + }, + { + "name": "offset", + "nativeSrc": "1576:6:103", + "nodeType": "YulIdentifier", + "src": "1576:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1561:3:103", + "nodeType": "YulIdentifier", + "src": "1561:3:103" + }, + "nativeSrc": "1561:22:103", + "nodeType": "YulFunctionCall", + "src": "1561:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "1585:7:103", + "nodeType": "YulIdentifier", + "src": "1585:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "1544:16:103", + "nodeType": "YulIdentifier", + "src": "1544:16:103" + }, + "nativeSrc": "1544:49:103", + "nodeType": "YulFunctionCall", + "src": "1544:49:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1534:6:103", + "nodeType": "YulIdentifier", + "src": "1534:6:103" + } + ] + }, + { + "nativeSrc": "1602:42:103", + "nodeType": "YulAssignment", + "src": "1602:42:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1629:9:103", + "nodeType": "YulIdentifier", + "src": "1629:9:103" + }, + { + "kind": "number", + "nativeSrc": "1640:2:103", + "nodeType": "YulLiteral", + "src": "1640:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1625:3:103", + "nodeType": "YulIdentifier", + "src": "1625:3:103" + }, + "nativeSrc": "1625:18:103", + "nodeType": "YulFunctionCall", + "src": "1625:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1612:12:103", + "nodeType": "YulIdentifier", + "src": "1612:12:103" + }, + "nativeSrc": "1612:32:103", + "nodeType": "YulFunctionCall", + "src": "1612:32:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1602:6:103", + "nodeType": "YulIdentifier", + "src": "1602:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32", + "nativeSrc": "1262:388:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1316:9:103", + "nodeType": "YulTypedName", + "src": "1316:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1327:7:103", + "nodeType": "YulTypedName", + "src": "1327:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1339:6:103", + "nodeType": "YulTypedName", + "src": "1339:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1347:6:103", + "nodeType": "YulTypedName", + "src": "1347:6:103", + "type": "" + } + ], + "src": "1262:388:103" + }, + { + "body": { + "nativeSrc": "1768:449:103", + "nodeType": "YulBlock", + "src": "1768:449:103", + "statements": [ + { + "body": { + "nativeSrc": "1814:16:103", + "nodeType": "YulBlock", + "src": "1814:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1823:1:103", + "nodeType": "YulLiteral", + "src": "1823:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1826:1:103", + "nodeType": "YulLiteral", + "src": "1826:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1816:6:103", + "nodeType": "YulIdentifier", + "src": "1816:6:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulFunctionCall", + "src": "1816:12:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulExpressionStatement", + "src": "1816:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1789:7:103", + "nodeType": "YulIdentifier", + "src": "1789:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1798:9:103", + "nodeType": "YulIdentifier", + "src": "1798:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1785:3:103", + "nodeType": "YulIdentifier", + "src": "1785:3:103" + }, + "nativeSrc": "1785:23:103", + "nodeType": "YulFunctionCall", + "src": "1785:23:103" + }, + { + "kind": "number", + "nativeSrc": "1810:2:103", + "nodeType": "YulLiteral", + "src": "1810:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1781:3:103", + "nodeType": "YulIdentifier", + "src": "1781:3:103" + }, + "nativeSrc": "1781:32:103", + "nodeType": "YulFunctionCall", + "src": "1781:32:103" + }, + "nativeSrc": "1778:52:103", + "nodeType": "YulIf", + "src": "1778:52:103" + }, + { + "nativeSrc": "1839:33:103", + "nodeType": "YulAssignment", + "src": "1839:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1862:9:103", + "nodeType": "YulIdentifier", + "src": "1862:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1849:12:103", + "nodeType": "YulIdentifier", + "src": "1849:12:103" + }, + "nativeSrc": "1849:23:103", + "nodeType": "YulFunctionCall", + "src": "1849:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1839:6:103", + "nodeType": "YulIdentifier", + "src": "1839:6:103" + } + ] + }, + { + "nativeSrc": "1881:45:103", + "nodeType": "YulVariableDeclaration", + "src": "1881:45:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1911:9:103", + "nodeType": "YulIdentifier", + "src": "1911:9:103" + }, + { + "kind": "number", + "nativeSrc": "1922:2:103", + "nodeType": "YulLiteral", + "src": "1922:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1907:3:103", + "nodeType": "YulIdentifier", + "src": "1907:3:103" + }, + "nativeSrc": "1907:18:103", + "nodeType": "YulFunctionCall", + "src": "1907:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1894:12:103", + "nodeType": "YulIdentifier", + "src": "1894:12:103" + }, + "nativeSrc": "1894:32:103", + "nodeType": "YulFunctionCall", + "src": "1894:32:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1885:5:103", + "nodeType": "YulTypedName", + "src": "1885:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1989:16:103", + "nodeType": "YulBlock", + "src": "1989:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1998:1:103", + "nodeType": "YulLiteral", + "src": "1998:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2001:1:103", + "nodeType": "YulLiteral", + "src": "2001:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1991:6:103", + "nodeType": "YulIdentifier", + "src": "1991:6:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulFunctionCall", + "src": "1991:12:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulExpressionStatement", + "src": "1991:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1948:5:103", + "nodeType": "YulIdentifier", + "src": "1948:5:103" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1959:5:103", + "nodeType": "YulIdentifier", + "src": "1959:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1974:3:103", + "nodeType": "YulLiteral", + "src": "1974:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1979:1:103", + "nodeType": "YulLiteral", + "src": "1979:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1970:3:103", + "nodeType": "YulIdentifier", + "src": "1970:3:103" + }, + "nativeSrc": "1970:11:103", + "nodeType": "YulFunctionCall", + "src": "1970:11:103" + }, + { + "kind": "number", + "nativeSrc": "1983:1:103", + "nodeType": "YulLiteral", + "src": "1983:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1966:3:103", + "nodeType": "YulIdentifier", + "src": "1966:3:103" + }, + "nativeSrc": "1966:19:103", + "nodeType": "YulFunctionCall", + "src": "1966:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1955:3:103", + "nodeType": "YulIdentifier", + "src": "1955:3:103" + }, + "nativeSrc": "1955:31:103", + "nodeType": "YulFunctionCall", + "src": "1955:31:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1945:2:103", + "nodeType": "YulIdentifier", + "src": "1945:2:103" + }, + "nativeSrc": "1945:42:103", + "nodeType": "YulFunctionCall", + "src": "1945:42:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1938:6:103", + "nodeType": "YulIdentifier", + "src": "1938:6:103" + }, + "nativeSrc": "1938:50:103", + "nodeType": "YulFunctionCall", + "src": "1938:50:103" + }, + "nativeSrc": "1935:70:103", + "nodeType": "YulIf", + "src": "1935:70:103" + }, + { + "nativeSrc": "2014:15:103", + "nodeType": "YulAssignment", + "src": "2014:15:103", + "value": { + "name": "value", + "nativeSrc": "2024:5:103", + "nodeType": "YulIdentifier", + "src": "2024:5:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2014:6:103", + "nodeType": "YulIdentifier", + "src": "2014:6:103" + } + ] + }, + { + "nativeSrc": "2038:46:103", + "nodeType": "YulVariableDeclaration", + "src": "2038:46:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2069:9:103", + "nodeType": "YulIdentifier", + "src": "2069:9:103" + }, + { + "kind": "number", + "nativeSrc": "2080:2:103", + "nodeType": "YulLiteral", + "src": "2080:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2065:3:103", + "nodeType": "YulIdentifier", + "src": "2065:3:103" + }, + "nativeSrc": "2065:18:103", + "nodeType": "YulFunctionCall", + "src": "2065:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2052:12:103", + "nodeType": "YulIdentifier", + "src": "2052:12:103" + }, + "nativeSrc": "2052:32:103", + "nodeType": "YulFunctionCall", + "src": "2052:32:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "2042:6:103", + "nodeType": "YulTypedName", + "src": "2042:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2127:16:103", + "nodeType": "YulBlock", + "src": "2127:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2136:1:103", + "nodeType": "YulLiteral", + "src": "2136:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2139:1:103", + "nodeType": "YulLiteral", + "src": "2139:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2129:6:103", + "nodeType": "YulIdentifier", + "src": "2129:6:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulFunctionCall", + "src": "2129:12:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulExpressionStatement", + "src": "2129:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2099:6:103", + "nodeType": "YulIdentifier", + "src": "2099:6:103" + }, + { + "kind": "number", + "nativeSrc": "2107:18:103", + "nodeType": "YulLiteral", + "src": "2107:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2096:2:103", + "nodeType": "YulIdentifier", + "src": "2096:2:103" + }, + "nativeSrc": "2096:30:103", + "nodeType": "YulFunctionCall", + "src": "2096:30:103" + }, + "nativeSrc": "2093:50:103", + "nodeType": "YulIf", + "src": "2093:50:103" + }, + { + "nativeSrc": "2152:59:103", + "nodeType": "YulAssignment", + "src": "2152:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2183:9:103", + "nodeType": "YulIdentifier", + "src": "2183:9:103" + }, + { + "name": "offset", + "nativeSrc": "2194:6:103", + "nodeType": "YulIdentifier", + "src": "2194:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2179:3:103", + "nodeType": "YulIdentifier", + "src": "2179:3:103" + }, + "nativeSrc": "2179:22:103", + "nodeType": "YulFunctionCall", + "src": "2179:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "2203:7:103", + "nodeType": "YulIdentifier", + "src": "2203:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "2162:16:103", + "nodeType": "YulIdentifier", + "src": "2162:16:103" + }, + "nativeSrc": "2162:49:103", + "nodeType": "YulFunctionCall", + "src": "2162:49:103" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "2152:6:103", + "nodeType": "YulIdentifier", + "src": "2152:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr", + "nativeSrc": "1655:562:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1718:9:103", + "nodeType": "YulTypedName", + "src": "1718:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1729:7:103", + "nodeType": "YulTypedName", + "src": "1729:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1741:6:103", + "nodeType": "YulTypedName", + "src": "1741:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1749:6:103", + "nodeType": "YulTypedName", + "src": "1749:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1757:6:103", + "nodeType": "YulTypedName", + "src": "1757:6:103", + "type": "" + } + ], + "src": "1655:562:103" + }, + { + "body": { + "nativeSrc": "2351:102:103", + "nodeType": "YulBlock", + "src": "2351:102:103", + "statements": [ + { + "nativeSrc": "2361:26:103", + "nodeType": "YulAssignment", + "src": "2361:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2373:9:103", + "nodeType": "YulIdentifier", + "src": "2373:9:103" + }, + { + "kind": "number", + "nativeSrc": "2384:2:103", + "nodeType": "YulLiteral", + "src": "2384:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2369:3:103", + "nodeType": "YulIdentifier", + "src": "2369:3:103" + }, + "nativeSrc": "2369:18:103", + "nodeType": "YulFunctionCall", + "src": "2369:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2361:4:103", + "nodeType": "YulIdentifier", + "src": "2361:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2403:9:103", + "nodeType": "YulIdentifier", + "src": "2403:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2418:6:103", + "nodeType": "YulIdentifier", + "src": "2418:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2434:3:103", + "nodeType": "YulLiteral", + "src": "2434:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2439:1:103", + "nodeType": "YulLiteral", + "src": "2439:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2430:3:103", + "nodeType": "YulIdentifier", + "src": "2430:3:103" + }, + "nativeSrc": "2430:11:103", + "nodeType": "YulFunctionCall", + "src": "2430:11:103" + }, + { + "kind": "number", + "nativeSrc": "2443:1:103", + "nodeType": "YulLiteral", + "src": "2443:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2426:3:103", + "nodeType": "YulIdentifier", + "src": "2426:3:103" + }, + "nativeSrc": "2426:19:103", + "nodeType": "YulFunctionCall", + "src": "2426:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2414:3:103", + "nodeType": "YulIdentifier", + "src": "2414:3:103" + }, + "nativeSrc": "2414:32:103", + "nodeType": "YulFunctionCall", + "src": "2414:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2396:6:103", + "nodeType": "YulIdentifier", + "src": "2396:6:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulFunctionCall", + "src": "2396:51:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulExpressionStatement", + "src": "2396:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed", + "nativeSrc": "2222:231:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2320:9:103", + "nodeType": "YulTypedName", + "src": "2320:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2331:6:103", + "nodeType": "YulTypedName", + "src": "2331:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2342:4:103", + "nodeType": "YulTypedName", + "src": "2342:4:103", + "type": "" + } + ], + "src": "2222:231:103" + }, + { + "body": { + "nativeSrc": "2632:223:103", + "nodeType": "YulBlock", + "src": "2632:223:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2649:9:103", + "nodeType": "YulIdentifier", + "src": "2649:9:103" + }, + { + "kind": "number", + "nativeSrc": "2660:2:103", + "nodeType": "YulLiteral", + "src": "2660:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2642:6:103", + "nodeType": "YulIdentifier", + "src": "2642:6:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulFunctionCall", + "src": "2642:21:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulExpressionStatement", + "src": "2642:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2683:9:103", + "nodeType": "YulIdentifier", + "src": "2683:9:103" + }, + { + "kind": "number", + "nativeSrc": "2694:2:103", + "nodeType": "YulLiteral", + "src": "2694:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2679:3:103", + "nodeType": "YulIdentifier", + "src": "2679:3:103" + }, + "nativeSrc": "2679:18:103", + "nodeType": "YulFunctionCall", + "src": "2679:18:103" + }, + { + "kind": "number", + "nativeSrc": "2699:2:103", + "nodeType": "YulLiteral", + "src": "2699:2:103", + "type": "", + "value": "33" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2672:6:103", + "nodeType": "YulIdentifier", + "src": "2672:6:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulFunctionCall", + "src": "2672:30:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulExpressionStatement", + "src": "2672:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2722:9:103", + "nodeType": "YulIdentifier", + "src": "2722:9:103" + }, + { + "kind": "number", + "nativeSrc": "2733:2:103", + "nodeType": "YulLiteral", + "src": "2733:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2718:3:103", + "nodeType": "YulIdentifier", + "src": "2718:3:103" + }, + "nativeSrc": "2718:18:103", + "nodeType": "YulFunctionCall", + "src": "2718:18:103" + }, + { + "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c65", + "kind": "string", + "nativeSrc": "2738:34:103", + "nodeType": "YulLiteral", + "src": "2738:34:103", + "type": "", + "value": "WitnetDeployer: deployment faile" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2711:6:103", + "nodeType": "YulIdentifier", + "src": "2711:6:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulFunctionCall", + "src": "2711:62:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulExpressionStatement", + "src": "2711:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2793:9:103", + "nodeType": "YulIdentifier", + "src": "2793:9:103" + }, + { + "kind": "number", + "nativeSrc": "2804:2:103", + "nodeType": "YulLiteral", + "src": "2804:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2789:3:103", + "nodeType": "YulIdentifier", + "src": "2789:3:103" + }, + "nativeSrc": "2789:18:103", + "nodeType": "YulFunctionCall", + "src": "2789:18:103" + }, + { + "hexValue": "64", + "kind": "string", + "nativeSrc": "2809:3:103", + "nodeType": "YulLiteral", + "src": "2809:3:103", + "type": "", + "value": "d" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2782:6:103", + "nodeType": "YulIdentifier", + "src": "2782:6:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulFunctionCall", + "src": "2782:31:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulExpressionStatement", + "src": "2782:31:103" + }, + { + "nativeSrc": "2822:27:103", + "nodeType": "YulAssignment", + "src": "2822:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2834:9:103", + "nodeType": "YulIdentifier", + "src": "2834:9:103" + }, + { + "kind": "number", + "nativeSrc": "2845:3:103", + "nodeType": "YulLiteral", + "src": "2845:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2830:3:103", + "nodeType": "YulIdentifier", + "src": "2830:3:103" + }, + "nativeSrc": "2830:19:103", + "nodeType": "YulFunctionCall", + "src": "2830:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2822:4:103", + "nodeType": "YulIdentifier", + "src": "2822:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2458:397:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2609:9:103", + "nodeType": "YulTypedName", + "src": "2609:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2623:4:103", + "nodeType": "YulTypedName", + "src": "2623:4:103", + "type": "" + } + ], + "src": "2458:397:103" + }, + { + "body": { + "nativeSrc": "3007:496:103", + "nodeType": "YulBlock", + "src": "3007:496:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3024:9:103", + "nodeType": "YulIdentifier", + "src": "3024:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3039:6:103", + "nodeType": "YulIdentifier", + "src": "3039:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3055:3:103", + "nodeType": "YulLiteral", + "src": "3055:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3060:1:103", + "nodeType": "YulLiteral", + "src": "3060:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3051:3:103", + "nodeType": "YulIdentifier", + "src": "3051:3:103" + }, + "nativeSrc": "3051:11:103", + "nodeType": "YulFunctionCall", + "src": "3051:11:103" + }, + { + "kind": "number", + "nativeSrc": "3064:1:103", + "nodeType": "YulLiteral", + "src": "3064:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3047:3:103", + "nodeType": "YulIdentifier", + "src": "3047:3:103" + }, + "nativeSrc": "3047:19:103", + "nodeType": "YulFunctionCall", + "src": "3047:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3035:3:103", + "nodeType": "YulIdentifier", + "src": "3035:3:103" + }, + "nativeSrc": "3035:32:103", + "nodeType": "YulFunctionCall", + "src": "3035:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3017:6:103", + "nodeType": "YulIdentifier", + "src": "3017:6:103" + }, + "nativeSrc": "3017:51:103", + "nodeType": "YulFunctionCall", + "src": "3017:51:103" + }, + "nativeSrc": "3017:51:103", + "nodeType": "YulExpressionStatement", + "src": "3017:51:103" + }, + { + "nativeSrc": "3077:12:103", + "nodeType": "YulVariableDeclaration", + "src": "3077:12:103", + "value": { + "kind": "number", + "nativeSrc": "3087:2:103", + "nodeType": "YulLiteral", + "src": "3087:2:103", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "3081:2:103", + "nodeType": "YulTypedName", + "src": "3081:2:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3109:9:103", + "nodeType": "YulIdentifier", + "src": "3109:9:103" + }, + { + "kind": "number", + "nativeSrc": "3120:2:103", + "nodeType": "YulLiteral", + "src": "3120:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3105:3:103", + "nodeType": "YulIdentifier", + "src": "3105:3:103" + }, + "nativeSrc": "3105:18:103", + "nodeType": "YulFunctionCall", + "src": "3105:18:103" + }, + { + "kind": "number", + "nativeSrc": "3125:2:103", + "nodeType": "YulLiteral", + "src": "3125:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3098:6:103", + "nodeType": "YulIdentifier", + "src": "3098:6:103" + }, + "nativeSrc": "3098:30:103", + "nodeType": "YulFunctionCall", + "src": "3098:30:103" + }, + "nativeSrc": "3098:30:103", + "nodeType": "YulExpressionStatement", + "src": "3098:30:103" + }, + { + "nativeSrc": "3137:27:103", + "nodeType": "YulVariableDeclaration", + "src": "3137:27:103", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3157:6:103", + "nodeType": "YulIdentifier", + "src": "3157:6:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3151:5:103", + "nodeType": "YulIdentifier", + "src": "3151:5:103" + }, + "nativeSrc": "3151:13:103", + "nodeType": "YulFunctionCall", + "src": "3151:13:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "3141:6:103", + "nodeType": "YulTypedName", + "src": "3141:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3184:9:103", + "nodeType": "YulIdentifier", + "src": "3184:9:103" + }, + { + "kind": "number", + "nativeSrc": "3195:2:103", + "nodeType": "YulLiteral", + "src": "3195:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3180:3:103", + "nodeType": "YulIdentifier", + "src": "3180:3:103" + }, + "nativeSrc": "3180:18:103", + "nodeType": "YulFunctionCall", + "src": "3180:18:103" + }, + { + "name": "length", + "nativeSrc": "3200:6:103", + "nodeType": "YulIdentifier", + "src": "3200:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3173:6:103", + "nodeType": "YulIdentifier", + "src": "3173:6:103" + }, + "nativeSrc": "3173:34:103", + "nodeType": "YulFunctionCall", + "src": "3173:34:103" + }, + "nativeSrc": "3173:34:103", + "nodeType": "YulExpressionStatement", + "src": "3173:34:103" + }, + { + "nativeSrc": "3216:10:103", + "nodeType": "YulVariableDeclaration", + "src": "3216:10:103", + "value": { + "kind": "number", + "nativeSrc": "3225:1:103", + "nodeType": "YulLiteral", + "src": "3225:1:103", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "3220:1:103", + "nodeType": "YulTypedName", + "src": "3220:1:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3285:90:103", + "nodeType": "YulBlock", + "src": "3285:90:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3314:9:103", + "nodeType": "YulIdentifier", + "src": "3314:9:103" + }, + { + "name": "i", + "nativeSrc": "3325:1:103", + "nodeType": "YulIdentifier", + "src": "3325:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3310:3:103", + "nodeType": "YulIdentifier", + "src": "3310:3:103" + }, + "nativeSrc": "3310:17:103", + "nodeType": "YulFunctionCall", + "src": "3310:17:103" + }, + { + "kind": "number", + "nativeSrc": "3329:2:103", + "nodeType": "YulLiteral", + "src": "3329:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3306:3:103", + "nodeType": "YulIdentifier", + "src": "3306:3:103" + }, + "nativeSrc": "3306:26:103", + "nodeType": "YulFunctionCall", + "src": "3306:26:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3348:6:103", + "nodeType": "YulIdentifier", + "src": "3348:6:103" + }, + { + "name": "i", + "nativeSrc": "3356:1:103", + "nodeType": "YulIdentifier", + "src": "3356:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3344:3:103", + "nodeType": "YulIdentifier", + "src": "3344:3:103" + }, + "nativeSrc": "3344:14:103", + "nodeType": "YulFunctionCall", + "src": "3344:14:103" + }, + { + "name": "_1", + "nativeSrc": "3360:2:103", + "nodeType": "YulIdentifier", + "src": "3360:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3340:3:103", + "nodeType": "YulIdentifier", + "src": "3340:3:103" + }, + "nativeSrc": "3340:23:103", + "nodeType": "YulFunctionCall", + "src": "3340:23:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3334:5:103", + "nodeType": "YulIdentifier", + "src": "3334:5:103" + }, + "nativeSrc": "3334:30:103", + "nodeType": "YulFunctionCall", + "src": "3334:30:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3299:6:103", + "nodeType": "YulIdentifier", + "src": "3299:6:103" + }, + "nativeSrc": "3299:66:103", + "nodeType": "YulFunctionCall", + "src": "3299:66:103" + }, + "nativeSrc": "3299:66:103", + "nodeType": "YulExpressionStatement", + "src": "3299:66:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3246:1:103", + "nodeType": "YulIdentifier", + "src": "3246:1:103" + }, + { + "name": "length", + "nativeSrc": "3249:6:103", + "nodeType": "YulIdentifier", + "src": "3249:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "3243:2:103", + "nodeType": "YulIdentifier", + "src": "3243:2:103" + }, + "nativeSrc": "3243:13:103", + "nodeType": "YulFunctionCall", + "src": "3243:13:103" + }, + "nativeSrc": "3235:140:103", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "3257:19:103", + "nodeType": "YulBlock", + "src": "3257:19:103", + "statements": [ + { + "nativeSrc": "3259:15:103", + "nodeType": "YulAssignment", + "src": "3259:15:103", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3268:1:103", + "nodeType": "YulIdentifier", + "src": "3268:1:103" + }, + { + "name": "_1", + "nativeSrc": "3271:2:103", + "nodeType": "YulIdentifier", + "src": "3271:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3264:3:103", + "nodeType": "YulIdentifier", + "src": "3264:3:103" + }, + "nativeSrc": "3264:10:103", + "nodeType": "YulFunctionCall", + "src": "3264:10:103" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "3259:1:103", + "nodeType": "YulIdentifier", + "src": "3259:1:103" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "3239:3:103", + "nodeType": "YulBlock", + "src": "3239:3:103", + "statements": [] + }, + "src": "3235:140:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3399:9:103", + "nodeType": "YulIdentifier", + "src": "3399:9:103" + }, + { + "name": "length", + "nativeSrc": "3410:6:103", + "nodeType": "YulIdentifier", + "src": "3410:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3395:3:103", + "nodeType": "YulIdentifier", + "src": "3395:3:103" + }, + "nativeSrc": "3395:22:103", + "nodeType": "YulFunctionCall", + "src": "3395:22:103" + }, + { + "kind": "number", + "nativeSrc": "3419:2:103", + "nodeType": "YulLiteral", + "src": "3419:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3391:3:103", + "nodeType": "YulIdentifier", + "src": "3391:3:103" + }, + "nativeSrc": "3391:31:103", + "nodeType": "YulFunctionCall", + "src": "3391:31:103" + }, + { + "kind": "number", + "nativeSrc": "3424:1:103", + "nodeType": "YulLiteral", + "src": "3424:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3384:6:103", + "nodeType": "YulIdentifier", + "src": "3384:6:103" + }, + "nativeSrc": "3384:42:103", + "nodeType": "YulFunctionCall", + "src": "3384:42:103" + }, + "nativeSrc": "3384:42:103", + "nodeType": "YulExpressionStatement", + "src": "3384:42:103" + }, + { + "nativeSrc": "3435:62:103", + "nodeType": "YulAssignment", + "src": "3435:62:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3451:9:103", + "nodeType": "YulIdentifier", + "src": "3451:9:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "3470:6:103", + "nodeType": "YulIdentifier", + "src": "3470:6:103" + }, + { + "kind": "number", + "nativeSrc": "3478:2:103", + "nodeType": "YulLiteral", + "src": "3478:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3466:3:103", + "nodeType": "YulIdentifier", + "src": "3466:3:103" + }, + "nativeSrc": "3466:15:103", + "nodeType": "YulFunctionCall", + "src": "3466:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3487:2:103", + "nodeType": "YulLiteral", + "src": "3487:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3483:3:103", + "nodeType": "YulIdentifier", + "src": "3483:3:103" + }, + "nativeSrc": "3483:7:103", + "nodeType": "YulFunctionCall", + "src": "3483:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3462:3:103", + "nodeType": "YulIdentifier", + "src": "3462:3:103" + }, + "nativeSrc": "3462:29:103", + "nodeType": "YulFunctionCall", + "src": "3462:29:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3447:3:103", + "nodeType": "YulIdentifier", + "src": "3447:3:103" + }, + "nativeSrc": "3447:45:103", + "nodeType": "YulFunctionCall", + "src": "3447:45:103" + }, + { + "kind": "number", + "nativeSrc": "3494:2:103", + "nodeType": "YulLiteral", + "src": "3494:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3443:3:103", + "nodeType": "YulIdentifier", + "src": "3443:3:103" + }, + "nativeSrc": "3443:54:103", + "nodeType": "YulFunctionCall", + "src": "3443:54:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3435:4:103", + "nodeType": "YulIdentifier", + "src": "3435:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "2860:643:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2968:9:103", + "nodeType": "YulTypedName", + "src": "2968:9:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2979:6:103", + "nodeType": "YulTypedName", + "src": "2979:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2987:6:103", + "nodeType": "YulTypedName", + "src": "2987:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2998:4:103", + "nodeType": "YulTypedName", + "src": "2998:4:103", + "type": "" + } + ], + "src": "2860:643:103" + }, + { + "body": { + "nativeSrc": "3586:199:103", + "nodeType": "YulBlock", + "src": "3586:199:103", + "statements": [ + { + "body": { + "nativeSrc": "3632:16:103", + "nodeType": "YulBlock", + "src": "3632:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3641:1:103", + "nodeType": "YulLiteral", + "src": "3641:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3644:1:103", + "nodeType": "YulLiteral", + "src": "3644:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3634:6:103", + "nodeType": "YulIdentifier", + "src": "3634:6:103" + }, + "nativeSrc": "3634:12:103", + "nodeType": "YulFunctionCall", + "src": "3634:12:103" + }, + "nativeSrc": "3634:12:103", + "nodeType": "YulExpressionStatement", + "src": "3634:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3607:7:103", + "nodeType": "YulIdentifier", + "src": "3607:7:103" + }, + { + "name": "headStart", + "nativeSrc": "3616:9:103", + "nodeType": "YulIdentifier", + "src": "3616:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3603:3:103", + "nodeType": "YulIdentifier", + "src": "3603:3:103" + }, + "nativeSrc": "3603:23:103", + "nodeType": "YulFunctionCall", + "src": "3603:23:103" + }, + { + "kind": "number", + "nativeSrc": "3628:2:103", + "nodeType": "YulLiteral", + "src": "3628:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3599:3:103", + "nodeType": "YulIdentifier", + "src": "3599:3:103" + }, + "nativeSrc": "3599:32:103", + "nodeType": "YulFunctionCall", + "src": "3599:32:103" + }, + "nativeSrc": "3596:52:103", + "nodeType": "YulIf", + "src": "3596:52:103" + }, + { + "nativeSrc": "3657:29:103", + "nodeType": "YulVariableDeclaration", + "src": "3657:29:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3676:9:103", + "nodeType": "YulIdentifier", + "src": "3676:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3670:5:103", + "nodeType": "YulIdentifier", + "src": "3670:5:103" + }, + "nativeSrc": "3670:16:103", + "nodeType": "YulFunctionCall", + "src": "3670:16:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3661:5:103", + "nodeType": "YulTypedName", + "src": "3661:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3739:16:103", + "nodeType": "YulBlock", + "src": "3739:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3748:1:103", + "nodeType": "YulLiteral", + "src": "3748:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3751:1:103", + "nodeType": "YulLiteral", + "src": "3751:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3741:6:103", + "nodeType": "YulIdentifier", + "src": "3741:6:103" + }, + "nativeSrc": "3741:12:103", + "nodeType": "YulFunctionCall", + "src": "3741:12:103" + }, + "nativeSrc": "3741:12:103", + "nodeType": "YulExpressionStatement", + "src": "3741:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3708:5:103", + "nodeType": "YulIdentifier", + "src": "3708:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3729:5:103", + "nodeType": "YulIdentifier", + "src": "3729:5:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3722:6:103", + "nodeType": "YulIdentifier", + "src": "3722:6:103" + }, + "nativeSrc": "3722:13:103", + "nodeType": "YulFunctionCall", + "src": "3722:13:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3715:6:103", + "nodeType": "YulIdentifier", + "src": "3715:6:103" + }, + "nativeSrc": "3715:21:103", + "nodeType": "YulFunctionCall", + "src": "3715:21:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3705:2:103", + "nodeType": "YulIdentifier", + "src": "3705:2:103" + }, + "nativeSrc": "3705:32:103", + "nodeType": "YulFunctionCall", + "src": "3705:32:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3698:6:103", + "nodeType": "YulIdentifier", + "src": "3698:6:103" + }, + "nativeSrc": "3698:40:103", + "nodeType": "YulFunctionCall", + "src": "3698:40:103" + }, + "nativeSrc": "3695:60:103", + "nodeType": "YulIf", + "src": "3695:60:103" + }, + { + "nativeSrc": "3764:15:103", + "nodeType": "YulAssignment", + "src": "3764:15:103", + "value": { + "name": "value", + "nativeSrc": "3774:5:103", + "nodeType": "YulIdentifier", + "src": "3774:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "3764:6:103", + "nodeType": "YulIdentifier", + "src": "3764:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "3508:277:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3552:9:103", + "nodeType": "YulTypedName", + "src": "3552:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3563:7:103", + "nodeType": "YulTypedName", + "src": "3563:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3575:6:103", + "nodeType": "YulTypedName", + "src": "3575:6:103", + "type": "" + } + ], + "src": "3508:277:103" + }, + { + "body": { + "nativeSrc": "3964:234:103", + "nodeType": "YulBlock", + "src": "3964:234:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3981:9:103", + "nodeType": "YulIdentifier", + "src": "3981:9:103" + }, + { + "kind": "number", + "nativeSrc": "3992:2:103", + "nodeType": "YulLiteral", + "src": "3992:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3974:6:103", + "nodeType": "YulIdentifier", + "src": "3974:6:103" + }, + "nativeSrc": "3974:21:103", + "nodeType": "YulFunctionCall", + "src": "3974:21:103" + }, + "nativeSrc": "3974:21:103", + "nodeType": "YulExpressionStatement", + "src": "3974:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4015:9:103", + "nodeType": "YulIdentifier", + "src": "4015:9:103" + }, + { + "kind": "number", + "nativeSrc": "4026:2:103", + "nodeType": "YulLiteral", + "src": "4026:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4011:3:103", + "nodeType": "YulIdentifier", + "src": "4011:3:103" + }, + "nativeSrc": "4011:18:103", + "nodeType": "YulFunctionCall", + "src": "4011:18:103" + }, + { + "kind": "number", + "nativeSrc": "4031:2:103", + "nodeType": "YulLiteral", + "src": "4031:2:103", + "type": "", + "value": "44" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4004:6:103", + "nodeType": "YulIdentifier", + "src": "4004:6:103" + }, + "nativeSrc": "4004:30:103", + "nodeType": "YulFunctionCall", + "src": "4004:30:103" + }, + "nativeSrc": "4004:30:103", + "nodeType": "YulExpressionStatement", + "src": "4004:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4054:9:103", + "nodeType": "YulIdentifier", + "src": "4054:9:103" + }, + { + "kind": "number", + "nativeSrc": "4065:2:103", + "nodeType": "YulLiteral", + "src": "4065:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4050:3:103", + "nodeType": "YulIdentifier", + "src": "4050:3:103" + }, + "nativeSrc": "4050:18:103", + "nodeType": "YulFunctionCall", + "src": "4050:18:103" + }, + { + "hexValue": "5769746e65744465706c6f796572436f6e666c7578436f72653a20616c726561", + "kind": "string", + "nativeSrc": "4070:34:103", + "nodeType": "YulLiteral", + "src": "4070:34:103", + "type": "", + "value": "WitnetDeployerConfluxCore: alrea" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4043:6:103", + "nodeType": "YulIdentifier", + "src": "4043:6:103" + }, + "nativeSrc": "4043:62:103", + "nodeType": "YulFunctionCall", + "src": "4043:62:103" + }, + "nativeSrc": "4043:62:103", + "nodeType": "YulExpressionStatement", + "src": "4043:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4125:9:103", + "nodeType": "YulIdentifier", + "src": "4125:9:103" + }, + { + "kind": "number", + "nativeSrc": "4136:2:103", + "nodeType": "YulLiteral", + "src": "4136:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4121:3:103", + "nodeType": "YulIdentifier", + "src": "4121:3:103" + }, + "nativeSrc": "4121:18:103", + "nodeType": "YulFunctionCall", + "src": "4121:18:103" + }, + { + "hexValue": "64792070726f786966696564", + "kind": "string", + "nativeSrc": "4141:14:103", + "nodeType": "YulLiteral", + "src": "4141:14:103", + "type": "", + "value": "dy proxified" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4114:6:103", + "nodeType": "YulIdentifier", + "src": "4114:6:103" + }, + "nativeSrc": "4114:42:103", + "nodeType": "YulFunctionCall", + "src": "4114:42:103" + }, + "nativeSrc": "4114:42:103", + "nodeType": "YulExpressionStatement", + "src": "4114:42:103" + }, + { + "nativeSrc": "4165:27:103", + "nodeType": "YulAssignment", + "src": "4165:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4177:9:103", + "nodeType": "YulIdentifier", + "src": "4177:9:103" + }, + { + "kind": "number", + "nativeSrc": "4188:3:103", + "nodeType": "YulLiteral", + "src": "4188:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4173:3:103", + "nodeType": "YulIdentifier", + "src": "4173:3:103" + }, + "nativeSrc": "4173:19:103", + "nodeType": "YulFunctionCall", + "src": "4173:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4165:4:103", + "nodeType": "YulIdentifier", + "src": "4165:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_65817204dea5927f14b134534592238589b47b1c532975b5952b836ed27903ee__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "3790:408:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3941:9:103", + "nodeType": "YulTypedName", + "src": "3941:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3955:4:103", + "nodeType": "YulTypedName", + "src": "3955:4:103", + "type": "" + } + ], + "src": "3790:408:103" + }, + { + "body": { + "nativeSrc": "4404:240:103", + "nodeType": "YulBlock", + "src": "4404:240:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4421:3:103", + "nodeType": "YulIdentifier", + "src": "4421:3:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4430:6:103", + "nodeType": "YulIdentifier", + "src": "4430:6:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4442:3:103", + "nodeType": "YulLiteral", + "src": "4442:3:103", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "4447:3:103", + "nodeType": "YulLiteral", + "src": "4447:3:103", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4438:3:103", + "nodeType": "YulIdentifier", + "src": "4438:3:103" + }, + "nativeSrc": "4438:13:103", + "nodeType": "YulFunctionCall", + "src": "4438:13:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4426:3:103", + "nodeType": "YulIdentifier", + "src": "4426:3:103" + }, + "nativeSrc": "4426:26:103", + "nodeType": "YulFunctionCall", + "src": "4426:26:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4414:6:103", + "nodeType": "YulIdentifier", + "src": "4414:6:103" + }, + "nativeSrc": "4414:39:103", + "nodeType": "YulFunctionCall", + "src": "4414:39:103" + }, + "nativeSrc": "4414:39:103", + "nodeType": "YulExpressionStatement", + "src": "4414:39:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4473:3:103", + "nodeType": "YulIdentifier", + "src": "4473:3:103" + }, + { + "kind": "number", + "nativeSrc": "4478:1:103", + "nodeType": "YulLiteral", + "src": "4478:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4469:3:103", + "nodeType": "YulIdentifier", + "src": "4469:3:103" + }, + "nativeSrc": "4469:11:103", + "nodeType": "YulFunctionCall", + "src": "4469:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4490:2:103", + "nodeType": "YulLiteral", + "src": "4490:2:103", + "type": "", + "value": "96" + }, + { + "name": "value1", + "nativeSrc": "4494:6:103", + "nodeType": "YulIdentifier", + "src": "4494:6:103" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4486:3:103", + "nodeType": "YulIdentifier", + "src": "4486:3:103" + }, + "nativeSrc": "4486:15:103", + "nodeType": "YulFunctionCall", + "src": "4486:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4507:26:103", + "nodeType": "YulLiteral", + "src": "4507:26:103", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "4503:3:103", + "nodeType": "YulIdentifier", + "src": "4503:3:103" + }, + "nativeSrc": "4503:31:103", + "nodeType": "YulFunctionCall", + "src": "4503:31:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4482:3:103", + "nodeType": "YulIdentifier", + "src": "4482:3:103" + }, + "nativeSrc": "4482:53:103", + "nodeType": "YulFunctionCall", + "src": "4482:53:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4462:6:103", + "nodeType": "YulIdentifier", + "src": "4462:6:103" + }, + "nativeSrc": "4462:74:103", + "nodeType": "YulFunctionCall", + "src": "4462:74:103" + }, + "nativeSrc": "4462:74:103", + "nodeType": "YulExpressionStatement", + "src": "4462:74:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4556:3:103", + "nodeType": "YulIdentifier", + "src": "4556:3:103" + }, + { + "kind": "number", + "nativeSrc": "4561:2:103", + "nodeType": "YulLiteral", + "src": "4561:2:103", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4552:3:103", + "nodeType": "YulIdentifier", + "src": "4552:3:103" + }, + "nativeSrc": "4552:12:103", + "nodeType": "YulFunctionCall", + "src": "4552:12:103" + }, + { + "name": "value2", + "nativeSrc": "4566:6:103", + "nodeType": "YulIdentifier", + "src": "4566:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4545:6:103", + "nodeType": "YulIdentifier", + "src": "4545:6:103" + }, + "nativeSrc": "4545:28:103", + "nodeType": "YulFunctionCall", + "src": "4545:28:103" + }, + "nativeSrc": "4545:28:103", + "nodeType": "YulExpressionStatement", + "src": "4545:28:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4593:3:103", + "nodeType": "YulIdentifier", + "src": "4593:3:103" + }, + { + "kind": "number", + "nativeSrc": "4598:2:103", + "nodeType": "YulLiteral", + "src": "4598:2:103", + "type": "", + "value": "53" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4589:3:103", + "nodeType": "YulIdentifier", + "src": "4589:3:103" + }, + "nativeSrc": "4589:12:103", + "nodeType": "YulFunctionCall", + "src": "4589:12:103" + }, + { + "name": "value3", + "nativeSrc": "4603:6:103", + "nodeType": "YulIdentifier", + "src": "4603:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4582:6:103", + "nodeType": "YulIdentifier", + "src": "4582:6:103" + }, + "nativeSrc": "4582:28:103", + "nodeType": "YulFunctionCall", + "src": "4582:28:103" + }, + "nativeSrc": "4582:28:103", + "nodeType": "YulExpressionStatement", + "src": "4582:28:103" + }, + { + "nativeSrc": "4619:19:103", + "nodeType": "YulAssignment", + "src": "4619:19:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4630:3:103", + "nodeType": "YulIdentifier", + "src": "4630:3:103" + }, + { + "kind": "number", + "nativeSrc": "4635:2:103", + "nodeType": "YulLiteral", + "src": "4635:2:103", + "type": "", + "value": "85" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4626:3:103", + "nodeType": "YulIdentifier", + "src": "4626:3:103" + }, + "nativeSrc": "4626:12:103", + "nodeType": "YulFunctionCall", + "src": "4626:12:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "4619:3:103", + "nodeType": "YulIdentifier", + "src": "4619:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "4203:441:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "4356:3:103", + "nodeType": "YulTypedName", + "src": "4356:3:103", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "4361:6:103", + "nodeType": "YulTypedName", + "src": "4361:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "4369:6:103", + "nodeType": "YulTypedName", + "src": "4369:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "4377:6:103", + "nodeType": "YulTypedName", + "src": "4377:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4385:6:103", + "nodeType": "YulTypedName", + "src": "4385:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "4396:3:103", + "nodeType": "YulTypedName", + "src": "4396:3:103", + "type": "" + } + ], + "src": "4203:441:103" + } + ] + }, + "contents": "{\n { }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n let _2 := 0xffffffffffffffff\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n mstore(add(add(memPtr, _1), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value1 := value\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n }\n function abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 33)\n mstore(add(headStart, 64), \"WitnetDeployer: deployment faile\")\n mstore(add(headStart, 96), \"d\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n let _1 := 32\n mstore(add(headStart, 32), 64)\n let length := mload(value1)\n mstore(add(headStart, 64), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n }\n mstore(add(add(headStart, length), 96), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_65817204dea5927f14b134534592238589b47b1c532975b5952b836ed27903ee__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 44)\n mstore(add(headStart, 64), \"WitnetDeployerConfluxCore: alrea\")\n mstore(add(headStart, 96), \"dy proxified\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, and(value0, shl(248, 255)))\n mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 21), value2)\n mstore(add(pos, 53), value3)\n end := add(pos, 85)\n }\n}", + "id": 103, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "368:2175:19:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "368:2175:19:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1335:201;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:103;;;345:51;;333:2;318:18;1335:201:19;;;;;;;900:448:18;;;;;;:::i;:::-;;:::i;1544:994:19:-;;;;;;:::i;:::-;;:::i;768:559::-;;;;;;:::i;:::-;;:::i;1335:201::-;1444:7;1476:52;1490:30;;;;;;;;:::i;:::-;-1:-1:-1;;1490:30:19;;;;;;;;;;;;;;1522:5;1476:13;:52::i;:::-;1469:59;1335:201;-1:-1:-1;;1335:201:19:o;900:448:18:-;997:17;1044:31;1058:9;1069:5;1044:13;:31::i;:::-;1032:43;;1090:9;-1:-1:-1;;;;;1090:21:18;;1115:1;1090:26;1086:255;;1225:5;1213:9;1207:16;1200:4;1189:9;1185:20;1182:1;1174:57;1161:70;-1:-1:-1;;;;;;1268:23:18;;1260:69;;;;-1:-1:-1;;;1260:69:18;;2660:2:103;1260:69:18;;;2642:21:103;2699:2;2679:18;;;2672:30;2738:34;2718:18;;;2711:62;-1:-1:-1;;;2789:18:103;;;2782:31;2830:19;;1260:69:18;;;;;;;;1544:994:19;1689:11;1718:18;1739:30;1758:10;1739:18;:30::i;:::-;1718:51;;1784:10;-1:-1:-1;;;;;1784:22:19;;1810:1;1784:27;1780:751;;1867:50;1874:30;;;;;;;;:::i;:::-;-1:-1:-1;;1874:30:19;;;;;;;;;;;;;;1906:10;1867:6;:50::i;:::-;;2005:10;-1:-1:-1;;;;;1985:42:19;;2046:20;2237:10;2335:9;2135:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1985:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2420:10:19;-1:-1:-1;2393:39:19;;1780:751;2465:54;;-1:-1:-1;;;2465:54:19;;3992:2:103;2465:54:19;;;3974:21:103;4031:2;4011:18;;;4004:30;4070:34;4050:18;;;4043:62;-1:-1:-1;;;4121:18:103;;;4114:42;4173:19;;2465:54:19;3790:408:103;1544:994:19;;;;;;:::o;768:559::-;1129:20;;;;;;;991:177;;;-1:-1:-1;;;;;;991:177:19;;;4414:39:103;1073:4:19;4490:2:103;4486:15;-1:-1:-1;;4482:53:103;4469:11;;;4462:74;4552:12;;;4545:28;;;;4589:12;;;;4582:28;;;;991:177:19;;;;;;;;;;4626:12:103;;;;991:177:19;;;963:220;;;;;-1:-1:-1;;;;;950:289:19;-1:-1:-1;;;949:359:19;;768:559::o;-1:-1:-1:-;;;;;;;;:::o;14:180:103:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:103;;14:180;-1:-1:-1;14:180:103:o;407:127::-;468:10;463:3;459:20;456:1;449:31;499:4;496:1;489:15;523:4;520:1;513:15;539:718;581:5;634:3;627:4;619:6;615:17;611:27;601:55;;652:1;649;642:12;601:55;688:6;675:20;714:18;751:2;747;744:10;741:36;;;757:18;;:::i;:::-;832:2;826:9;800:2;886:13;;-1:-1:-1;;882:22:103;;;906:2;878:31;874:40;862:53;;;930:18;;;950:22;;;927:46;924:72;;;976:18;;:::i;:::-;1016:10;1012:2;1005:22;1051:2;1043:6;1036:18;1097:3;1090:4;1085:2;1077:6;1073:15;1069:26;1066:35;1063:55;;;1114:1;1111;1104:12;1063:55;1178:2;1171:4;1163:6;1159:17;1152:4;1144:6;1140:17;1127:54;1225:1;1218:4;1213:2;1205:6;1201:15;1197:26;1190:37;1245:6;1236:15;;;;;;539:718;;;;:::o;1262:388::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1456:9;1443:23;1489:18;1481:6;1478:30;1475:50;;;1521:1;1518;1511:12;1475:50;1544:49;1585:7;1576:6;1565:9;1561:22;1544:49;:::i;:::-;1534:59;1640:2;1625:18;;;;1612:32;;-1:-1:-1;;;;1262:388:103:o;1655:562::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:23;;;-1:-1:-1;1922:2:103;1907:18;;1894:32;-1:-1:-1;;;;;1955:31:103;;1945:42;;1935:70;;2001:1;1998;1991:12;1935:70;2024:5;-1:-1:-1;2080:2:103;2065:18;;2052:32;2107:18;2096:30;;2093:50;;;2139:1;2136;2129:12;2093:50;2162:49;2203:7;2194:6;2183:9;2179:22;2162:49;:::i;:::-;2152:59;;;1655:562;;;;;:::o;2860:643::-;3064:1;3060;3055:3;3051:11;3047:19;3039:6;3035:32;3024:9;3017:51;2998:4;3087:2;3125;3120;3109:9;3105:18;3098:30;3157:6;3151:13;3200:6;3195:2;3184:9;3180:18;3173:34;3225:1;3235:140;3249:6;3246:1;3243:13;3235:140;;;3344:14;;;3340:23;;3334:30;3310:17;;;3329:2;3306:26;3299:66;3264:10;;3235:140;;;3239:3;3424:1;3419:2;3410:6;3399:9;3395:22;3391:31;3384:42;3494:2;3487;3483:7;3478:2;3470:6;3466:15;3462:29;3451:9;3447:45;3443:54;3435:62;;;;2860:643;;;;;:::o;3508:277::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3676:9;3670:16;3729:5;3722:13;3715:21;3708:5;3705:32;3695:60;;3751:1;3748;3741:12", + "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"./WitnetDeployer.sol\";\r\n\r\n/// @notice WitnetDeployerConfluxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \r\n/// @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\r\n/// @author Guillermo Díaz \r\n\r\ncontract WitnetDeployerConfluxCore is WitnetDeployer {\r\n\r\n /// @notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\r\n /// @param _initCode Creation code, including construction logic and input parameters.\r\n /// @param _salt Arbitrary value to modify resulting address.\r\n /// @return Deterministic contract address.\r\n function determineAddr(bytes memory _initCode, bytes32 _salt)\r\n virtual override\r\n public view\r\n returns (address)\r\n {\r\n return address(\r\n (uint160(uint(keccak256(\r\n abi.encodePacked(\r\n bytes1(0xff),\r\n address(this),\r\n _salt,\r\n keccak256(_initCode)\r\n )\r\n ))) & uint160(0x0fffFFFFFfFfffFfFfFFffFffFffFFfffFfFFFFf)\r\n ) | uint160(0x8000000000000000000000000000000000000000)\r\n );\r\n }\r\n\r\n function determineProxyAddr(bytes32 _salt) \r\n virtual override\r\n public view\r\n returns (address)\r\n {\r\n return determineAddr(type(WitnetProxy).creationCode, _salt);\r\n }\r\n\r\n function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n virtual override external \r\n returns (WitnetProxy)\r\n {\r\n address _proxyAddr = determineProxyAddr(_proxySalt);\r\n if (_proxyAddr.code.length == 0) {\r\n // deploy the WitnetProxy\r\n deploy(type(WitnetProxy).creationCode, _proxySalt);\r\n // settle first implementation address,\r\n WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n _firstImplementation, \r\n // and initialize it, providing\r\n abi.encode(\r\n // the owner (i.e. the caller of this function)\r\n msg.sender,\r\n // and some (optional) initialization data\r\n _initData\r\n )\r\n );\r\n return WitnetProxy(payable(_proxyAddr));\r\n } else {\r\n revert(\"WitnetDeployerConfluxCore: already proxified\");\r\n }\r\n }\r\n\r\n}", + "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetDeployerConfluxCore.sol", + "ast": { + "absolutePath": "project:/contracts/core/WitnetDeployerConfluxCore.sol", + "exportedSymbols": { + "Create3": [ + 17522 + ], + "ERC165": [ + 602 + ], + "IERC165": [ + 614 + ], + "Initializable": [ + 253 + ], + "Proxiable": [ + 30273 + ], + "Upgradeable": [ + 30388 + ], + "WitnetDeployer": [ + 4262 + ], + "WitnetDeployerConfluxCore": [ + 4399 + ], + "WitnetProxy": [ + 4713 + ] + }, + "id": 4400, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4264, + "literals": [ + "solidity", + ">=", + "0.8", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "35:31:19" + }, + { + "absolutePath": "project:/contracts/core/WitnetDeployer.sol", + "file": "./WitnetDeployer.sol", + "id": 4265, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4400, + "sourceUnit": 4263, + "src": "70:30:19", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 4267, + "name": "WitnetDeployer", + "nameLocations": [ + "406:14:19" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4262, + "src": "406:14:19" + }, + "id": 4268, + "nodeType": "InheritanceSpecifier", + "src": "406:14:19" + } + ], + "canonicalName": "WitnetDeployerConfluxCore", + "contractDependencies": [ + 4713 + ], + "contractKind": "contract", + "documentation": { + "id": 4266, + "nodeType": "StructuredDocumentation", + "src": "104:262:19", + "text": "@notice WitnetDeployerConfluxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \n @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.\n @author Guillermo Díaz " + }, + "fullyImplemented": true, + "id": 4399, + "linearizedBaseContracts": [ + 4399, + 4262 + ], + "name": "WitnetDeployerConfluxCore", + "nameLocation": "377:25:19", + "nodeType": "ContractDefinition", + "nodes": [ + { + "baseFunctions": [ + 4184 + ], + "body": { + "id": 4317, + "nodeType": "Block", + "src": "909:418:19", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "id": 4314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "components": [ + { + "commonType": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + }, + "id": 4308, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "hexValue": "30786666", + "id": 4290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1037:4:19", + "typeDescriptions": { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + }, + "value": "0xff" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_255_by_1", + "typeString": "int_const 255" + } + ], + "id": 4289, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1030:6:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bytes1_$", + "typeString": "type(bytes1)" + }, + "typeName": { + "id": 4288, + "name": "bytes1", + "nodeType": "ElementaryTypeName", + "src": "1030:6:19", + "typeDescriptions": {} + } + }, + "id": 4291, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1030:12:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + } + }, + { + "arguments": [ + { + "id": 4294, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967268, + "src": "1073:4:19", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetDeployerConfluxCore_$4399", + "typeString": "contract WitnetDeployerConfluxCore" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_WitnetDeployerConfluxCore_$4399", + "typeString": "contract WitnetDeployerConfluxCore" + } + ], + "id": 4293, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1065:7:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4292, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1065:7:19", + "typeDescriptions": {} + } + }, + "id": 4295, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1065:13:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4296, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4273, + "src": "1101:5:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "arguments": [ + { + "id": 4298, + "name": "_initCode", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4271, + "src": "1139:9:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4297, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "1129:9:19", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1129:20:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes1", + "typeString": "bytes1" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "id": 4286, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "991:3:19", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4287, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "995:12:19", + "memberName": "encodePacked", + "nodeType": "MemberAccess", + "src": "991:16:19", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "991:177:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 4285, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967288, + "src": "963:9:19", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 4301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "963:220:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4284, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "958:4:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 4283, + "name": "uint", + "nodeType": "ElementaryTypeName", + "src": "958:4:19", + "typeDescriptions": {} + } + }, + "id": 4302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "958:226:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 4282, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "950:7:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 4281, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "950:7:19", + "typeDescriptions": {} + } + }, + "id": 4303, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "950:235:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "nodeType": "BinaryOperation", + "operator": "&", + "rightExpression": { + "arguments": [ + { + "hexValue": "307830666666464646464666466666664666466646466666466666466666464666666646664646464666", + "id": 4306, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1196:42:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "value": "0x0fffFFFFFfFfffFfFfFFffFffFffFFfffFfFFFFf" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4305, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1188:7:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 4304, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "1188:7:19", + "typeDescriptions": {} + } + }, + "id": 4307, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1188:51:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "src": "950:289:19", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + } + ], + "id": 4309, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "949:305:19", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "nodeType": "BinaryOperation", + "operator": "|", + "rightExpression": { + "arguments": [ + { + "hexValue": "307838303030303030303030303030303030303030303030303030303030303030303030303030303030", + "id": 4312, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1265:42:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "value": "0x8000000000000000000000000000000000000000" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4311, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1257:7:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint160_$", + "typeString": "type(uint160)" + }, + "typeName": { + "id": 4310, + "name": "uint160", + "nodeType": "ElementaryTypeName", + "src": "1257:7:19", + "typeDescriptions": {} + } + }, + "id": 4313, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1257:51:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + }, + "src": "949:359:19", + "typeDescriptions": { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint160", + "typeString": "uint160" + } + ], + "id": 4280, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "927:7:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4279, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "927:7:19", + "typeDescriptions": {} + } + }, + "id": 4315, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "927:392:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4278, + "id": 4316, + "nodeType": "Return", + "src": "920:399:19" + } + ] + }, + "documentation": { + "id": 4269, + "nodeType": "StructuredDocumentation", + "src": "430:332:19", + "text": "@notice Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\n @param _initCode Creation code, including construction logic and input parameters.\n @param _salt Arbitrary value to modify resulting address.\n @return Deterministic contract address." + }, + "functionSelector": "d3933c29", + "id": 4318, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "determineAddr", + "nameLocation": "777:13:19", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4275, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "847:8:19" + }, + "parameters": { + "id": 4274, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4271, + "mutability": "mutable", + "name": "_initCode", + "nameLocation": "804:9:19", + "nodeType": "VariableDeclaration", + "scope": 4318, + "src": "791:22:19", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4270, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "791:5:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4273, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "823:5:19", + "nodeType": "VariableDeclaration", + "scope": 4318, + "src": "815:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4272, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "815:7:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "790:39:19" + }, + "returnParameters": { + "id": 4278, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4277, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4318, + "src": "895:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4276, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "895:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "894:9:19" + }, + "scope": 4399, + "src": "768:559:19", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 4197 + ], + "body": { + "id": 4334, + "nodeType": "Block", + "src": "1458:78:19", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "arguments": [ + { + "id": 4328, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "1495:11:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + ], + "id": 4327, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "1490:4:19", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4329, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1490:17:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$4713", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1508:12:19", + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "1490:30:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 4331, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4320, + "src": "1522:5:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4326, + "name": "determineAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4318 + ], + "referencedDeclaration": 4318, + "src": "1476:13:19", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes memory,bytes32) view returns (address)" + } + }, + "id": 4332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1476:52:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4325, + "id": 4333, + "nodeType": "Return", + "src": "1469:59:19" + } + ] + }, + "functionSelector": "4998f038", + "id": 4335, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "determineProxyAddr", + "nameLocation": "1344:18:19", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4322, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1396:8:19" + }, + "parameters": { + "id": 4321, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4320, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "1371:5:19", + "nodeType": "VariableDeclaration", + "scope": 4335, + "src": "1363:13:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4319, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1363:7:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "1362:15:19" + }, + "returnParameters": { + "id": 4325, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4324, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4335, + "src": "1444:7:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4323, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1444:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1443:9:19" + }, + "scope": 4399, + "src": "1335:201:19", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 4261 + ], + "body": { + "id": 4397, + "nodeType": "Block", + "src": "1707:831:19", + "statements": [ + { + "assignments": [ + 4349 + ], + "declarations": [ + { + "constant": false, + "id": 4349, + "mutability": "mutable", + "name": "_proxyAddr", + "nameLocation": "1726:10:19", + "nodeType": "VariableDeclaration", + "scope": 4397, + "src": "1718:18:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4348, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1718:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4353, + "initialValue": { + "arguments": [ + { + "id": 4351, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "1758:10:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4350, + "name": "determineProxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4335 + ], + "referencedDeclaration": 4335, + "src": "1739:18:19", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) view returns (address)" + } + }, + "id": 4352, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1739:30:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "1718:51:19" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4358, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4354, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "1784:10:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4355, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1795:4:19", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "1784:15:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4356, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1800:6:19", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "1784:22:19", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4357, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1810:1:19", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "1784:27:19", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4395, + "nodeType": "Block", + "src": "2450:81:19", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e65744465706c6f796572436f6e666c7578436f72653a20616c72656164792070726f786966696564", + "id": 4392, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2472:46:19", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_65817204dea5927f14b134534592238589b47b1c532975b5952b836ed27903ee", + "typeString": "literal_string \"WitnetDeployerConfluxCore: already proxified\"" + }, + "value": "WitnetDeployerConfluxCore: already proxified" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_65817204dea5927f14b134534592238589b47b1c532975b5952b836ed27903ee", + "typeString": "literal_string \"WitnetDeployerConfluxCore: already proxified\"" + } + ], + "id": 4391, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "2465:6:19", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4393, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2465:54:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4394, + "nodeType": "ExpressionStatement", + "src": "2465:54:19" + } + ] + }, + "id": 4396, + "nodeType": "IfStatement", + "src": "1780:751:19", + "trueBody": { + "id": 4390, + "nodeType": "Block", + "src": "1813:631:19", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "arguments": [ + { + "id": 4361, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "1879:11:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + ], + "id": 4360, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "1874:4:19", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4362, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1874:17:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$4713", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4363, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1892:12:19", + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "1874:30:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 4364, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4337, + "src": "1906:10:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4359, + "name": "deploy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4146, + "src": "1867:6:19", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes memory,bytes32) returns (address)" + } + }, + "id": 4365, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1867:50:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4366, + "nodeType": "ExpressionStatement", + "src": "1867:50:19" + }, + { + "expression": { + "arguments": [ + { + "id": 4374, + "name": "_firstImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4339, + "src": "2046:20:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 4377, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "2237:3:19", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4378, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2241:6:19", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "2237:10:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4379, + "name": "_initData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4341, + "src": "2335:9:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4375, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "2135:3:19", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4376, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2139:6:19", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2135:10:19", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4380, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2135:228:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4370, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "2005:10:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4369, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1997:8:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4368, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1997:8:19", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4371, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1997:19:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4367, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "1985:11:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4372, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1985:32:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "id": 4373, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2018:9:19", + "memberName": "upgradeTo", + "nodeType": "MemberAccess", + "referencedDeclaration": 4703, + "src": "1985:42:19", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,bytes memory) external returns (bool)" + } + }, + "id": 4381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1985:393:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4382, + "nodeType": "ExpressionStatement", + "src": "1985:393:19" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4386, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4349, + "src": "2420:10:19", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4385, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2412:8:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4384, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2412:8:19", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4387, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2412:19:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4383, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "2400:11:19", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4388, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2400:32:19", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "functionReturnParameters": 4347, + "id": 4389, + "nodeType": "Return", + "src": "2393:39:19" + } + ] + } + } + ] + }, + "functionSelector": "5ba489e7", + "id": 4398, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "proxify", + "nameLocation": "1553:7:19", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4343, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1652:8:19" + }, + "parameters": { + "id": 4342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4337, + "mutability": "mutable", + "name": "_proxySalt", + "nameLocation": "1569:10:19", + "nodeType": "VariableDeclaration", + "scope": 4398, + "src": "1561:18:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4336, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "1561:7:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4339, + "mutability": "mutable", + "name": "_firstImplementation", + "nameLocation": "1589:20:19", + "nodeType": "VariableDeclaration", + "scope": 4398, + "src": "1581:28:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4338, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1581:7:19", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4341, + "mutability": "mutable", + "name": "_initData", + "nameLocation": "1624:9:19", + "nodeType": "VariableDeclaration", + "scope": 4398, + "src": "1611:22:19", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4340, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "1611:5:19", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "1560:74:19" + }, + "returnParameters": { + "id": 4347, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4346, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4398, + "src": "1689:11:19", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + }, + "typeName": { + "id": 4345, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4344, + "name": "WitnetProxy", + "nameLocations": [ + "1689:11:19" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4713, + "src": "1689:11:19" + }, + "referencedDeclaration": 4713, + "src": "1689:11:19", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "visibility": "internal" + } + ], + "src": "1688:13:19" + }, + "scope": 4399, + "src": "1544:994:19", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "external" + } + ], + "scope": 4400, + "src": "368:2175:19", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "35:2508:19" + }, + "compiler": { + "name": "solc", + "version": "0.8.25+commit.b61c2a91.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-10-20T09:42:12.835Z", + "devdoc": { + "author": "Guillermo Díaz ", + "kind": "dev", + "methods": { + "deploy(bytes,bytes32)": { + "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ", + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_deployed": "Just deployed contract address." + } + }, + "determineAddr(bytes,bytes32)": { + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_0": "Deterministic contract address." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "deploy(bytes,bytes32)": { + "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. " + }, + "determineAddr(bytes,bytes32)": { + "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`." + } + }, + "notice": "WitnetDeployerConfluxCore contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Conflux Core Ecosystem.", + "version": 1 + } + } \ No newline at end of file diff --git a/migrations/frosts/WitnetDeployerMeter.json b/migrations/frosts/WitnetDeployerMeter.json new file mode 100644 index 00000000..7cbc4a7b --- /dev/null +++ b/migrations/frosts/WitnetDeployerMeter.json @@ -0,0 +1,5755 @@ +{ + "contractName": "WitnetDeployerMeter", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "deploy", + "outputs": [ + { + "internalType": "address", + "name": "_deployed", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initCode", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "determineProxyAddr", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_proxySalt", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "_firstImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "proxify", + "outputs": [ + { + "internalType": "contract WitnetProxy", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"deploy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"_deployed\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"determineProxyAddr\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_proxySalt\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"_firstImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"proxify\",\"outputs\":[{\"internalType\":\"contract WitnetProxy\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz \",\"kind\":\"dev\",\"methods\":{\"deploy(bytes,bytes32)\":{\"details\":\"The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). \",\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_deployed\":\"Just deployed contract address.\"}},\"determineAddr(bytes,bytes32)\":{\"params\":{\"_initCode\":\"Creation code, including construction logic and input parameters.\",\"_salt\":\"Arbitrary value to modify resulting address.\"},\"returns\":{\"_0\":\"Deterministic contract address.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"deploy(bytes,bytes32)\":{\"notice\":\"Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. \"},\"determineAddr(bytes,bytes32)\":{\"notice\":\"Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`.\"}},\"notice\":\"WitnetDeployerMeter contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetDeployerMeter.sol\":\"WitnetDeployerMeter\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetDeployer.sol\":{\"keccak256\":\"0x00866ae27649212bdb7aacfc69d3302325ff82c1302993c1043e6f6ad2b507bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62fbada06d1352d79663f0c4ec26598e60e8a6b8b1015ff821b38d4f76580533\",\"dweb:/ipfs/QmYhDCsKjUPbKJLABxSUNQHsZKwPEVr41GGXV7MpThWvcL\"]},\"project:/contracts/core/WitnetDeployerMeter.sol\":{\"keccak256\":\"0x041cb0e647f339d45caf2449c13d192974dbca4974edb0966b42dc40aaf9f864\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a1ce2e55d785a5831ad5ffb895d8592181b65862b054c566656a2ff548f90023\",\"dweb:/ipfs/QmXLM2iZPyEKca4XTAwDgmrUxne1povbzwB7kpXCYjHiUf\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/libs/Create3.sol\":{\"keccak256\":\"0xfbda4c773f859bef9d7878ca9412f244da85f7bd49df07c49a17544f4708d718\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://0f83b72ad1c35c707cc6daa4e8266d9d711f561a188fbb0be1885d3f08146ca6\",\"dweb:/ipfs/QmPJwdieqkxoSvqmczAtRMfb5EN8uWiabqMKj4yVqsUncv\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}", + "bytecode": "0x6080604052348015600f57600080fd5b50610f4d8061001f6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f36600461032c565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103e8565b6100ed565b6100646100a136600461042d565b61017e565b6100646100b43660046103e8565b6102c3565b60006100e7604051806020016100ce9061031f565b601f1982820381018352601f90910116604052836102c3565b92915050565b60006100f983836102c3565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b19061031f565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee929190610492565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a929190610492565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d91906104f1565b5090506102bc565b60405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a20616c72656164792070726f6044820152651e1a599a595960d21b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b610a048061051483390190565b60006020828403121561033e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261036c57600080fd5b813567ffffffffffffffff8082111561038757610387610345565b604051601f8301601f19908116603f011681019082821181831017156103af576103af610345565b816040528381528660208588010111156103c857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156103fb57600080fd5b823567ffffffffffffffff81111561041257600080fd5b61041e8582860161035b565b95602094909401359450505050565b60008060006060848603121561044257600080fd5b8335925060208401356001600160a01b038116811461046057600080fd5b9150604084013567ffffffffffffffff81111561047c57600080fd5b6104888682870161035b565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104cf578581018301518582016060015282016104b3565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050357600080fd5b815180151581146102bc57600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122094ac6e0c20a3573ed4bdc138b3b7e0e470d5afe423139ca1f67bdb46e3c519f464736f6c63430008190033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c80634998f038146100515780634af63f02146100805780635ba489e714610093578063d3933c29146100a6575b600080fd5b61006461005f36600461032c565b6100b9565b6040516001600160a01b03909116815260200160405180910390f35b61006461008e3660046103e8565b6100ed565b6100646100a136600461042d565b61017e565b6100646100b43660046103e8565b6102c3565b60006100e7604051806020016100ce9061031f565b601f1982820381018352601f90910116604052836102c3565b92915050565b60006100f983836102c3565b9050806001600160a01b03163b6000036100e757818351602085016000f590506001600160a01b0381166100e75760405162461bcd60e51b815260206004820152602160248201527f5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c656044820152601960fa1b60648201526084015b60405180910390fd5b60008061018a856100b9565b9050806001600160a01b03163b600003610265576101ca604051806020016101b19061031f565b601f1982820381018352601f90910116604052866100ed565b50806001600160a01b0316636fbc15e98533866040516020016101ee929190610492565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161021a929190610492565b6020604051808303816000875af1158015610239573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025d91906104f1565b5090506102bc565b60405162461bcd60e51b815260206004820152602660248201527f5769746e65744465706c6f7965724d657465723a20616c72656164792070726f6044820152651e1a599a595960d21b6064820152608401610175565b9392505050565b8151602092830120604080516001600160f81b0319818601523060601b6bffffffffffffffffffffffff191660218201526035810193909352605580840192909252805180840390920182526075909201909152805191012090565b610a048061051483390190565b60006020828403121561033e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261036c57600080fd5b813567ffffffffffffffff8082111561038757610387610345565b604051601f8301601f19908116603f011681019082821181831017156103af576103af610345565b816040528381528660208588010111156103c857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080604083850312156103fb57600080fd5b823567ffffffffffffffff81111561041257600080fd5b61041e8582860161035b565b95602094909401359450505050565b60008060006060848603121561044257600080fd5b8335925060208401356001600160a01b038116811461046057600080fd5b9150604084013567ffffffffffffffff81111561047c57600080fd5b6104888682870161035b565b9150509250925092565b60018060a01b03831681526000602060406020840152835180604085015260005b818110156104cf578581018301518582016060015282016104b3565b506000606082860101526060601f19601f830116850101925050509392505050565b60006020828403121561050357600080fd5b815180151581146102bc57600080fdfe6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033a264697066735822122094ac6e0c20a3573ed4bdc138b3b7e0e470d5afe423139ca1f67bdb46e3c519f464736f6c63430008190033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nativeSrc": "0:4640:103", + "nodeType": "YulBlock", + "src": "0:4640:103", + "statements": [ + { + "nativeSrc": "6:3:103", + "nodeType": "YulBlock", + "src": "6:3:103", + "statements": [] + }, + { + "body": { + "nativeSrc": "84:110:103", + "nodeType": "YulBlock", + "src": "84:110:103", + "statements": [ + { + "body": { + "nativeSrc": "130:16:103", + "nodeType": "YulBlock", + "src": "130:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "139:1:103", + "nodeType": "YulLiteral", + "src": "139:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "142:1:103", + "nodeType": "YulLiteral", + "src": "142:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "132:6:103", + "nodeType": "YulIdentifier", + "src": "132:6:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulFunctionCall", + "src": "132:12:103" + }, + "nativeSrc": "132:12:103", + "nodeType": "YulExpressionStatement", + "src": "132:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "105:7:103", + "nodeType": "YulIdentifier", + "src": "105:7:103" + }, + { + "name": "headStart", + "nativeSrc": "114:9:103", + "nodeType": "YulIdentifier", + "src": "114:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "101:3:103", + "nodeType": "YulIdentifier", + "src": "101:3:103" + }, + "nativeSrc": "101:23:103", + "nodeType": "YulFunctionCall", + "src": "101:23:103" + }, + { + "kind": "number", + "nativeSrc": "126:2:103", + "nodeType": "YulLiteral", + "src": "126:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "97:3:103", + "nodeType": "YulIdentifier", + "src": "97:3:103" + }, + "nativeSrc": "97:32:103", + "nodeType": "YulFunctionCall", + "src": "97:32:103" + }, + "nativeSrc": "94:52:103", + "nodeType": "YulIf", + "src": "94:52:103" + }, + { + "nativeSrc": "155:33:103", + "nodeType": "YulAssignment", + "src": "155:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "178:9:103", + "nodeType": "YulIdentifier", + "src": "178:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "165:12:103", + "nodeType": "YulIdentifier", + "src": "165:12:103" + }, + "nativeSrc": "165:23:103", + "nodeType": "YulFunctionCall", + "src": "165:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "155:6:103", + "nodeType": "YulIdentifier", + "src": "155:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32", + "nativeSrc": "14:180:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "50:9:103", + "nodeType": "YulTypedName", + "src": "50:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "61:7:103", + "nodeType": "YulTypedName", + "src": "61:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "73:6:103", + "nodeType": "YulTypedName", + "src": "73:6:103", + "type": "" + } + ], + "src": "14:180:103" + }, + { + "body": { + "nativeSrc": "300:102:103", + "nodeType": "YulBlock", + "src": "300:102:103", + "statements": [ + { + "nativeSrc": "310:26:103", + "nodeType": "YulAssignment", + "src": "310:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "322:9:103", + "nodeType": "YulIdentifier", + "src": "322:9:103" + }, + { + "kind": "number", + "nativeSrc": "333:2:103", + "nodeType": "YulLiteral", + "src": "333:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "318:3:103", + "nodeType": "YulIdentifier", + "src": "318:3:103" + }, + "nativeSrc": "318:18:103", + "nodeType": "YulFunctionCall", + "src": "318:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "310:4:103", + "nodeType": "YulIdentifier", + "src": "310:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "352:9:103", + "nodeType": "YulIdentifier", + "src": "352:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "367:6:103", + "nodeType": "YulIdentifier", + "src": "367:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "383:3:103", + "nodeType": "YulLiteral", + "src": "383:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "388:1:103", + "nodeType": "YulLiteral", + "src": "388:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "379:3:103", + "nodeType": "YulIdentifier", + "src": "379:3:103" + }, + "nativeSrc": "379:11:103", + "nodeType": "YulFunctionCall", + "src": "379:11:103" + }, + { + "kind": "number", + "nativeSrc": "392:1:103", + "nodeType": "YulLiteral", + "src": "392:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "375:3:103", + "nodeType": "YulIdentifier", + "src": "375:3:103" + }, + "nativeSrc": "375:19:103", + "nodeType": "YulFunctionCall", + "src": "375:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "363:3:103", + "nodeType": "YulIdentifier", + "src": "363:3:103" + }, + "nativeSrc": "363:32:103", + "nodeType": "YulFunctionCall", + "src": "363:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "345:6:103", + "nodeType": "YulIdentifier", + "src": "345:6:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulFunctionCall", + "src": "345:51:103" + }, + "nativeSrc": "345:51:103", + "nodeType": "YulExpressionStatement", + "src": "345:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "199:203:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "269:9:103", + "nodeType": "YulTypedName", + "src": "269:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "280:6:103", + "nodeType": "YulTypedName", + "src": "280:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "291:4:103", + "nodeType": "YulTypedName", + "src": "291:4:103", + "type": "" + } + ], + "src": "199:203:103" + }, + { + "body": { + "nativeSrc": "439:95:103", + "nodeType": "YulBlock", + "src": "439:95:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "456:1:103", + "nodeType": "YulLiteral", + "src": "456:1:103", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "463:3:103", + "nodeType": "YulLiteral", + "src": "463:3:103", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "468:10:103", + "nodeType": "YulLiteral", + "src": "468:10:103", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "459:3:103", + "nodeType": "YulIdentifier", + "src": "459:3:103" + }, + "nativeSrc": "459:20:103", + "nodeType": "YulFunctionCall", + "src": "459:20:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "449:6:103", + "nodeType": "YulIdentifier", + "src": "449:6:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulFunctionCall", + "src": "449:31:103" + }, + "nativeSrc": "449:31:103", + "nodeType": "YulExpressionStatement", + "src": "449:31:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "496:1:103", + "nodeType": "YulLiteral", + "src": "496:1:103", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "499:4:103", + "nodeType": "YulLiteral", + "src": "499:4:103", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "489:6:103", + "nodeType": "YulIdentifier", + "src": "489:6:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulFunctionCall", + "src": "489:15:103" + }, + "nativeSrc": "489:15:103", + "nodeType": "YulExpressionStatement", + "src": "489:15:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "520:1:103", + "nodeType": "YulLiteral", + "src": "520:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "523:4:103", + "nodeType": "YulLiteral", + "src": "523:4:103", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "513:6:103", + "nodeType": "YulIdentifier", + "src": "513:6:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulFunctionCall", + "src": "513:15:103" + }, + "nativeSrc": "513:15:103", + "nodeType": "YulExpressionStatement", + "src": "513:15:103" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "407:127:103", + "nodeType": "YulFunctionDefinition", + "src": "407:127:103" + }, + { + "body": { + "nativeSrc": "591:666:103", + "nodeType": "YulBlock", + "src": "591:666:103", + "statements": [ + { + "body": { + "nativeSrc": "640:16:103", + "nodeType": "YulBlock", + "src": "640:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "649:1:103", + "nodeType": "YulLiteral", + "src": "649:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "652:1:103", + "nodeType": "YulLiteral", + "src": "652:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "642:6:103", + "nodeType": "YulIdentifier", + "src": "642:6:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulFunctionCall", + "src": "642:12:103" + }, + "nativeSrc": "642:12:103", + "nodeType": "YulExpressionStatement", + "src": "642:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "619:6:103", + "nodeType": "YulIdentifier", + "src": "619:6:103" + }, + { + "kind": "number", + "nativeSrc": "627:4:103", + "nodeType": "YulLiteral", + "src": "627:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "615:3:103", + "nodeType": "YulIdentifier", + "src": "615:3:103" + }, + "nativeSrc": "615:17:103", + "nodeType": "YulFunctionCall", + "src": "615:17:103" + }, + { + "name": "end", + "nativeSrc": "634:3:103", + "nodeType": "YulIdentifier", + "src": "634:3:103" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "611:3:103", + "nodeType": "YulIdentifier", + "src": "611:3:103" + }, + "nativeSrc": "611:27:103", + "nodeType": "YulFunctionCall", + "src": "611:27:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "604:6:103", + "nodeType": "YulIdentifier", + "src": "604:6:103" + }, + "nativeSrc": "604:35:103", + "nodeType": "YulFunctionCall", + "src": "604:35:103" + }, + "nativeSrc": "601:55:103", + "nodeType": "YulIf", + "src": "601:55:103" + }, + { + "nativeSrc": "665:30:103", + "nodeType": "YulVariableDeclaration", + "src": "665:30:103", + "value": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "688:6:103", + "nodeType": "YulIdentifier", + "src": "688:6:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "675:12:103", + "nodeType": "YulIdentifier", + "src": "675:12:103" + }, + "nativeSrc": "675:20:103", + "nodeType": "YulFunctionCall", + "src": "675:20:103" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "669:2:103", + "nodeType": "YulTypedName", + "src": "669:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "704:28:103", + "nodeType": "YulVariableDeclaration", + "src": "704:28:103", + "value": { + "kind": "number", + "nativeSrc": "714:18:103", + "nodeType": "YulLiteral", + "src": "714:18:103", + "type": "", + "value": "0xffffffffffffffff" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "708:2:103", + "nodeType": "YulTypedName", + "src": "708:2:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "755:22:103", + "nodeType": "YulBlock", + "src": "755:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "757:16:103", + "nodeType": "YulIdentifier", + "src": "757:16:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulFunctionCall", + "src": "757:18:103" + }, + "nativeSrc": "757:18:103", + "nodeType": "YulExpressionStatement", + "src": "757:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "747:2:103", + "nodeType": "YulIdentifier", + "src": "747:2:103" + }, + { + "name": "_2", + "nativeSrc": "751:2:103", + "nodeType": "YulIdentifier", + "src": "751:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "744:2:103", + "nodeType": "YulIdentifier", + "src": "744:2:103" + }, + "nativeSrc": "744:10:103", + "nodeType": "YulFunctionCall", + "src": "744:10:103" + }, + "nativeSrc": "741:36:103", + "nodeType": "YulIf", + "src": "741:36:103" + }, + { + "nativeSrc": "786:17:103", + "nodeType": "YulVariableDeclaration", + "src": "786:17:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "800:2:103", + "nodeType": "YulLiteral", + "src": "800:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "796:3:103", + "nodeType": "YulIdentifier", + "src": "796:3:103" + }, + "nativeSrc": "796:7:103", + "nodeType": "YulFunctionCall", + "src": "796:7:103" + }, + "variables": [ + { + "name": "_3", + "nativeSrc": "790:2:103", + "nodeType": "YulTypedName", + "src": "790:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "812:23:103", + "nodeType": "YulVariableDeclaration", + "src": "812:23:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "832:2:103", + "nodeType": "YulLiteral", + "src": "832:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "826:5:103", + "nodeType": "YulIdentifier", + "src": "826:5:103" + }, + "nativeSrc": "826:9:103", + "nodeType": "YulFunctionCall", + "src": "826:9:103" + }, + "variables": [ + { + "name": "memPtr", + "nativeSrc": "816:6:103", + "nodeType": "YulTypedName", + "src": "816:6:103", + "type": "" + } + ] + }, + { + "nativeSrc": "844:71:103", + "nodeType": "YulVariableDeclaration", + "src": "844:71:103", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "866:6:103", + "nodeType": "YulIdentifier", + "src": "866:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "890:2:103", + "nodeType": "YulIdentifier", + "src": "890:2:103" + }, + { + "kind": "number", + "nativeSrc": "894:4:103", + "nodeType": "YulLiteral", + "src": "894:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "886:3:103", + "nodeType": "YulIdentifier", + "src": "886:3:103" + }, + "nativeSrc": "886:13:103", + "nodeType": "YulFunctionCall", + "src": "886:13:103" + }, + { + "name": "_3", + "nativeSrc": "901:2:103", + "nodeType": "YulIdentifier", + "src": "901:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "882:3:103", + "nodeType": "YulIdentifier", + "src": "882:3:103" + }, + "nativeSrc": "882:22:103", + "nodeType": "YulFunctionCall", + "src": "882:22:103" + }, + { + "kind": "number", + "nativeSrc": "906:2:103", + "nodeType": "YulLiteral", + "src": "906:2:103", + "type": "", + "value": "63" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "878:3:103", + "nodeType": "YulIdentifier", + "src": "878:3:103" + }, + "nativeSrc": "878:31:103", + "nodeType": "YulFunctionCall", + "src": "878:31:103" + }, + { + "name": "_3", + "nativeSrc": "911:2:103", + "nodeType": "YulIdentifier", + "src": "911:2:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "874:3:103", + "nodeType": "YulIdentifier", + "src": "874:3:103" + }, + "nativeSrc": "874:40:103", + "nodeType": "YulFunctionCall", + "src": "874:40:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "862:3:103", + "nodeType": "YulIdentifier", + "src": "862:3:103" + }, + "nativeSrc": "862:53:103", + "nodeType": "YulFunctionCall", + "src": "862:53:103" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "848:10:103", + "nodeType": "YulTypedName", + "src": "848:10:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "974:22:103", + "nodeType": "YulBlock", + "src": "974:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "976:16:103", + "nodeType": "YulIdentifier", + "src": "976:16:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulFunctionCall", + "src": "976:18:103" + }, + "nativeSrc": "976:18:103", + "nodeType": "YulExpressionStatement", + "src": "976:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "933:10:103", + "nodeType": "YulIdentifier", + "src": "933:10:103" + }, + { + "name": "_2", + "nativeSrc": "945:2:103", + "nodeType": "YulIdentifier", + "src": "945:2:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "930:2:103", + "nodeType": "YulIdentifier", + "src": "930:2:103" + }, + "nativeSrc": "930:18:103", + "nodeType": "YulFunctionCall", + "src": "930:18:103" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "953:10:103", + "nodeType": "YulIdentifier", + "src": "953:10:103" + }, + { + "name": "memPtr", + "nativeSrc": "965:6:103", + "nodeType": "YulIdentifier", + "src": "965:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "950:2:103", + "nodeType": "YulIdentifier", + "src": "950:2:103" + }, + "nativeSrc": "950:22:103", + "nodeType": "YulFunctionCall", + "src": "950:22:103" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "927:2:103", + "nodeType": "YulIdentifier", + "src": "927:2:103" + }, + "nativeSrc": "927:46:103", + "nodeType": "YulFunctionCall", + "src": "927:46:103" + }, + "nativeSrc": "924:72:103", + "nodeType": "YulIf", + "src": "924:72:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1012:2:103", + "nodeType": "YulLiteral", + "src": "1012:2:103", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "1016:10:103", + "nodeType": "YulIdentifier", + "src": "1016:10:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1005:6:103", + "nodeType": "YulIdentifier", + "src": "1005:6:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulFunctionCall", + "src": "1005:22:103" + }, + "nativeSrc": "1005:22:103", + "nodeType": "YulExpressionStatement", + "src": "1005:22:103" + }, + { + "expression": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1043:6:103", + "nodeType": "YulIdentifier", + "src": "1043:6:103" + }, + { + "name": "_1", + "nativeSrc": "1051:2:103", + "nodeType": "YulIdentifier", + "src": "1051:2:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1036:6:103", + "nodeType": "YulIdentifier", + "src": "1036:6:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulFunctionCall", + "src": "1036:18:103" + }, + "nativeSrc": "1036:18:103", + "nodeType": "YulExpressionStatement", + "src": "1036:18:103" + }, + { + "body": { + "nativeSrc": "1102:16:103", + "nodeType": "YulBlock", + "src": "1102:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1111:1:103", + "nodeType": "YulLiteral", + "src": "1111:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1114:1:103", + "nodeType": "YulLiteral", + "src": "1114:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1104:6:103", + "nodeType": "YulIdentifier", + "src": "1104:6:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulFunctionCall", + "src": "1104:12:103" + }, + "nativeSrc": "1104:12:103", + "nodeType": "YulExpressionStatement", + "src": "1104:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1077:6:103", + "nodeType": "YulIdentifier", + "src": "1077:6:103" + }, + { + "name": "_1", + "nativeSrc": "1085:2:103", + "nodeType": "YulIdentifier", + "src": "1085:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1073:3:103", + "nodeType": "YulIdentifier", + "src": "1073:3:103" + }, + "nativeSrc": "1073:15:103", + "nodeType": "YulFunctionCall", + "src": "1073:15:103" + }, + { + "kind": "number", + "nativeSrc": "1090:4:103", + "nodeType": "YulLiteral", + "src": "1090:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1069:3:103", + "nodeType": "YulIdentifier", + "src": "1069:3:103" + }, + "nativeSrc": "1069:26:103", + "nodeType": "YulFunctionCall", + "src": "1069:26:103" + }, + { + "name": "end", + "nativeSrc": "1097:3:103", + "nodeType": "YulIdentifier", + "src": "1097:3:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1066:2:103", + "nodeType": "YulIdentifier", + "src": "1066:2:103" + }, + "nativeSrc": "1066:35:103", + "nodeType": "YulFunctionCall", + "src": "1066:35:103" + }, + "nativeSrc": "1063:55:103", + "nodeType": "YulIf", + "src": "1063:55:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1144:6:103", + "nodeType": "YulIdentifier", + "src": "1144:6:103" + }, + { + "kind": "number", + "nativeSrc": "1152:4:103", + "nodeType": "YulLiteral", + "src": "1152:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1140:3:103", + "nodeType": "YulIdentifier", + "src": "1140:3:103" + }, + "nativeSrc": "1140:17:103", + "nodeType": "YulFunctionCall", + "src": "1140:17:103" + }, + { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1163:6:103", + "nodeType": "YulIdentifier", + "src": "1163:6:103" + }, + { + "kind": "number", + "nativeSrc": "1171:4:103", + "nodeType": "YulLiteral", + "src": "1171:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1159:3:103", + "nodeType": "YulIdentifier", + "src": "1159:3:103" + }, + "nativeSrc": "1159:17:103", + "nodeType": "YulFunctionCall", + "src": "1159:17:103" + }, + { + "name": "_1", + "nativeSrc": "1178:2:103", + "nodeType": "YulIdentifier", + "src": "1178:2:103" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "1127:12:103", + "nodeType": "YulIdentifier", + "src": "1127:12:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulFunctionCall", + "src": "1127:54:103" + }, + "nativeSrc": "1127:54:103", + "nodeType": "YulExpressionStatement", + "src": "1127:54:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "1205:6:103", + "nodeType": "YulIdentifier", + "src": "1205:6:103" + }, + { + "name": "_1", + "nativeSrc": "1213:2:103", + "nodeType": "YulIdentifier", + "src": "1213:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1201:3:103", + "nodeType": "YulIdentifier", + "src": "1201:3:103" + }, + "nativeSrc": "1201:15:103", + "nodeType": "YulFunctionCall", + "src": "1201:15:103" + }, + { + "kind": "number", + "nativeSrc": "1218:4:103", + "nodeType": "YulLiteral", + "src": "1218:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1197:3:103", + "nodeType": "YulIdentifier", + "src": "1197:3:103" + }, + "nativeSrc": "1197:26:103", + "nodeType": "YulFunctionCall", + "src": "1197:26:103" + }, + { + "kind": "number", + "nativeSrc": "1225:1:103", + "nodeType": "YulLiteral", + "src": "1225:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1190:6:103", + "nodeType": "YulIdentifier", + "src": "1190:6:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulFunctionCall", + "src": "1190:37:103" + }, + "nativeSrc": "1190:37:103", + "nodeType": "YulExpressionStatement", + "src": "1190:37:103" + }, + { + "nativeSrc": "1236:15:103", + "nodeType": "YulAssignment", + "src": "1236:15:103", + "value": { + "name": "memPtr", + "nativeSrc": "1245:6:103", + "nodeType": "YulIdentifier", + "src": "1245:6:103" + }, + "variableNames": [ + { + "name": "array", + "nativeSrc": "1236:5:103", + "nodeType": "YulIdentifier", + "src": "1236:5:103" + } + ] + } + ] + }, + "name": "abi_decode_bytes", + "nativeSrc": "539:718:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "offset", + "nativeSrc": "565:6:103", + "nodeType": "YulTypedName", + "src": "565:6:103", + "type": "" + }, + { + "name": "end", + "nativeSrc": "573:3:103", + "nodeType": "YulTypedName", + "src": "573:3:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "array", + "nativeSrc": "581:5:103", + "nodeType": "YulTypedName", + "src": "581:5:103", + "type": "" + } + ], + "src": "539:718:103" + }, + { + "body": { + "nativeSrc": "1358:292:103", + "nodeType": "YulBlock", + "src": "1358:292:103", + "statements": [ + { + "body": { + "nativeSrc": "1404:16:103", + "nodeType": "YulBlock", + "src": "1404:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1413:1:103", + "nodeType": "YulLiteral", + "src": "1413:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1416:1:103", + "nodeType": "YulLiteral", + "src": "1416:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1406:6:103", + "nodeType": "YulIdentifier", + "src": "1406:6:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulFunctionCall", + "src": "1406:12:103" + }, + "nativeSrc": "1406:12:103", + "nodeType": "YulExpressionStatement", + "src": "1406:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1379:7:103", + "nodeType": "YulIdentifier", + "src": "1379:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1388:9:103", + "nodeType": "YulIdentifier", + "src": "1388:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1375:3:103", + "nodeType": "YulIdentifier", + "src": "1375:3:103" + }, + "nativeSrc": "1375:23:103", + "nodeType": "YulFunctionCall", + "src": "1375:23:103" + }, + { + "kind": "number", + "nativeSrc": "1400:2:103", + "nodeType": "YulLiteral", + "src": "1400:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1371:3:103", + "nodeType": "YulIdentifier", + "src": "1371:3:103" + }, + "nativeSrc": "1371:32:103", + "nodeType": "YulFunctionCall", + "src": "1371:32:103" + }, + "nativeSrc": "1368:52:103", + "nodeType": "YulIf", + "src": "1368:52:103" + }, + { + "nativeSrc": "1429:37:103", + "nodeType": "YulVariableDeclaration", + "src": "1429:37:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1456:9:103", + "nodeType": "YulIdentifier", + "src": "1456:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1443:12:103", + "nodeType": "YulIdentifier", + "src": "1443:12:103" + }, + "nativeSrc": "1443:23:103", + "nodeType": "YulFunctionCall", + "src": "1443:23:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "1433:6:103", + "nodeType": "YulTypedName", + "src": "1433:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1509:16:103", + "nodeType": "YulBlock", + "src": "1509:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1518:1:103", + "nodeType": "YulLiteral", + "src": "1518:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1521:1:103", + "nodeType": "YulLiteral", + "src": "1521:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1511:6:103", + "nodeType": "YulIdentifier", + "src": "1511:6:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulFunctionCall", + "src": "1511:12:103" + }, + "nativeSrc": "1511:12:103", + "nodeType": "YulExpressionStatement", + "src": "1511:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1481:6:103", + "nodeType": "YulIdentifier", + "src": "1481:6:103" + }, + { + "kind": "number", + "nativeSrc": "1489:18:103", + "nodeType": "YulLiteral", + "src": "1489:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1478:2:103", + "nodeType": "YulIdentifier", + "src": "1478:2:103" + }, + "nativeSrc": "1478:30:103", + "nodeType": "YulFunctionCall", + "src": "1478:30:103" + }, + "nativeSrc": "1475:50:103", + "nodeType": "YulIf", + "src": "1475:50:103" + }, + { + "nativeSrc": "1534:59:103", + "nodeType": "YulAssignment", + "src": "1534:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1565:9:103", + "nodeType": "YulIdentifier", + "src": "1565:9:103" + }, + { + "name": "offset", + "nativeSrc": "1576:6:103", + "nodeType": "YulIdentifier", + "src": "1576:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1561:3:103", + "nodeType": "YulIdentifier", + "src": "1561:3:103" + }, + "nativeSrc": "1561:22:103", + "nodeType": "YulFunctionCall", + "src": "1561:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "1585:7:103", + "nodeType": "YulIdentifier", + "src": "1585:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "1544:16:103", + "nodeType": "YulIdentifier", + "src": "1544:16:103" + }, + "nativeSrc": "1544:49:103", + "nodeType": "YulFunctionCall", + "src": "1544:49:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1534:6:103", + "nodeType": "YulIdentifier", + "src": "1534:6:103" + } + ] + }, + { + "nativeSrc": "1602:42:103", + "nodeType": "YulAssignment", + "src": "1602:42:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1629:9:103", + "nodeType": "YulIdentifier", + "src": "1629:9:103" + }, + { + "kind": "number", + "nativeSrc": "1640:2:103", + "nodeType": "YulLiteral", + "src": "1640:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1625:3:103", + "nodeType": "YulIdentifier", + "src": "1625:3:103" + }, + "nativeSrc": "1625:18:103", + "nodeType": "YulFunctionCall", + "src": "1625:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1612:12:103", + "nodeType": "YulIdentifier", + "src": "1612:12:103" + }, + "nativeSrc": "1612:32:103", + "nodeType": "YulFunctionCall", + "src": "1612:32:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1602:6:103", + "nodeType": "YulIdentifier", + "src": "1602:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes_memory_ptrt_bytes32", + "nativeSrc": "1262:388:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1316:9:103", + "nodeType": "YulTypedName", + "src": "1316:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1327:7:103", + "nodeType": "YulTypedName", + "src": "1327:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1339:6:103", + "nodeType": "YulTypedName", + "src": "1339:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1347:6:103", + "nodeType": "YulTypedName", + "src": "1347:6:103", + "type": "" + } + ], + "src": "1262:388:103" + }, + { + "body": { + "nativeSrc": "1768:449:103", + "nodeType": "YulBlock", + "src": "1768:449:103", + "statements": [ + { + "body": { + "nativeSrc": "1814:16:103", + "nodeType": "YulBlock", + "src": "1814:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1823:1:103", + "nodeType": "YulLiteral", + "src": "1823:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1826:1:103", + "nodeType": "YulLiteral", + "src": "1826:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1816:6:103", + "nodeType": "YulIdentifier", + "src": "1816:6:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulFunctionCall", + "src": "1816:12:103" + }, + "nativeSrc": "1816:12:103", + "nodeType": "YulExpressionStatement", + "src": "1816:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "1789:7:103", + "nodeType": "YulIdentifier", + "src": "1789:7:103" + }, + { + "name": "headStart", + "nativeSrc": "1798:9:103", + "nodeType": "YulIdentifier", + "src": "1798:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1785:3:103", + "nodeType": "YulIdentifier", + "src": "1785:3:103" + }, + "nativeSrc": "1785:23:103", + "nodeType": "YulFunctionCall", + "src": "1785:23:103" + }, + { + "kind": "number", + "nativeSrc": "1810:2:103", + "nodeType": "YulLiteral", + "src": "1810:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1781:3:103", + "nodeType": "YulIdentifier", + "src": "1781:3:103" + }, + "nativeSrc": "1781:32:103", + "nodeType": "YulFunctionCall", + "src": "1781:32:103" + }, + "nativeSrc": "1778:52:103", + "nodeType": "YulIf", + "src": "1778:52:103" + }, + { + "nativeSrc": "1839:33:103", + "nodeType": "YulAssignment", + "src": "1839:33:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1862:9:103", + "nodeType": "YulIdentifier", + "src": "1862:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1849:12:103", + "nodeType": "YulIdentifier", + "src": "1849:12:103" + }, + "nativeSrc": "1849:23:103", + "nodeType": "YulFunctionCall", + "src": "1849:23:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1839:6:103", + "nodeType": "YulIdentifier", + "src": "1839:6:103" + } + ] + }, + { + "nativeSrc": "1881:45:103", + "nodeType": "YulVariableDeclaration", + "src": "1881:45:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1911:9:103", + "nodeType": "YulIdentifier", + "src": "1911:9:103" + }, + { + "kind": "number", + "nativeSrc": "1922:2:103", + "nodeType": "YulLiteral", + "src": "1922:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1907:3:103", + "nodeType": "YulIdentifier", + "src": "1907:3:103" + }, + "nativeSrc": "1907:18:103", + "nodeType": "YulFunctionCall", + "src": "1907:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1894:12:103", + "nodeType": "YulIdentifier", + "src": "1894:12:103" + }, + "nativeSrc": "1894:32:103", + "nodeType": "YulFunctionCall", + "src": "1894:32:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "1885:5:103", + "nodeType": "YulTypedName", + "src": "1885:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1989:16:103", + "nodeType": "YulBlock", + "src": "1989:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1998:1:103", + "nodeType": "YulLiteral", + "src": "1998:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2001:1:103", + "nodeType": "YulLiteral", + "src": "2001:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1991:6:103", + "nodeType": "YulIdentifier", + "src": "1991:6:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulFunctionCall", + "src": "1991:12:103" + }, + "nativeSrc": "1991:12:103", + "nodeType": "YulExpressionStatement", + "src": "1991:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1948:5:103", + "nodeType": "YulIdentifier", + "src": "1948:5:103" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1959:5:103", + "nodeType": "YulIdentifier", + "src": "1959:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1974:3:103", + "nodeType": "YulLiteral", + "src": "1974:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1979:1:103", + "nodeType": "YulLiteral", + "src": "1979:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1970:3:103", + "nodeType": "YulIdentifier", + "src": "1970:3:103" + }, + "nativeSrc": "1970:11:103", + "nodeType": "YulFunctionCall", + "src": "1970:11:103" + }, + { + "kind": "number", + "nativeSrc": "1983:1:103", + "nodeType": "YulLiteral", + "src": "1983:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1966:3:103", + "nodeType": "YulIdentifier", + "src": "1966:3:103" + }, + "nativeSrc": "1966:19:103", + "nodeType": "YulFunctionCall", + "src": "1966:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1955:3:103", + "nodeType": "YulIdentifier", + "src": "1955:3:103" + }, + "nativeSrc": "1955:31:103", + "nodeType": "YulFunctionCall", + "src": "1955:31:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1945:2:103", + "nodeType": "YulIdentifier", + "src": "1945:2:103" + }, + "nativeSrc": "1945:42:103", + "nodeType": "YulFunctionCall", + "src": "1945:42:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1938:6:103", + "nodeType": "YulIdentifier", + "src": "1938:6:103" + }, + "nativeSrc": "1938:50:103", + "nodeType": "YulFunctionCall", + "src": "1938:50:103" + }, + "nativeSrc": "1935:70:103", + "nodeType": "YulIf", + "src": "1935:70:103" + }, + { + "nativeSrc": "2014:15:103", + "nodeType": "YulAssignment", + "src": "2014:15:103", + "value": { + "name": "value", + "nativeSrc": "2024:5:103", + "nodeType": "YulIdentifier", + "src": "2024:5:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "2014:6:103", + "nodeType": "YulIdentifier", + "src": "2014:6:103" + } + ] + }, + { + "nativeSrc": "2038:46:103", + "nodeType": "YulVariableDeclaration", + "src": "2038:46:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2069:9:103", + "nodeType": "YulIdentifier", + "src": "2069:9:103" + }, + { + "kind": "number", + "nativeSrc": "2080:2:103", + "nodeType": "YulLiteral", + "src": "2080:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2065:3:103", + "nodeType": "YulIdentifier", + "src": "2065:3:103" + }, + "nativeSrc": "2065:18:103", + "nodeType": "YulFunctionCall", + "src": "2065:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "2052:12:103", + "nodeType": "YulIdentifier", + "src": "2052:12:103" + }, + "nativeSrc": "2052:32:103", + "nodeType": "YulFunctionCall", + "src": "2052:32:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "2042:6:103", + "nodeType": "YulTypedName", + "src": "2042:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2127:16:103", + "nodeType": "YulBlock", + "src": "2127:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2136:1:103", + "nodeType": "YulLiteral", + "src": "2136:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2139:1:103", + "nodeType": "YulLiteral", + "src": "2139:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2129:6:103", + "nodeType": "YulIdentifier", + "src": "2129:6:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulFunctionCall", + "src": "2129:12:103" + }, + "nativeSrc": "2129:12:103", + "nodeType": "YulExpressionStatement", + "src": "2129:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "2099:6:103", + "nodeType": "YulIdentifier", + "src": "2099:6:103" + }, + { + "kind": "number", + "nativeSrc": "2107:18:103", + "nodeType": "YulLiteral", + "src": "2107:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "2096:2:103", + "nodeType": "YulIdentifier", + "src": "2096:2:103" + }, + "nativeSrc": "2096:30:103", + "nodeType": "YulFunctionCall", + "src": "2096:30:103" + }, + "nativeSrc": "2093:50:103", + "nodeType": "YulIf", + "src": "2093:50:103" + }, + { + "nativeSrc": "2152:59:103", + "nodeType": "YulAssignment", + "src": "2152:59:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2183:9:103", + "nodeType": "YulIdentifier", + "src": "2183:9:103" + }, + { + "name": "offset", + "nativeSrc": "2194:6:103", + "nodeType": "YulIdentifier", + "src": "2194:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2179:3:103", + "nodeType": "YulIdentifier", + "src": "2179:3:103" + }, + "nativeSrc": "2179:22:103", + "nodeType": "YulFunctionCall", + "src": "2179:22:103" + }, + { + "name": "dataEnd", + "nativeSrc": "2203:7:103", + "nodeType": "YulIdentifier", + "src": "2203:7:103" + } + ], + "functionName": { + "name": "abi_decode_bytes", + "nativeSrc": "2162:16:103", + "nodeType": "YulIdentifier", + "src": "2162:16:103" + }, + "nativeSrc": "2162:49:103", + "nodeType": "YulFunctionCall", + "src": "2162:49:103" + }, + "variableNames": [ + { + "name": "value2", + "nativeSrc": "2152:6:103", + "nodeType": "YulIdentifier", + "src": "2152:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr", + "nativeSrc": "1655:562:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1718:9:103", + "nodeType": "YulTypedName", + "src": "1718:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "1729:7:103", + "nodeType": "YulTypedName", + "src": "1729:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "1741:6:103", + "nodeType": "YulTypedName", + "src": "1741:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "1749:6:103", + "nodeType": "YulTypedName", + "src": "1749:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "1757:6:103", + "nodeType": "YulTypedName", + "src": "1757:6:103", + "type": "" + } + ], + "src": "1655:562:103" + }, + { + "body": { + "nativeSrc": "2351:102:103", + "nodeType": "YulBlock", + "src": "2351:102:103", + "statements": [ + { + "nativeSrc": "2361:26:103", + "nodeType": "YulAssignment", + "src": "2361:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2373:9:103", + "nodeType": "YulIdentifier", + "src": "2373:9:103" + }, + { + "kind": "number", + "nativeSrc": "2384:2:103", + "nodeType": "YulLiteral", + "src": "2384:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2369:3:103", + "nodeType": "YulIdentifier", + "src": "2369:3:103" + }, + "nativeSrc": "2369:18:103", + "nodeType": "YulFunctionCall", + "src": "2369:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2361:4:103", + "nodeType": "YulIdentifier", + "src": "2361:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2403:9:103", + "nodeType": "YulIdentifier", + "src": "2403:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "2418:6:103", + "nodeType": "YulIdentifier", + "src": "2418:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2434:3:103", + "nodeType": "YulLiteral", + "src": "2434:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "2439:1:103", + "nodeType": "YulLiteral", + "src": "2439:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "2430:3:103", + "nodeType": "YulIdentifier", + "src": "2430:3:103" + }, + "nativeSrc": "2430:11:103", + "nodeType": "YulFunctionCall", + "src": "2430:11:103" + }, + { + "kind": "number", + "nativeSrc": "2443:1:103", + "nodeType": "YulLiteral", + "src": "2443:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2426:3:103", + "nodeType": "YulIdentifier", + "src": "2426:3:103" + }, + "nativeSrc": "2426:19:103", + "nodeType": "YulFunctionCall", + "src": "2426:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "2414:3:103", + "nodeType": "YulIdentifier", + "src": "2414:3:103" + }, + "nativeSrc": "2414:32:103", + "nodeType": "YulFunctionCall", + "src": "2414:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2396:6:103", + "nodeType": "YulIdentifier", + "src": "2396:6:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulFunctionCall", + "src": "2396:51:103" + }, + "nativeSrc": "2396:51:103", + "nodeType": "YulExpressionStatement", + "src": "2396:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed", + "nativeSrc": "2222:231:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2320:9:103", + "nodeType": "YulTypedName", + "src": "2320:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2331:6:103", + "nodeType": "YulTypedName", + "src": "2331:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2342:4:103", + "nodeType": "YulTypedName", + "src": "2342:4:103", + "type": "" + } + ], + "src": "2222:231:103" + }, + { + "body": { + "nativeSrc": "2632:223:103", + "nodeType": "YulBlock", + "src": "2632:223:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2649:9:103", + "nodeType": "YulIdentifier", + "src": "2649:9:103" + }, + { + "kind": "number", + "nativeSrc": "2660:2:103", + "nodeType": "YulLiteral", + "src": "2660:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2642:6:103", + "nodeType": "YulIdentifier", + "src": "2642:6:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulFunctionCall", + "src": "2642:21:103" + }, + "nativeSrc": "2642:21:103", + "nodeType": "YulExpressionStatement", + "src": "2642:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2683:9:103", + "nodeType": "YulIdentifier", + "src": "2683:9:103" + }, + { + "kind": "number", + "nativeSrc": "2694:2:103", + "nodeType": "YulLiteral", + "src": "2694:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2679:3:103", + "nodeType": "YulIdentifier", + "src": "2679:3:103" + }, + "nativeSrc": "2679:18:103", + "nodeType": "YulFunctionCall", + "src": "2679:18:103" + }, + { + "kind": "number", + "nativeSrc": "2699:2:103", + "nodeType": "YulLiteral", + "src": "2699:2:103", + "type": "", + "value": "33" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2672:6:103", + "nodeType": "YulIdentifier", + "src": "2672:6:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulFunctionCall", + "src": "2672:30:103" + }, + "nativeSrc": "2672:30:103", + "nodeType": "YulExpressionStatement", + "src": "2672:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2722:9:103", + "nodeType": "YulIdentifier", + "src": "2722:9:103" + }, + { + "kind": "number", + "nativeSrc": "2733:2:103", + "nodeType": "YulLiteral", + "src": "2733:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2718:3:103", + "nodeType": "YulIdentifier", + "src": "2718:3:103" + }, + "nativeSrc": "2718:18:103", + "nodeType": "YulFunctionCall", + "src": "2718:18:103" + }, + { + "hexValue": "5769746e65744465706c6f7965723a206465706c6f796d656e74206661696c65", + "kind": "string", + "nativeSrc": "2738:34:103", + "nodeType": "YulLiteral", + "src": "2738:34:103", + "type": "", + "value": "WitnetDeployer: deployment faile" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2711:6:103", + "nodeType": "YulIdentifier", + "src": "2711:6:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulFunctionCall", + "src": "2711:62:103" + }, + "nativeSrc": "2711:62:103", + "nodeType": "YulExpressionStatement", + "src": "2711:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2793:9:103", + "nodeType": "YulIdentifier", + "src": "2793:9:103" + }, + { + "kind": "number", + "nativeSrc": "2804:2:103", + "nodeType": "YulLiteral", + "src": "2804:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2789:3:103", + "nodeType": "YulIdentifier", + "src": "2789:3:103" + }, + "nativeSrc": "2789:18:103", + "nodeType": "YulFunctionCall", + "src": "2789:18:103" + }, + { + "hexValue": "64", + "kind": "string", + "nativeSrc": "2809:3:103", + "nodeType": "YulLiteral", + "src": "2809:3:103", + "type": "", + "value": "d" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2782:6:103", + "nodeType": "YulIdentifier", + "src": "2782:6:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulFunctionCall", + "src": "2782:31:103" + }, + "nativeSrc": "2782:31:103", + "nodeType": "YulExpressionStatement", + "src": "2782:31:103" + }, + { + "nativeSrc": "2822:27:103", + "nodeType": "YulAssignment", + "src": "2822:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2834:9:103", + "nodeType": "YulIdentifier", + "src": "2834:9:103" + }, + { + "kind": "number", + "nativeSrc": "2845:3:103", + "nodeType": "YulLiteral", + "src": "2845:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2830:3:103", + "nodeType": "YulIdentifier", + "src": "2830:3:103" + }, + "nativeSrc": "2830:19:103", + "nodeType": "YulFunctionCall", + "src": "2830:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2822:4:103", + "nodeType": "YulIdentifier", + "src": "2822:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2458:397:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2609:9:103", + "nodeType": "YulTypedName", + "src": "2609:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2623:4:103", + "nodeType": "YulTypedName", + "src": "2623:4:103", + "type": "" + } + ], + "src": "2458:397:103" + }, + { + "body": { + "nativeSrc": "3007:496:103", + "nodeType": "YulBlock", + "src": "3007:496:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3024:9:103", + "nodeType": "YulIdentifier", + "src": "3024:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "3039:6:103", + "nodeType": "YulIdentifier", + "src": "3039:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3055:3:103", + "nodeType": "YulLiteral", + "src": "3055:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "3060:1:103", + "nodeType": "YulLiteral", + "src": "3060:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "3051:3:103", + "nodeType": "YulIdentifier", + "src": "3051:3:103" + }, + "nativeSrc": "3051:11:103", + "nodeType": "YulFunctionCall", + "src": "3051:11:103" + }, + { + "kind": "number", + "nativeSrc": "3064:1:103", + "nodeType": "YulLiteral", + "src": "3064:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3047:3:103", + "nodeType": "YulIdentifier", + "src": "3047:3:103" + }, + "nativeSrc": "3047:19:103", + "nodeType": "YulFunctionCall", + "src": "3047:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3035:3:103", + "nodeType": "YulIdentifier", + "src": "3035:3:103" + }, + "nativeSrc": "3035:32:103", + "nodeType": "YulFunctionCall", + "src": "3035:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3017:6:103", + "nodeType": "YulIdentifier", + "src": "3017:6:103" + }, + "nativeSrc": "3017:51:103", + "nodeType": "YulFunctionCall", + "src": "3017:51:103" + }, + "nativeSrc": "3017:51:103", + "nodeType": "YulExpressionStatement", + "src": "3017:51:103" + }, + { + "nativeSrc": "3077:12:103", + "nodeType": "YulVariableDeclaration", + "src": "3077:12:103", + "value": { + "kind": "number", + "nativeSrc": "3087:2:103", + "nodeType": "YulLiteral", + "src": "3087:2:103", + "type": "", + "value": "32" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "3081:2:103", + "nodeType": "YulTypedName", + "src": "3081:2:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3109:9:103", + "nodeType": "YulIdentifier", + "src": "3109:9:103" + }, + { + "kind": "number", + "nativeSrc": "3120:2:103", + "nodeType": "YulLiteral", + "src": "3120:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3105:3:103", + "nodeType": "YulIdentifier", + "src": "3105:3:103" + }, + "nativeSrc": "3105:18:103", + "nodeType": "YulFunctionCall", + "src": "3105:18:103" + }, + { + "kind": "number", + "nativeSrc": "3125:2:103", + "nodeType": "YulLiteral", + "src": "3125:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3098:6:103", + "nodeType": "YulIdentifier", + "src": "3098:6:103" + }, + "nativeSrc": "3098:30:103", + "nodeType": "YulFunctionCall", + "src": "3098:30:103" + }, + "nativeSrc": "3098:30:103", + "nodeType": "YulExpressionStatement", + "src": "3098:30:103" + }, + { + "nativeSrc": "3137:27:103", + "nodeType": "YulVariableDeclaration", + "src": "3137:27:103", + "value": { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3157:6:103", + "nodeType": "YulIdentifier", + "src": "3157:6:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3151:5:103", + "nodeType": "YulIdentifier", + "src": "3151:5:103" + }, + "nativeSrc": "3151:13:103", + "nodeType": "YulFunctionCall", + "src": "3151:13:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "3141:6:103", + "nodeType": "YulTypedName", + "src": "3141:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3184:9:103", + "nodeType": "YulIdentifier", + "src": "3184:9:103" + }, + { + "kind": "number", + "nativeSrc": "3195:2:103", + "nodeType": "YulLiteral", + "src": "3195:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3180:3:103", + "nodeType": "YulIdentifier", + "src": "3180:3:103" + }, + "nativeSrc": "3180:18:103", + "nodeType": "YulFunctionCall", + "src": "3180:18:103" + }, + { + "name": "length", + "nativeSrc": "3200:6:103", + "nodeType": "YulIdentifier", + "src": "3200:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3173:6:103", + "nodeType": "YulIdentifier", + "src": "3173:6:103" + }, + "nativeSrc": "3173:34:103", + "nodeType": "YulFunctionCall", + "src": "3173:34:103" + }, + "nativeSrc": "3173:34:103", + "nodeType": "YulExpressionStatement", + "src": "3173:34:103" + }, + { + "nativeSrc": "3216:10:103", + "nodeType": "YulVariableDeclaration", + "src": "3216:10:103", + "value": { + "kind": "number", + "nativeSrc": "3225:1:103", + "nodeType": "YulLiteral", + "src": "3225:1:103", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "3220:1:103", + "nodeType": "YulTypedName", + "src": "3220:1:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3285:90:103", + "nodeType": "YulBlock", + "src": "3285:90:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3314:9:103", + "nodeType": "YulIdentifier", + "src": "3314:9:103" + }, + { + "name": "i", + "nativeSrc": "3325:1:103", + "nodeType": "YulIdentifier", + "src": "3325:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3310:3:103", + "nodeType": "YulIdentifier", + "src": "3310:3:103" + }, + "nativeSrc": "3310:17:103", + "nodeType": "YulFunctionCall", + "src": "3310:17:103" + }, + { + "kind": "number", + "nativeSrc": "3329:2:103", + "nodeType": "YulLiteral", + "src": "3329:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3306:3:103", + "nodeType": "YulIdentifier", + "src": "3306:3:103" + }, + "nativeSrc": "3306:26:103", + "nodeType": "YulFunctionCall", + "src": "3306:26:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "value1", + "nativeSrc": "3348:6:103", + "nodeType": "YulIdentifier", + "src": "3348:6:103" + }, + { + "name": "i", + "nativeSrc": "3356:1:103", + "nodeType": "YulIdentifier", + "src": "3356:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3344:3:103", + "nodeType": "YulIdentifier", + "src": "3344:3:103" + }, + "nativeSrc": "3344:14:103", + "nodeType": "YulFunctionCall", + "src": "3344:14:103" + }, + { + "name": "_1", + "nativeSrc": "3360:2:103", + "nodeType": "YulIdentifier", + "src": "3360:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3340:3:103", + "nodeType": "YulIdentifier", + "src": "3340:3:103" + }, + "nativeSrc": "3340:23:103", + "nodeType": "YulFunctionCall", + "src": "3340:23:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3334:5:103", + "nodeType": "YulIdentifier", + "src": "3334:5:103" + }, + "nativeSrc": "3334:30:103", + "nodeType": "YulFunctionCall", + "src": "3334:30:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3299:6:103", + "nodeType": "YulIdentifier", + "src": "3299:6:103" + }, + "nativeSrc": "3299:66:103", + "nodeType": "YulFunctionCall", + "src": "3299:66:103" + }, + "nativeSrc": "3299:66:103", + "nodeType": "YulExpressionStatement", + "src": "3299:66:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3246:1:103", + "nodeType": "YulIdentifier", + "src": "3246:1:103" + }, + { + "name": "length", + "nativeSrc": "3249:6:103", + "nodeType": "YulIdentifier", + "src": "3249:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "3243:2:103", + "nodeType": "YulIdentifier", + "src": "3243:2:103" + }, + "nativeSrc": "3243:13:103", + "nodeType": "YulFunctionCall", + "src": "3243:13:103" + }, + "nativeSrc": "3235:140:103", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "3257:19:103", + "nodeType": "YulBlock", + "src": "3257:19:103", + "statements": [ + { + "nativeSrc": "3259:15:103", + "nodeType": "YulAssignment", + "src": "3259:15:103", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3268:1:103", + "nodeType": "YulIdentifier", + "src": "3268:1:103" + }, + { + "name": "_1", + "nativeSrc": "3271:2:103", + "nodeType": "YulIdentifier", + "src": "3271:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3264:3:103", + "nodeType": "YulIdentifier", + "src": "3264:3:103" + }, + "nativeSrc": "3264:10:103", + "nodeType": "YulFunctionCall", + "src": "3264:10:103" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "3259:1:103", + "nodeType": "YulIdentifier", + "src": "3259:1:103" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "3239:3:103", + "nodeType": "YulBlock", + "src": "3239:3:103", + "statements": [] + }, + "src": "3235:140:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3399:9:103", + "nodeType": "YulIdentifier", + "src": "3399:9:103" + }, + { + "name": "length", + "nativeSrc": "3410:6:103", + "nodeType": "YulIdentifier", + "src": "3410:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3395:3:103", + "nodeType": "YulIdentifier", + "src": "3395:3:103" + }, + "nativeSrc": "3395:22:103", + "nodeType": "YulFunctionCall", + "src": "3395:22:103" + }, + { + "kind": "number", + "nativeSrc": "3419:2:103", + "nodeType": "YulLiteral", + "src": "3419:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3391:3:103", + "nodeType": "YulIdentifier", + "src": "3391:3:103" + }, + "nativeSrc": "3391:31:103", + "nodeType": "YulFunctionCall", + "src": "3391:31:103" + }, + { + "kind": "number", + "nativeSrc": "3424:1:103", + "nodeType": "YulLiteral", + "src": "3424:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3384:6:103", + "nodeType": "YulIdentifier", + "src": "3384:6:103" + }, + "nativeSrc": "3384:42:103", + "nodeType": "YulFunctionCall", + "src": "3384:42:103" + }, + "nativeSrc": "3384:42:103", + "nodeType": "YulExpressionStatement", + "src": "3384:42:103" + }, + { + "nativeSrc": "3435:62:103", + "nodeType": "YulAssignment", + "src": "3435:62:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3451:9:103", + "nodeType": "YulIdentifier", + "src": "3451:9:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "3470:6:103", + "nodeType": "YulIdentifier", + "src": "3470:6:103" + }, + { + "kind": "number", + "nativeSrc": "3478:2:103", + "nodeType": "YulLiteral", + "src": "3478:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3466:3:103", + "nodeType": "YulIdentifier", + "src": "3466:3:103" + }, + "nativeSrc": "3466:15:103", + "nodeType": "YulFunctionCall", + "src": "3466:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3487:2:103", + "nodeType": "YulLiteral", + "src": "3487:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "3483:3:103", + "nodeType": "YulIdentifier", + "src": "3483:3:103" + }, + "nativeSrc": "3483:7:103", + "nodeType": "YulFunctionCall", + "src": "3483:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "3462:3:103", + "nodeType": "YulIdentifier", + "src": "3462:3:103" + }, + "nativeSrc": "3462:29:103", + "nodeType": "YulFunctionCall", + "src": "3462:29:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3447:3:103", + "nodeType": "YulIdentifier", + "src": "3447:3:103" + }, + "nativeSrc": "3447:45:103", + "nodeType": "YulFunctionCall", + "src": "3447:45:103" + }, + { + "kind": "number", + "nativeSrc": "3494:2:103", + "nodeType": "YulLiteral", + "src": "3494:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3443:3:103", + "nodeType": "YulIdentifier", + "src": "3443:3:103" + }, + "nativeSrc": "3443:54:103", + "nodeType": "YulFunctionCall", + "src": "3443:54:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3435:4:103", + "nodeType": "YulIdentifier", + "src": "3435:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "2860:643:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2968:9:103", + "nodeType": "YulTypedName", + "src": "2968:9:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "2979:6:103", + "nodeType": "YulTypedName", + "src": "2979:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "2987:6:103", + "nodeType": "YulTypedName", + "src": "2987:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2998:4:103", + "nodeType": "YulTypedName", + "src": "2998:4:103", + "type": "" + } + ], + "src": "2860:643:103" + }, + { + "body": { + "nativeSrc": "3586:199:103", + "nodeType": "YulBlock", + "src": "3586:199:103", + "statements": [ + { + "body": { + "nativeSrc": "3632:16:103", + "nodeType": "YulBlock", + "src": "3632:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3641:1:103", + "nodeType": "YulLiteral", + "src": "3641:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3644:1:103", + "nodeType": "YulLiteral", + "src": "3644:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3634:6:103", + "nodeType": "YulIdentifier", + "src": "3634:6:103" + }, + "nativeSrc": "3634:12:103", + "nodeType": "YulFunctionCall", + "src": "3634:12:103" + }, + "nativeSrc": "3634:12:103", + "nodeType": "YulExpressionStatement", + "src": "3634:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "3607:7:103", + "nodeType": "YulIdentifier", + "src": "3607:7:103" + }, + { + "name": "headStart", + "nativeSrc": "3616:9:103", + "nodeType": "YulIdentifier", + "src": "3616:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "3603:3:103", + "nodeType": "YulIdentifier", + "src": "3603:3:103" + }, + "nativeSrc": "3603:23:103", + "nodeType": "YulFunctionCall", + "src": "3603:23:103" + }, + { + "kind": "number", + "nativeSrc": "3628:2:103", + "nodeType": "YulLiteral", + "src": "3628:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "3599:3:103", + "nodeType": "YulIdentifier", + "src": "3599:3:103" + }, + "nativeSrc": "3599:32:103", + "nodeType": "YulFunctionCall", + "src": "3599:32:103" + }, + "nativeSrc": "3596:52:103", + "nodeType": "YulIf", + "src": "3596:52:103" + }, + { + "nativeSrc": "3657:29:103", + "nodeType": "YulVariableDeclaration", + "src": "3657:29:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3676:9:103", + "nodeType": "YulIdentifier", + "src": "3676:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3670:5:103", + "nodeType": "YulIdentifier", + "src": "3670:5:103" + }, + "nativeSrc": "3670:16:103", + "nodeType": "YulFunctionCall", + "src": "3670:16:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "3661:5:103", + "nodeType": "YulTypedName", + "src": "3661:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3739:16:103", + "nodeType": "YulBlock", + "src": "3739:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "3748:1:103", + "nodeType": "YulLiteral", + "src": "3748:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "3751:1:103", + "nodeType": "YulLiteral", + "src": "3751:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "3741:6:103", + "nodeType": "YulIdentifier", + "src": "3741:6:103" + }, + "nativeSrc": "3741:12:103", + "nodeType": "YulFunctionCall", + "src": "3741:12:103" + }, + "nativeSrc": "3741:12:103", + "nodeType": "YulExpressionStatement", + "src": "3741:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3708:5:103", + "nodeType": "YulIdentifier", + "src": "3708:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "3729:5:103", + "nodeType": "YulIdentifier", + "src": "3729:5:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3722:6:103", + "nodeType": "YulIdentifier", + "src": "3722:6:103" + }, + "nativeSrc": "3722:13:103", + "nodeType": "YulFunctionCall", + "src": "3722:13:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3715:6:103", + "nodeType": "YulIdentifier", + "src": "3715:6:103" + }, + "nativeSrc": "3715:21:103", + "nodeType": "YulFunctionCall", + "src": "3715:21:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "3705:2:103", + "nodeType": "YulIdentifier", + "src": "3705:2:103" + }, + "nativeSrc": "3705:32:103", + "nodeType": "YulFunctionCall", + "src": "3705:32:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "3698:6:103", + "nodeType": "YulIdentifier", + "src": "3698:6:103" + }, + "nativeSrc": "3698:40:103", + "nodeType": "YulFunctionCall", + "src": "3698:40:103" + }, + "nativeSrc": "3695:60:103", + "nodeType": "YulIf", + "src": "3695:60:103" + }, + { + "nativeSrc": "3764:15:103", + "nodeType": "YulAssignment", + "src": "3764:15:103", + "value": { + "name": "value", + "nativeSrc": "3774:5:103", + "nodeType": "YulIdentifier", + "src": "3774:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "3764:6:103", + "nodeType": "YulIdentifier", + "src": "3764:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "3508:277:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3552:9:103", + "nodeType": "YulTypedName", + "src": "3552:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "3563:7:103", + "nodeType": "YulTypedName", + "src": "3563:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "3575:6:103", + "nodeType": "YulTypedName", + "src": "3575:6:103", + "type": "" + } + ], + "src": "3508:277:103" + }, + { + "body": { + "nativeSrc": "3964:228:103", + "nodeType": "YulBlock", + "src": "3964:228:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3981:9:103", + "nodeType": "YulIdentifier", + "src": "3981:9:103" + }, + { + "kind": "number", + "nativeSrc": "3992:2:103", + "nodeType": "YulLiteral", + "src": "3992:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3974:6:103", + "nodeType": "YulIdentifier", + "src": "3974:6:103" + }, + "nativeSrc": "3974:21:103", + "nodeType": "YulFunctionCall", + "src": "3974:21:103" + }, + "nativeSrc": "3974:21:103", + "nodeType": "YulExpressionStatement", + "src": "3974:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4015:9:103", + "nodeType": "YulIdentifier", + "src": "4015:9:103" + }, + { + "kind": "number", + "nativeSrc": "4026:2:103", + "nodeType": "YulLiteral", + "src": "4026:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4011:3:103", + "nodeType": "YulIdentifier", + "src": "4011:3:103" + }, + "nativeSrc": "4011:18:103", + "nodeType": "YulFunctionCall", + "src": "4011:18:103" + }, + { + "kind": "number", + "nativeSrc": "4031:2:103", + "nodeType": "YulLiteral", + "src": "4031:2:103", + "type": "", + "value": "38" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4004:6:103", + "nodeType": "YulIdentifier", + "src": "4004:6:103" + }, + "nativeSrc": "4004:30:103", + "nodeType": "YulFunctionCall", + "src": "4004:30:103" + }, + "nativeSrc": "4004:30:103", + "nodeType": "YulExpressionStatement", + "src": "4004:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4054:9:103", + "nodeType": "YulIdentifier", + "src": "4054:9:103" + }, + { + "kind": "number", + "nativeSrc": "4065:2:103", + "nodeType": "YulLiteral", + "src": "4065:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4050:3:103", + "nodeType": "YulIdentifier", + "src": "4050:3:103" + }, + "nativeSrc": "4050:18:103", + "nodeType": "YulFunctionCall", + "src": "4050:18:103" + }, + { + "hexValue": "5769746e65744465706c6f7965724d657465723a20616c72656164792070726f", + "kind": "string", + "nativeSrc": "4070:34:103", + "nodeType": "YulLiteral", + "src": "4070:34:103", + "type": "", + "value": "WitnetDeployerMeter: already pro" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4043:6:103", + "nodeType": "YulIdentifier", + "src": "4043:6:103" + }, + "nativeSrc": "4043:62:103", + "nodeType": "YulFunctionCall", + "src": "4043:62:103" + }, + "nativeSrc": "4043:62:103", + "nodeType": "YulExpressionStatement", + "src": "4043:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4125:9:103", + "nodeType": "YulIdentifier", + "src": "4125:9:103" + }, + { + "kind": "number", + "nativeSrc": "4136:2:103", + "nodeType": "YulLiteral", + "src": "4136:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4121:3:103", + "nodeType": "YulIdentifier", + "src": "4121:3:103" + }, + "nativeSrc": "4121:18:103", + "nodeType": "YulFunctionCall", + "src": "4121:18:103" + }, + { + "hexValue": "786966696564", + "kind": "string", + "nativeSrc": "4141:8:103", + "nodeType": "YulLiteral", + "src": "4141:8:103", + "type": "", + "value": "xified" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4114:6:103", + "nodeType": "YulIdentifier", + "src": "4114:6:103" + }, + "nativeSrc": "4114:36:103", + "nodeType": "YulFunctionCall", + "src": "4114:36:103" + }, + "nativeSrc": "4114:36:103", + "nodeType": "YulExpressionStatement", + "src": "4114:36:103" + }, + { + "nativeSrc": "4159:27:103", + "nodeType": "YulAssignment", + "src": "4159:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4171:9:103", + "nodeType": "YulIdentifier", + "src": "4171:9:103" + }, + { + "kind": "number", + "nativeSrc": "4182:3:103", + "nodeType": "YulLiteral", + "src": "4182:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4167:3:103", + "nodeType": "YulIdentifier", + "src": "4167:3:103" + }, + "nativeSrc": "4167:19:103", + "nodeType": "YulFunctionCall", + "src": "4167:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4159:4:103", + "nodeType": "YulIdentifier", + "src": "4159:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "3790:402:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3941:9:103", + "nodeType": "YulTypedName", + "src": "3941:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3955:4:103", + "nodeType": "YulTypedName", + "src": "3955:4:103", + "type": "" + } + ], + "src": "3790:402:103" + }, + { + "body": { + "nativeSrc": "4398:240:103", + "nodeType": "YulBlock", + "src": "4398:240:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4415:3:103", + "nodeType": "YulIdentifier", + "src": "4415:3:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4424:6:103", + "nodeType": "YulIdentifier", + "src": "4424:6:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4436:3:103", + "nodeType": "YulLiteral", + "src": "4436:3:103", + "type": "", + "value": "248" + }, + { + "kind": "number", + "nativeSrc": "4441:3:103", + "nodeType": "YulLiteral", + "src": "4441:3:103", + "type": "", + "value": "255" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4432:3:103", + "nodeType": "YulIdentifier", + "src": "4432:3:103" + }, + "nativeSrc": "4432:13:103", + "nodeType": "YulFunctionCall", + "src": "4432:13:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4420:3:103", + "nodeType": "YulIdentifier", + "src": "4420:3:103" + }, + "nativeSrc": "4420:26:103", + "nodeType": "YulFunctionCall", + "src": "4420:26:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4408:6:103", + "nodeType": "YulIdentifier", + "src": "4408:6:103" + }, + "nativeSrc": "4408:39:103", + "nodeType": "YulFunctionCall", + "src": "4408:39:103" + }, + "nativeSrc": "4408:39:103", + "nodeType": "YulExpressionStatement", + "src": "4408:39:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4467:3:103", + "nodeType": "YulIdentifier", + "src": "4467:3:103" + }, + { + "kind": "number", + "nativeSrc": "4472:1:103", + "nodeType": "YulLiteral", + "src": "4472:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4463:3:103", + "nodeType": "YulIdentifier", + "src": "4463:3:103" + }, + "nativeSrc": "4463:11:103", + "nodeType": "YulFunctionCall", + "src": "4463:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4484:2:103", + "nodeType": "YulLiteral", + "src": "4484:2:103", + "type": "", + "value": "96" + }, + { + "name": "value1", + "nativeSrc": "4488:6:103", + "nodeType": "YulIdentifier", + "src": "4488:6:103" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "4480:3:103", + "nodeType": "YulIdentifier", + "src": "4480:3:103" + }, + "nativeSrc": "4480:15:103", + "nodeType": "YulFunctionCall", + "src": "4480:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "4501:26:103", + "nodeType": "YulLiteral", + "src": "4501:26:103", + "type": "", + "value": "0xffffffffffffffffffffffff" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "4497:3:103", + "nodeType": "YulIdentifier", + "src": "4497:3:103" + }, + "nativeSrc": "4497:31:103", + "nodeType": "YulFunctionCall", + "src": "4497:31:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "4476:3:103", + "nodeType": "YulIdentifier", + "src": "4476:3:103" + }, + "nativeSrc": "4476:53:103", + "nodeType": "YulFunctionCall", + "src": "4476:53:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4456:6:103", + "nodeType": "YulIdentifier", + "src": "4456:6:103" + }, + "nativeSrc": "4456:74:103", + "nodeType": "YulFunctionCall", + "src": "4456:74:103" + }, + "nativeSrc": "4456:74:103", + "nodeType": "YulExpressionStatement", + "src": "4456:74:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4550:3:103", + "nodeType": "YulIdentifier", + "src": "4550:3:103" + }, + { + "kind": "number", + "nativeSrc": "4555:2:103", + "nodeType": "YulLiteral", + "src": "4555:2:103", + "type": "", + "value": "21" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4546:3:103", + "nodeType": "YulIdentifier", + "src": "4546:3:103" + }, + "nativeSrc": "4546:12:103", + "nodeType": "YulFunctionCall", + "src": "4546:12:103" + }, + { + "name": "value2", + "nativeSrc": "4560:6:103", + "nodeType": "YulIdentifier", + "src": "4560:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4539:6:103", + "nodeType": "YulIdentifier", + "src": "4539:6:103" + }, + "nativeSrc": "4539:28:103", + "nodeType": "YulFunctionCall", + "src": "4539:28:103" + }, + "nativeSrc": "4539:28:103", + "nodeType": "YulExpressionStatement", + "src": "4539:28:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4587:3:103", + "nodeType": "YulIdentifier", + "src": "4587:3:103" + }, + { + "kind": "number", + "nativeSrc": "4592:2:103", + "nodeType": "YulLiteral", + "src": "4592:2:103", + "type": "", + "value": "53" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4583:3:103", + "nodeType": "YulIdentifier", + "src": "4583:3:103" + }, + "nativeSrc": "4583:12:103", + "nodeType": "YulFunctionCall", + "src": "4583:12:103" + }, + { + "name": "value3", + "nativeSrc": "4597:6:103", + "nodeType": "YulIdentifier", + "src": "4597:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4576:6:103", + "nodeType": "YulIdentifier", + "src": "4576:6:103" + }, + "nativeSrc": "4576:28:103", + "nodeType": "YulFunctionCall", + "src": "4576:28:103" + }, + "nativeSrc": "4576:28:103", + "nodeType": "YulExpressionStatement", + "src": "4576:28:103" + }, + { + "nativeSrc": "4613:19:103", + "nodeType": "YulAssignment", + "src": "4613:19:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4624:3:103", + "nodeType": "YulIdentifier", + "src": "4624:3:103" + }, + { + "kind": "number", + "nativeSrc": "4629:2:103", + "nodeType": "YulLiteral", + "src": "4629:2:103", + "type": "", + "value": "85" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4620:3:103", + "nodeType": "YulIdentifier", + "src": "4620:3:103" + }, + "nativeSrc": "4620:12:103", + "nodeType": "YulFunctionCall", + "src": "4620:12:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "4613:3:103", + "nodeType": "YulIdentifier", + "src": "4613:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "4197:441:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "4350:3:103", + "nodeType": "YulTypedName", + "src": "4350:3:103", + "type": "" + }, + { + "name": "value3", + "nativeSrc": "4355:6:103", + "nodeType": "YulTypedName", + "src": "4355:6:103", + "type": "" + }, + { + "name": "value2", + "nativeSrc": "4363:6:103", + "nodeType": "YulTypedName", + "src": "4363:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "4371:6:103", + "nodeType": "YulTypedName", + "src": "4371:6:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4379:6:103", + "nodeType": "YulTypedName", + "src": "4379:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "4390:3:103", + "nodeType": "YulTypedName", + "src": "4390:3:103", + "type": "" + } + ], + "src": "4197:441:103" + } + ] + }, + "contents": "{\n { }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function abi_decode_bytes(offset, end) -> array\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n let _1 := calldataload(offset)\n let _2 := 0xffffffffffffffff\n if gt(_1, _2) { panic_error_0x41() }\n let _3 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_1, 0x1f), _3), 63), _3))\n if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _1)\n if gt(add(add(offset, _1), 0x20), end) { revert(0, 0) }\n calldatacopy(add(memPtr, 0x20), add(offset, 0x20), _1)\n mstore(add(add(memPtr, _1), 0x20), 0)\n array := memPtr\n }\n function abi_decode_tuple_t_bytes_memory_ptrt_bytes32(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let offset := calldataload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value0 := abi_decode_bytes(add(headStart, offset), dataEnd)\n value1 := calldataload(add(headStart, 32))\n }\n function abi_decode_tuple_t_bytes32t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := calldataload(headStart)\n let value := calldataload(add(headStart, 32))\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value1 := value\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n value2 := abi_decode_bytes(add(headStart, offset), dataEnd)\n }\n function abi_encode_tuple_t_contract$_WitnetProxy_$4713__to_t_address_payable__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function abi_encode_tuple_t_stringliteral_a449f037473e66c93f74665b4547dc6279e787cd06aefbab4d74a9c55d42a13f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 33)\n mstore(add(headStart, 64), \"WitnetDeployer: deployment faile\")\n mstore(add(headStart, 96), \"d\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_bytes_memory_ptr__to_t_address_t_bytes_memory_ptr__fromStack_reversed(headStart, value1, value0) -> tail\n {\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n let _1 := 32\n mstore(add(headStart, 32), 64)\n let length := mload(value1)\n mstore(add(headStart, 64), length)\n let i := 0\n for { } lt(i, length) { i := add(i, _1) }\n {\n mstore(add(add(headStart, i), 96), mload(add(add(value1, i), _1)))\n }\n mstore(add(add(headStart, length), 96), 0)\n tail := add(add(headStart, and(add(length, 31), not(31))), 96)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 38)\n mstore(add(headStart, 64), \"WitnetDeployerMeter: already pro\")\n mstore(add(headStart, 96), \"xified\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_packed_t_bytes1_t_address_t_bytes32_t_bytes32__to_t_bytes1_t_address_t_bytes32_t_bytes32__nonPadded_inplace_fromStack_reversed(pos, value3, value2, value1, value0) -> end\n {\n mstore(pos, and(value0, shl(248, 255)))\n mstore(add(pos, 1), and(shl(96, value1), not(0xffffffffffffffffffffffff)))\n mstore(add(pos, 21), value2)\n mstore(add(pos, 53), value3)\n end := add(pos, 85)\n }\n}", + "id": 103, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "355:1267:20:-:0;;;;;;;;;;;;;;;;;;;", + "deployedSourceMap": "355:1267:20:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;411:201;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;363:32:103;;;345:51;;333:2;318:18;411:201:20;;;;;;;900:448:18;;;;;;:::i;:::-;;:::i;620:997:20:-;;;;;;:::i;:::-;;:::i;1694:417:18:-;;;;;;:::i;:::-;;:::i;411:201:20:-;520:7;552:52;566:30;;;;;;;;:::i;:::-;-1:-1:-1;;566:30:20;;;;;;;;;;;;;;598:5;552:13;:52::i;:::-;545:59;411:201;-1:-1:-1;;411:201:20:o;900:448:18:-;997:17;1044:31;1058:9;1069:5;1044:13;:31::i;:::-;1032:43;;1090:9;-1:-1:-1;;;;;1090:21:18;;1115:1;1090:26;1086:255;;1225:5;1213:9;1207:16;1200:4;1189:9;1185:20;1182:1;1174:57;1161:70;-1:-1:-1;;;;;;1268:23:18;;1260:69;;;;-1:-1:-1;;;1260:69:18;;2660:2:103;1260:69:18;;;2642:21:103;2699:2;2679:18;;;2672:30;2738:34;2718:18;;;2711:62;-1:-1:-1;;;2789:18:103;;;2782:31;2830:19;;1260:69:18;;;;;;;;620:997:20;774:11;803:18;824:30;843:10;824:18;:30::i;:::-;803:51;;869:10;-1:-1:-1;;;;;869:22:20;;895:1;869:27;865:745;;952:50;959:30;;;;;;;;:::i;:::-;-1:-1:-1;;959:30:20;;;;;;;;;;;;;;991:10;952:6;:50::i;:::-;;1090:10;-1:-1:-1;;;;;1070:42:20;;1131:20;1322:10;1420:9;1220:228;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1070:393;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1505:10:20;-1:-1:-1;1478:39:20;;865:745;1550:48;;-1:-1:-1;;;1550:48:20;;3992:2:103;1550:48:20;;;3974:21:103;4031:2;4011:18;;;4004:30;4070:34;4050:18;;;4043:62;-1:-1:-1;;;4121:18:103;;;4114:36;4167:19;;1550:48:20;3790:402:103;620:997:20;;;;;;:::o;1694:417:18:-;2036:20;;;;;;;1898:177;;;-1:-1:-1;;;;;;1898:177:18;;;4408:39:103;1980:4:18;4484:2:103;4480:15;-1:-1:-1;;4476:53:103;4463:11;;;4456:74;4546:12;;;4539:28;;;;4583:12;;;;4576:28;;;;1898:177:18;;;;;;;;;;4620:12:103;;;;1898:177:18;;;1870:220;;;;;;1694:417::o;-1:-1:-1:-;;;;;;;;:::o;14:180:103:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:103;;14:180;-1:-1:-1;14:180:103:o;407:127::-;468:10;463:3;459:20;456:1;449:31;499:4;496:1;489:15;523:4;520:1;513:15;539:718;581:5;634:3;627:4;619:6;615:17;611:27;601:55;;652:1;649;642:12;601:55;688:6;675:20;714:18;751:2;747;744:10;741:36;;;757:18;;:::i;:::-;832:2;826:9;800:2;886:13;;-1:-1:-1;;882:22:103;;;906:2;878:31;874:40;862:53;;;930:18;;;950:22;;;927:46;924:72;;;976:18;;:::i;:::-;1016:10;1012:2;1005:22;1051:2;1043:6;1036:18;1097:3;1090:4;1085:2;1077:6;1073:15;1069:26;1066:35;1063:55;;;1114:1;1111;1104:12;1063:55;1178:2;1171:4;1163:6;1159:17;1152:4;1144:6;1140:17;1127:54;1225:1;1218:4;1213:2;1205:6;1201:15;1197:26;1190:37;1245:6;1236:15;;;;;;539:718;;;;:::o;1262:388::-;1339:6;1347;1400:2;1388:9;1379:7;1375:23;1371:32;1368:52;;;1416:1;1413;1406:12;1368:52;1456:9;1443:23;1489:18;1481:6;1478:30;1475:50;;;1521:1;1518;1511:12;1475:50;1544:49;1585:7;1576:6;1565:9;1561:22;1544:49;:::i;:::-;1534:59;1640:2;1625:18;;;;1612:32;;-1:-1:-1;;;;1262:388:103:o;1655:562::-;1741:6;1749;1757;1810:2;1798:9;1789:7;1785:23;1781:32;1778:52;;;1826:1;1823;1816:12;1778:52;1849:23;;;-1:-1:-1;1922:2:103;1907:18;;1894:32;-1:-1:-1;;;;;1955:31:103;;1945:42;;1935:70;;2001:1;1998;1991:12;1935:70;2024:5;-1:-1:-1;2080:2:103;2065:18;;2052:32;2107:18;2096:30;;2093:50;;;2139:1;2136;2129:12;2093:50;2162:49;2203:7;2194:6;2183:9;2179:22;2162:49;:::i;:::-;2152:59;;;1655:562;;;;;:::o;2860:643::-;3064:1;3060;3055:3;3051:11;3047:19;3039:6;3035:32;3024:9;3017:51;2998:4;3087:2;3125;3120;3109:9;3105:18;3098:30;3157:6;3151:13;3200:6;3195:2;3184:9;3180:18;3173:34;3225:1;3235:140;3249:6;3246:1;3243:13;3235:140;;;3344:14;;;3340:23;;3334:30;3310:17;;;3329:2;3306:26;3299:66;3264:10;;3235:140;;;3239:3;3424:1;3419:2;3410:6;3399:9;3395:22;3391:31;3384:42;3494:2;3487;3483:7;3478:2;3470:6;3466:15;3462:29;3451:9;3447:45;3443:54;3435:62;;;;2860:643;;;;;:::o;3508:277::-;3575:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:52;;;3644:1;3641;3634:12;3596:52;3676:9;3670:16;3729:5;3722:13;3715:21;3708:5;3705:32;3695:60;;3751:1;3748;3741:12", + "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.8.0 <0.9.0;\r\n\r\nimport \"./WitnetDeployer.sol\";\r\n\r\n/// @notice WitnetDeployerMeter contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \r\n/// @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\r\n/// @author Guillermo Díaz \r\n\r\ncontract WitnetDeployerMeter is WitnetDeployer {\r\n\r\n function determineProxyAddr(bytes32 _salt) \r\n virtual override\r\n public view\r\n returns (address)\r\n {\r\n return determineAddr(type(WitnetProxy).creationCode, _salt);\r\n }\r\n\r\n function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData)\r\n virtual override\r\n external \r\n returns (WitnetProxy)\r\n {\r\n address _proxyAddr = determineProxyAddr(_proxySalt);\r\n if (_proxyAddr.code.length == 0) {\r\n // deploy the WitnetProxy\r\n deploy(type(WitnetProxy).creationCode, _proxySalt);\r\n // settle first implementation address,\r\n WitnetProxy(payable(_proxyAddr)).upgradeTo(\r\n _firstImplementation, \r\n // and initialize it, providing\r\n abi.encode(\r\n // the owner (i.e. the caller of this function)\r\n msg.sender,\r\n // and some (optional) initialization data\r\n _initData\r\n )\r\n );\r\n return WitnetProxy(payable(_proxyAddr));\r\n } else {\r\n revert(\"WitnetDeployerMeter: already proxified\");\r\n }\r\n }\r\n\r\n}", + "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetDeployerMeter.sol", + "ast": { + "absolutePath": "project:/contracts/core/WitnetDeployerMeter.sol", + "exportedSymbols": { + "Create3": [ + 17522 + ], + "ERC165": [ + 602 + ], + "IERC165": [ + 614 + ], + "Initializable": [ + 253 + ], + "Proxiable": [ + 30273 + ], + "Upgradeable": [ + 30388 + ], + "WitnetDeployer": [ + 4262 + ], + "WitnetDeployerMeter": [ + 4486 + ], + "WitnetProxy": [ + 4713 + ] + }, + "id": 4487, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4401, + "literals": [ + "solidity", + ">=", + "0.8", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "35:31:20" + }, + { + "absolutePath": "project:/contracts/core/WitnetDeployer.sol", + "file": "./WitnetDeployer.sol", + "id": 4402, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4487, + "sourceUnit": 4263, + "src": "70:30:20", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 4404, + "name": "WitnetDeployer", + "nameLocations": [ + "387:14:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4262, + "src": "387:14:20" + }, + "id": 4405, + "nodeType": "InheritanceSpecifier", + "src": "387:14:20" + } + ], + "canonicalName": "WitnetDeployerMeter", + "contractDependencies": [ + 4713 + ], + "contractKind": "contract", + "documentation": { + "id": 4403, + "nodeType": "StructuredDocumentation", + "src": "104:249:20", + "text": "@notice WitnetDeployerMeter contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, \n @notice and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.\n @author Guillermo Díaz " + }, + "fullyImplemented": true, + "id": 4486, + "linearizedBaseContracts": [ + 4486, + 4262 + ], + "name": "WitnetDeployerMeter", + "nameLocation": "364:19:20", + "nodeType": "ContractDefinition", + "nodes": [ + { + "baseFunctions": [ + 4197 + ], + "body": { + "id": 4421, + "nodeType": "Block", + "src": "534:78:20", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "arguments": [ + { + "id": 4415, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "571:11:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + ], + "id": 4414, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "566:4:20", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4416, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "566:17:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$4713", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4417, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "584:12:20", + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "566:30:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 4418, + "name": "_salt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4407, + "src": "598:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4413, + "name": "determineAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4184, + "src": "552:13:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes memory,bytes32) view returns (address)" + } + }, + "id": 4419, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "552:52:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4412, + "id": 4420, + "nodeType": "Return", + "src": "545:59:20" + } + ] + }, + "functionSelector": "4998f038", + "id": 4422, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "determineProxyAddr", + "nameLocation": "420:18:20", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4409, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "472:8:20" + }, + "parameters": { + "id": 4408, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4407, + "mutability": "mutable", + "name": "_salt", + "nameLocation": "447:5:20", + "nodeType": "VariableDeclaration", + "scope": 4422, + "src": "439:13:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4406, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "439:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "438:15:20" + }, + "returnParameters": { + "id": 4412, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4411, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4422, + "src": "520:7:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4410, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "520:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "519:9:20" + }, + "scope": 4486, + "src": "411:201:20", + "stateMutability": "view", + "virtual": true, + "visibility": "public" + }, + { + "baseFunctions": [ + 4261 + ], + "body": { + "id": 4484, + "nodeType": "Block", + "src": "792:825:20", + "statements": [ + { + "assignments": [ + 4436 + ], + "declarations": [ + { + "constant": false, + "id": 4436, + "mutability": "mutable", + "name": "_proxyAddr", + "nameLocation": "811:10:20", + "nodeType": "VariableDeclaration", + "scope": 4484, + "src": "803:18:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4435, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "803:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4440, + "initialValue": { + "arguments": [ + { + "id": 4438, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4424, + "src": "843:10:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4437, + "name": "determineProxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4422 + ], + "referencedDeclaration": 4422, + "src": "824:18:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes32) view returns (address)" + } + }, + "id": 4439, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "824:30:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "803:51:20" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4445, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "expression": { + "id": 4441, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4436, + "src": "869:10:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "880:4:20", + "memberName": "code", + "nodeType": "MemberAccess", + "src": "869:15:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "885:6:20", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "869:22:20", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 4444, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "895:1:20", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "869:27:20", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4482, + "nodeType": "Block", + "src": "1535:75:20", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e65744465706c6f7965724d657465723a20616c72656164792070726f786966696564", + "id": 4479, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1557:40:20", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d", + "typeString": "literal_string \"WitnetDeployerMeter: already proxified\"" + }, + "value": "WitnetDeployerMeter: already proxified" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_35301ced9723f633ba26a41ab9b6ac754c475b81a3607fce6b33ac3eddaf591d", + "typeString": "literal_string \"WitnetDeployerMeter: already proxified\"" + } + ], + "id": 4478, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "1550:6:20", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4480, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1550:48:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4481, + "nodeType": "ExpressionStatement", + "src": "1550:48:20" + } + ] + }, + "id": 4483, + "nodeType": "IfStatement", + "src": "865:745:20", + "trueBody": { + "id": 4477, + "nodeType": "Block", + "src": "898:631:20", + "statements": [ + { + "expression": { + "arguments": [ + { + "expression": { + "arguments": [ + { + "id": 4448, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "964:11:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + ], + "id": 4447, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967269, + "src": "959:4:20", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4449, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "959:17:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_contract$_WitnetProxy_$4713", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4450, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "977:12:20", + "memberName": "creationCode", + "nodeType": "MemberAccess", + "src": "959:30:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "id": 4451, + "name": "_proxySalt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4424, + "src": "991:10:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "id": 4446, + "name": "deploy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4146, + "src": "952:6:20", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes_memory_ptr_$_t_bytes32_$returns$_t_address_$", + "typeString": "function (bytes memory,bytes32) returns (address)" + } + }, + "id": 4452, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "952:50:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4453, + "nodeType": "ExpressionStatement", + "src": "952:50:20" + }, + { + "expression": { + "arguments": [ + { + "id": 4461, + "name": "_firstImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4426, + "src": "1131:20:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "arguments": [ + { + "expression": { + "id": 4464, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "1322:3:20", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4465, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1326:6:20", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "1322:10:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 4466, + "name": "_initData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4428, + "src": "1420:9:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4462, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "1220:3:20", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4463, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "1224:6:20", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "1220:10:20", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 4467, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1220:228:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4457, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4436, + "src": "1090:10:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4456, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1082:8:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4455, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1082:8:20", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4458, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1082:19:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4454, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "1070:11:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4459, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1070:32:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "id": 4460, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1103:9:20", + "memberName": "upgradeTo", + "nodeType": "MemberAccess", + "referencedDeclaration": 4703, + "src": "1070:42:20", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$returns$_t_bool_$", + "typeString": "function (address,bytes memory) external returns (bool)" + } + }, + "id": 4468, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1070:393:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4469, + "nodeType": "ExpressionStatement", + "src": "1070:393:20" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4473, + "name": "_proxyAddr", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4436, + "src": "1505:10:20", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4472, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1497:8:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_payable_$", + "typeString": "type(address payable)" + }, + "typeName": { + "id": 4471, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1497:8:20", + "stateMutability": "payable", + "typeDescriptions": {} + } + }, + "id": 4474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1497:19:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address_payable", + "typeString": "address payable" + } + ], + "id": 4470, + "name": "WitnetProxy", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4713, + "src": "1485:11:20", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_WitnetProxy_$4713_$", + "typeString": "type(contract WitnetProxy)" + } + }, + "id": 4475, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1485:32:20", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "functionReturnParameters": 4434, + "id": 4476, + "nodeType": "Return", + "src": "1478:39:20" + } + ] + } + } + ] + }, + "functionSelector": "5ba489e7", + "id": 4485, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "proxify", + "nameLocation": "629:7:20", + "nodeType": "FunctionDefinition", + "overrides": { + "id": 4430, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "728:8:20" + }, + "parameters": { + "id": 4429, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4424, + "mutability": "mutable", + "name": "_proxySalt", + "nameLocation": "645:10:20", + "nodeType": "VariableDeclaration", + "scope": 4485, + "src": "637:18:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 4423, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "637:7:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4426, + "mutability": "mutable", + "name": "_firstImplementation", + "nameLocation": "665:20:20", + "nodeType": "VariableDeclaration", + "scope": 4485, + "src": "657:28:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4425, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "657:7:20", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4428, + "mutability": "mutable", + "name": "_initData", + "nameLocation": "700:9:20", + "nodeType": "VariableDeclaration", + "scope": 4485, + "src": "687:22:20", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4427, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "687:5:20", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "636:74:20" + }, + "returnParameters": { + "id": 4434, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4433, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4485, + "src": "774:11:20", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + }, + "typeName": { + "id": 4432, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4431, + "name": "WitnetProxy", + "nameLocations": [ + "774:11:20" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 4713, + "src": "774:11:20" + }, + "referencedDeclaration": 4713, + "src": "774:11:20", + "typeDescriptions": { + "typeIdentifier": "t_contract$_WitnetProxy_$4713", + "typeString": "contract WitnetProxy" + } + }, + "visibility": "internal" + } + ], + "src": "773:13:20" + }, + "scope": 4486, + "src": "620:997:20", + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "external" + } + ], + "scope": 4487, + "src": "355:1267:20", + "usedErrors": [], + "usedEvents": [] + } + ], + "src": "35:1587:20" + }, + "compiler": { + "name": "solc", + "version": "0.8.25+commit.b61c2a91.Emscripten.clang" + }, + "networks": {}, + "schemaVersion": "3.4.16", + "updatedAt": "2024-10-20T09:42:12.838Z", + "devdoc": { + "author": "Guillermo Díaz ", + "kind": "dev", + "methods": { + "deploy(bytes,bytes32)": { + "details": "The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the addressnor the nonce of the caller (i.e. see EIP-1014). ", + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_deployed": "Just deployed contract address." + } + }, + "determineAddr(bytes,bytes32)": { + "params": { + "_initCode": "Creation code, including construction logic and input parameters.", + "_salt": "Arbitrary value to modify resulting address." + }, + "returns": { + "_0": "Deterministic contract address." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "deploy(bytes,bytes32)": { + "notice": "Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. " + }, + "determineAddr(bytes,bytes32)": { + "notice": "Determine counter-factual address of the contract that would be deployed by the given `_initCode` and a `_salt`." + } + }, + "notice": "WitnetDeployerMeter contract used both as CREATE2 factory (EIP-1014) for Witnet artifacts, and CREATE3 factory (EIP-3171) for Witnet proxies, on the Meter Ecosystem.", + "version": 1 + } + } \ No newline at end of file diff --git a/migrations/frosts/WitnetProxy.json b/migrations/frosts/WitnetProxy.json new file mode 100644 index 00000000..05cd7c47 --- /dev/null +++ b/migrations/frosts/WitnetProxy.json @@ -0,0 +1,9535 @@ +{ + "contractName": "WitnetProxy", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "upgradeTo", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "metadata": "{\"compiler\":{\"version\":\"0.8.25+commit.b61c2a91\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_initData\",\"type\":\"bytes\"}],\"name\":\"upgradeTo\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Guillermo D\\u00edaz \",\"kind\":\"dev\",\"methods\":{\"upgradeTo(address,bytes)\":{\"params\":{\"_initData\":\"Raw data with which new implementation will be initialized.\",\"_newImplementation\":\"New implementation address.\"},\"returns\":{\"_0\":\"Returns whether new implementation would be further upgradable, or not.\"}}},\"title\":\"WitnetProxy: upgradable delegate-proxy contract. \",\"version\":1},\"userdoc\":{\"events\":{\"Upgraded(address)\":{\"notice\":\"Event emitted every time the implementation gets updated.\"}},\"kind\":\"user\",\"methods\":{\"constructor\":{\"notice\":\"Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\"},\"implementation()\":{\"notice\":\"Returns proxy's current implementation address.\"},\"upgradeTo(address,bytes)\":{\"notice\":\"Upgrades the `implementation` address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"project:/contracts/core/WitnetProxy.sol\":\"WitnetProxy\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xddce8e17e3d3f9ed818b4f4c4478a8262aab8b11ed322f1bf5ed705bb4bd97fa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8084aa71a4cc7d2980972412a88fe4f114869faea3fefa5436431644eb5c0287\",\"dweb:/ipfs/Qmbqfs5dRdPvHVKY8kTaeyc65NdqXRQwRK7h9s5UJEhD1p\"]},\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"project:/contracts/core/WitnetProxy.sol\":{\"keccak256\":\"0x2b2f56fc69bf0e01f6f1062202d1682cd394fa3b3d9ff2f8f833ab51c9e866cc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8017f76a71e4a52a5a5e249081c92510bac5b91f03f727e66ff4406238521337\",\"dweb:/ipfs/QmdWcPAL3MGtxGdpX5CMfgzz4YzxYEeCiFRoGHVCr8rLEL\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0x86032205378fed9ed2bf155eed8ce4bdbb13b7f5960850c6d50954a38b61a3d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f89978eda4244a13f42a6092a94ac829bb3e38c92d77d4978b9f32894b187a63\",\"dweb:/ipfs/Qmbc1XaFCvLm3Sxvh7tP29Ug32jBGy3avsCqBGAptxs765\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0xbeb025c71f037acb1a668174eb6930631bf397129beb825f2660e5d8cf19614f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fe6ce4dcd500093ae069d35b91829ccb471e1ca33ed0851fb053fbfe76c78aba\",\"dweb:/ipfs/QmT7huvCFS6bHDxt7HhEogJmyvYNbeb6dFTJudsVSX6nEs\"]}},\"version\":1}", + "bytecode": "0x6080604052348015600f57600080fd5b506109e58061001f6000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033", + "deployedBytecode": "0x60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610791565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561050857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610830565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b17905251610326919061087d565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103885760405162461bcd60e51b815260040161014990610899565b8080602001905181019061039c9190610830565b6103e85760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610426573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061044a91906108e0565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610488573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104ac91906108e0565b146105055760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b600080856001600160a01b0316856040516024016105269190610925565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161055b919061087d565b600060405180830381855af49150503d8060008114610596576040519150601f19603f3d011682016040523d82523d6000602084013e61059b565b606091505b509150915081610635576044815110156106025760405162461bcd60e51b815260206004820152602260248201527f5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c604482015261195960f21b6064820152608401610149565b6004810190508080602001905181019061061c9190610938565b60405162461bcd60e51b81526004016101499190610925565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0388169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2856001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106f5575060408051601f3d908101601f191682019092526106f291810190610830565b60015b6107115760405162461bcd60e51b815260040161014990610899565b935061071c92505050565b92915050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561076157610761610722565b604052919050565b600067ffffffffffffffff82111561078357610783610722565b50601f01601f191660200190565b600080604083850312156107a457600080fd5b82356001600160a01b03811681146107bb57600080fd5b9150602083013567ffffffffffffffff8111156107d757600080fd5b8301601f810185136107e857600080fd5b80356107fb6107f682610769565b610738565b81815286602083850101111561081057600080fd5b816020840160208301376000602083830101528093505050509250929050565b60006020828403121561084257600080fd5b8151801515811461085257600080fd5b9392505050565b60005b8381101561087457818101518382015260200161085c565b50506000910152565b6000825161088f818460208701610859565b9190910192915050565b60208082526027908201527f5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65604082015266373a30ba34b7b760c91b606082015260800190565b6000602082840312156108f257600080fd5b5051919050565b60008151808452610911816020860160208601610859565b601f01601f19169290920160200192915050565b60208152600061085260208301846108f9565b60006020828403121561094a57600080fd5b815167ffffffffffffffff81111561096157600080fd5b8201601f8101841361097257600080fd5b80516109806107f682610769565b81815285602083850101111561099557600080fd5b6109a6826020830160208601610859565b9594505050505056fea2646970667358221220ba4d61ba6dc6b10826f1b2f21a7fb1965aee5031bae62952c0d5d7b7c16674ab64736f6c63430008190033", + "immutableReferences": {}, + "generatedSources": [], + "deployedGeneratedSources": [ + { + "ast": { + "nativeSrc": "0:7316:103", + "nodeType": "YulBlock", + "src": "0:7316:103", + "statements": [ + { + "nativeSrc": "6:3:103", + "nodeType": "YulBlock", + "src": "6:3:103", + "statements": [] + }, + { + "body": { + "nativeSrc": "115:102:103", + "nodeType": "YulBlock", + "src": "115:102:103", + "statements": [ + { + "nativeSrc": "125:26:103", + "nodeType": "YulAssignment", + "src": "125:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "137:9:103", + "nodeType": "YulIdentifier", + "src": "137:9:103" + }, + { + "kind": "number", + "nativeSrc": "148:2:103", + "nodeType": "YulLiteral", + "src": "148:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "133:3:103", + "nodeType": "YulIdentifier", + "src": "133:3:103" + }, + "nativeSrc": "133:18:103", + "nodeType": "YulFunctionCall", + "src": "133:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "125:4:103", + "nodeType": "YulIdentifier", + "src": "125:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "167:9:103", + "nodeType": "YulIdentifier", + "src": "167:9:103" + }, + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "182:6:103", + "nodeType": "YulIdentifier", + "src": "182:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "198:3:103", + "nodeType": "YulLiteral", + "src": "198:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "203:1:103", + "nodeType": "YulLiteral", + "src": "203:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "194:3:103", + "nodeType": "YulIdentifier", + "src": "194:3:103" + }, + "nativeSrc": "194:11:103", + "nodeType": "YulFunctionCall", + "src": "194:11:103" + }, + { + "kind": "number", + "nativeSrc": "207:1:103", + "nodeType": "YulLiteral", + "src": "207:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "190:3:103", + "nodeType": "YulIdentifier", + "src": "190:3:103" + }, + "nativeSrc": "190:19:103", + "nodeType": "YulFunctionCall", + "src": "190:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "178:3:103", + "nodeType": "YulIdentifier", + "src": "178:3:103" + }, + "nativeSrc": "178:32:103", + "nodeType": "YulFunctionCall", + "src": "178:32:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "160:6:103", + "nodeType": "YulIdentifier", + "src": "160:6:103" + }, + "nativeSrc": "160:51:103", + "nodeType": "YulFunctionCall", + "src": "160:51:103" + }, + "nativeSrc": "160:51:103", + "nodeType": "YulExpressionStatement", + "src": "160:51:103" + } + ] + }, + "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", + "nativeSrc": "14:203:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "84:9:103", + "nodeType": "YulTypedName", + "src": "84:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "95:6:103", + "nodeType": "YulTypedName", + "src": "95:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "106:4:103", + "nodeType": "YulTypedName", + "src": "106:4:103", + "type": "" + } + ], + "src": "14:203:103" + }, + { + "body": { + "nativeSrc": "254:95:103", + "nodeType": "YulBlock", + "src": "254:95:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "271:1:103", + "nodeType": "YulLiteral", + "src": "271:1:103", + "type": "", + "value": "0" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "278:3:103", + "nodeType": "YulLiteral", + "src": "278:3:103", + "type": "", + "value": "224" + }, + { + "kind": "number", + "nativeSrc": "283:10:103", + "nodeType": "YulLiteral", + "src": "283:10:103", + "type": "", + "value": "0x4e487b71" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "274:3:103", + "nodeType": "YulIdentifier", + "src": "274:3:103" + }, + "nativeSrc": "274:20:103", + "nodeType": "YulFunctionCall", + "src": "274:20:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "264:6:103", + "nodeType": "YulIdentifier", + "src": "264:6:103" + }, + "nativeSrc": "264:31:103", + "nodeType": "YulFunctionCall", + "src": "264:31:103" + }, + "nativeSrc": "264:31:103", + "nodeType": "YulExpressionStatement", + "src": "264:31:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "311:1:103", + "nodeType": "YulLiteral", + "src": "311:1:103", + "type": "", + "value": "4" + }, + { + "kind": "number", + "nativeSrc": "314:4:103", + "nodeType": "YulLiteral", + "src": "314:4:103", + "type": "", + "value": "0x41" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "304:6:103", + "nodeType": "YulIdentifier", + "src": "304:6:103" + }, + "nativeSrc": "304:15:103", + "nodeType": "YulFunctionCall", + "src": "304:15:103" + }, + "nativeSrc": "304:15:103", + "nodeType": "YulExpressionStatement", + "src": "304:15:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "335:1:103", + "nodeType": "YulLiteral", + "src": "335:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "338:4:103", + "nodeType": "YulLiteral", + "src": "338:4:103", + "type": "", + "value": "0x24" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "328:6:103", + "nodeType": "YulIdentifier", + "src": "328:6:103" + }, + "nativeSrc": "328:15:103", + "nodeType": "YulFunctionCall", + "src": "328:15:103" + }, + "nativeSrc": "328:15:103", + "nodeType": "YulExpressionStatement", + "src": "328:15:103" + } + ] + }, + "name": "panic_error_0x41", + "nativeSrc": "222:127:103", + "nodeType": "YulFunctionDefinition", + "src": "222:127:103" + }, + { + "body": { + "nativeSrc": "399:230:103", + "nodeType": "YulBlock", + "src": "399:230:103", + "statements": [ + { + "nativeSrc": "409:19:103", + "nodeType": "YulAssignment", + "src": "409:19:103", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "425:2:103", + "nodeType": "YulLiteral", + "src": "425:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "419:5:103", + "nodeType": "YulIdentifier", + "src": "419:5:103" + }, + "nativeSrc": "419:9:103", + "nodeType": "YulFunctionCall", + "src": "419:9:103" + }, + "variableNames": [ + { + "name": "memPtr", + "nativeSrc": "409:6:103", + "nodeType": "YulIdentifier", + "src": "409:6:103" + } + ] + }, + { + "nativeSrc": "437:58:103", + "nodeType": "YulVariableDeclaration", + "src": "437:58:103", + "value": { + "arguments": [ + { + "name": "memPtr", + "nativeSrc": "459:6:103", + "nodeType": "YulIdentifier", + "src": "459:6:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "size", + "nativeSrc": "475:4:103", + "nodeType": "YulIdentifier", + "src": "475:4:103" + }, + { + "kind": "number", + "nativeSrc": "481:2:103", + "nodeType": "YulLiteral", + "src": "481:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "471:3:103", + "nodeType": "YulIdentifier", + "src": "471:3:103" + }, + "nativeSrc": "471:13:103", + "nodeType": "YulFunctionCall", + "src": "471:13:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "490:2:103", + "nodeType": "YulLiteral", + "src": "490:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "486:3:103", + "nodeType": "YulIdentifier", + "src": "486:3:103" + }, + "nativeSrc": "486:7:103", + "nodeType": "YulFunctionCall", + "src": "486:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "467:3:103", + "nodeType": "YulIdentifier", + "src": "467:3:103" + }, + "nativeSrc": "467:27:103", + "nodeType": "YulFunctionCall", + "src": "467:27:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "455:3:103", + "nodeType": "YulIdentifier", + "src": "455:3:103" + }, + "nativeSrc": "455:40:103", + "nodeType": "YulFunctionCall", + "src": "455:40:103" + }, + "variables": [ + { + "name": "newFreePtr", + "nativeSrc": "441:10:103", + "nodeType": "YulTypedName", + "src": "441:10:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "570:22:103", + "nodeType": "YulBlock", + "src": "570:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "572:16:103", + "nodeType": "YulIdentifier", + "src": "572:16:103" + }, + "nativeSrc": "572:18:103", + "nodeType": "YulFunctionCall", + "src": "572:18:103" + }, + "nativeSrc": "572:18:103", + "nodeType": "YulExpressionStatement", + "src": "572:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "513:10:103", + "nodeType": "YulIdentifier", + "src": "513:10:103" + }, + { + "kind": "number", + "nativeSrc": "525:18:103", + "nodeType": "YulLiteral", + "src": "525:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "510:2:103", + "nodeType": "YulIdentifier", + "src": "510:2:103" + }, + "nativeSrc": "510:34:103", + "nodeType": "YulFunctionCall", + "src": "510:34:103" + }, + { + "arguments": [ + { + "name": "newFreePtr", + "nativeSrc": "549:10:103", + "nodeType": "YulIdentifier", + "src": "549:10:103" + }, + { + "name": "memPtr", + "nativeSrc": "561:6:103", + "nodeType": "YulIdentifier", + "src": "561:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "546:2:103", + "nodeType": "YulIdentifier", + "src": "546:2:103" + }, + "nativeSrc": "546:22:103", + "nodeType": "YulFunctionCall", + "src": "546:22:103" + } + ], + "functionName": { + "name": "or", + "nativeSrc": "507:2:103", + "nodeType": "YulIdentifier", + "src": "507:2:103" + }, + "nativeSrc": "507:62:103", + "nodeType": "YulFunctionCall", + "src": "507:62:103" + }, + "nativeSrc": "504:88:103", + "nodeType": "YulIf", + "src": "504:88:103" + }, + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "608:2:103", + "nodeType": "YulLiteral", + "src": "608:2:103", + "type": "", + "value": "64" + }, + { + "name": "newFreePtr", + "nativeSrc": "612:10:103", + "nodeType": "YulIdentifier", + "src": "612:10:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "601:6:103", + "nodeType": "YulIdentifier", + "src": "601:6:103" + }, + "nativeSrc": "601:22:103", + "nodeType": "YulFunctionCall", + "src": "601:22:103" + }, + "nativeSrc": "601:22:103", + "nodeType": "YulExpressionStatement", + "src": "601:22:103" + } + ] + }, + "name": "allocate_memory", + "nativeSrc": "354:275:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "size", + "nativeSrc": "379:4:103", + "nodeType": "YulTypedName", + "src": "379:4:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "memPtr", + "nativeSrc": "388:6:103", + "nodeType": "YulTypedName", + "src": "388:6:103", + "type": "" + } + ], + "src": "354:275:103" + }, + { + "body": { + "nativeSrc": "691:129:103", + "nodeType": "YulBlock", + "src": "691:129:103", + "statements": [ + { + "body": { + "nativeSrc": "735:22:103", + "nodeType": "YulBlock", + "src": "735:22:103", + "statements": [ + { + "expression": { + "arguments": [], + "functionName": { + "name": "panic_error_0x41", + "nativeSrc": "737:16:103", + "nodeType": "YulIdentifier", + "src": "737:16:103" + }, + "nativeSrc": "737:18:103", + "nodeType": "YulFunctionCall", + "src": "737:18:103" + }, + "nativeSrc": "737:18:103", + "nodeType": "YulExpressionStatement", + "src": "737:18:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "length", + "nativeSrc": "707:6:103", + "nodeType": "YulIdentifier", + "src": "707:6:103" + }, + { + "kind": "number", + "nativeSrc": "715:18:103", + "nodeType": "YulLiteral", + "src": "715:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "704:2:103", + "nodeType": "YulIdentifier", + "src": "704:2:103" + }, + "nativeSrc": "704:30:103", + "nodeType": "YulFunctionCall", + "src": "704:30:103" + }, + "nativeSrc": "701:56:103", + "nodeType": "YulIf", + "src": "701:56:103" + }, + { + "nativeSrc": "766:48:103", + "nodeType": "YulAssignment", + "src": "766:48:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "786:6:103", + "nodeType": "YulIdentifier", + "src": "786:6:103" + }, + { + "kind": "number", + "nativeSrc": "794:2:103", + "nodeType": "YulLiteral", + "src": "794:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "782:3:103", + "nodeType": "YulIdentifier", + "src": "782:3:103" + }, + "nativeSrc": "782:15:103", + "nodeType": "YulFunctionCall", + "src": "782:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "803:2:103", + "nodeType": "YulLiteral", + "src": "803:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "799:3:103", + "nodeType": "YulIdentifier", + "src": "799:3:103" + }, + "nativeSrc": "799:7:103", + "nodeType": "YulFunctionCall", + "src": "799:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "778:3:103", + "nodeType": "YulIdentifier", + "src": "778:3:103" + }, + "nativeSrc": "778:29:103", + "nodeType": "YulFunctionCall", + "src": "778:29:103" + }, + { + "kind": "number", + "nativeSrc": "809:4:103", + "nodeType": "YulLiteral", + "src": "809:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "774:3:103", + "nodeType": "YulIdentifier", + "src": "774:3:103" + }, + "nativeSrc": "774:40:103", + "nodeType": "YulFunctionCall", + "src": "774:40:103" + }, + "variableNames": [ + { + "name": "size", + "nativeSrc": "766:4:103", + "nodeType": "YulIdentifier", + "src": "766:4:103" + } + ] + } + ] + }, + "name": "array_allocation_size_bytes", + "nativeSrc": "634:186:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "length", + "nativeSrc": "671:6:103", + "nodeType": "YulTypedName", + "src": "671:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "size", + "nativeSrc": "682:4:103", + "nodeType": "YulTypedName", + "src": "682:4:103", + "type": "" + } + ], + "src": "634:186:103" + }, + { + "body": { + "nativeSrc": "921:749:103", + "nodeType": "YulBlock", + "src": "921:749:103", + "statements": [ + { + "body": { + "nativeSrc": "967:16:103", + "nodeType": "YulBlock", + "src": "967:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "976:1:103", + "nodeType": "YulLiteral", + "src": "976:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "979:1:103", + "nodeType": "YulLiteral", + "src": "979:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "969:6:103", + "nodeType": "YulIdentifier", + "src": "969:6:103" + }, + "nativeSrc": "969:12:103", + "nodeType": "YulFunctionCall", + "src": "969:12:103" + }, + "nativeSrc": "969:12:103", + "nodeType": "YulExpressionStatement", + "src": "969:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "942:7:103", + "nodeType": "YulIdentifier", + "src": "942:7:103" + }, + { + "name": "headStart", + "nativeSrc": "951:9:103", + "nodeType": "YulIdentifier", + "src": "951:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "938:3:103", + "nodeType": "YulIdentifier", + "src": "938:3:103" + }, + "nativeSrc": "938:23:103", + "nodeType": "YulFunctionCall", + "src": "938:23:103" + }, + { + "kind": "number", + "nativeSrc": "963:2:103", + "nodeType": "YulLiteral", + "src": "963:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "934:3:103", + "nodeType": "YulIdentifier", + "src": "934:3:103" + }, + "nativeSrc": "934:32:103", + "nodeType": "YulFunctionCall", + "src": "934:32:103" + }, + "nativeSrc": "931:52:103", + "nodeType": "YulIf", + "src": "931:52:103" + }, + { + "nativeSrc": "992:36:103", + "nodeType": "YulVariableDeclaration", + "src": "992:36:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1018:9:103", + "nodeType": "YulIdentifier", + "src": "1018:9:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1005:12:103", + "nodeType": "YulIdentifier", + "src": "1005:12:103" + }, + "nativeSrc": "1005:23:103", + "nodeType": "YulFunctionCall", + "src": "1005:23:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "996:5:103", + "nodeType": "YulTypedName", + "src": "996:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1091:16:103", + "nodeType": "YulBlock", + "src": "1091:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1100:1:103", + "nodeType": "YulLiteral", + "src": "1100:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1103:1:103", + "nodeType": "YulLiteral", + "src": "1103:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1093:6:103", + "nodeType": "YulIdentifier", + "src": "1093:6:103" + }, + "nativeSrc": "1093:12:103", + "nodeType": "YulFunctionCall", + "src": "1093:12:103" + }, + "nativeSrc": "1093:12:103", + "nodeType": "YulExpressionStatement", + "src": "1093:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1050:5:103", + "nodeType": "YulIdentifier", + "src": "1050:5:103" + }, + { + "arguments": [ + { + "name": "value", + "nativeSrc": "1061:5:103", + "nodeType": "YulIdentifier", + "src": "1061:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1076:3:103", + "nodeType": "YulLiteral", + "src": "1076:3:103", + "type": "", + "value": "160" + }, + { + "kind": "number", + "nativeSrc": "1081:1:103", + "nodeType": "YulLiteral", + "src": "1081:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "shl", + "nativeSrc": "1072:3:103", + "nodeType": "YulIdentifier", + "src": "1072:3:103" + }, + "nativeSrc": "1072:11:103", + "nodeType": "YulFunctionCall", + "src": "1072:11:103" + }, + { + "kind": "number", + "nativeSrc": "1085:1:103", + "nodeType": "YulLiteral", + "src": "1085:1:103", + "type": "", + "value": "1" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "1068:3:103", + "nodeType": "YulIdentifier", + "src": "1068:3:103" + }, + "nativeSrc": "1068:19:103", + "nodeType": "YulFunctionCall", + "src": "1068:19:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "1057:3:103", + "nodeType": "YulIdentifier", + "src": "1057:3:103" + }, + "nativeSrc": "1057:31:103", + "nodeType": "YulFunctionCall", + "src": "1057:31:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "1047:2:103", + "nodeType": "YulIdentifier", + "src": "1047:2:103" + }, + "nativeSrc": "1047:42:103", + "nodeType": "YulFunctionCall", + "src": "1047:42:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1040:6:103", + "nodeType": "YulIdentifier", + "src": "1040:6:103" + }, + "nativeSrc": "1040:50:103", + "nodeType": "YulFunctionCall", + "src": "1040:50:103" + }, + "nativeSrc": "1037:70:103", + "nodeType": "YulIf", + "src": "1037:70:103" + }, + { + "nativeSrc": "1116:15:103", + "nodeType": "YulAssignment", + "src": "1116:15:103", + "value": { + "name": "value", + "nativeSrc": "1126:5:103", + "nodeType": "YulIdentifier", + "src": "1126:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "1116:6:103", + "nodeType": "YulIdentifier", + "src": "1116:6:103" + } + ] + }, + { + "nativeSrc": "1140:46:103", + "nodeType": "YulVariableDeclaration", + "src": "1140:46:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1171:9:103", + "nodeType": "YulIdentifier", + "src": "1171:9:103" + }, + { + "kind": "number", + "nativeSrc": "1182:2:103", + "nodeType": "YulLiteral", + "src": "1182:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1167:3:103", + "nodeType": "YulIdentifier", + "src": "1167:3:103" + }, + "nativeSrc": "1167:18:103", + "nodeType": "YulFunctionCall", + "src": "1167:18:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1154:12:103", + "nodeType": "YulIdentifier", + "src": "1154:12:103" + }, + "nativeSrc": "1154:32:103", + "nodeType": "YulFunctionCall", + "src": "1154:32:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "1144:6:103", + "nodeType": "YulTypedName", + "src": "1144:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1229:16:103", + "nodeType": "YulBlock", + "src": "1229:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1238:1:103", + "nodeType": "YulLiteral", + "src": "1238:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1241:1:103", + "nodeType": "YulLiteral", + "src": "1241:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1231:6:103", + "nodeType": "YulIdentifier", + "src": "1231:6:103" + }, + "nativeSrc": "1231:12:103", + "nodeType": "YulFunctionCall", + "src": "1231:12:103" + }, + "nativeSrc": "1231:12:103", + "nodeType": "YulExpressionStatement", + "src": "1231:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "1201:6:103", + "nodeType": "YulIdentifier", + "src": "1201:6:103" + }, + { + "kind": "number", + "nativeSrc": "1209:18:103", + "nodeType": "YulLiteral", + "src": "1209:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1198:2:103", + "nodeType": "YulIdentifier", + "src": "1198:2:103" + }, + "nativeSrc": "1198:30:103", + "nodeType": "YulFunctionCall", + "src": "1198:30:103" + }, + "nativeSrc": "1195:50:103", + "nodeType": "YulIf", + "src": "1195:50:103" + }, + { + "nativeSrc": "1254:32:103", + "nodeType": "YulVariableDeclaration", + "src": "1254:32:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1268:9:103", + "nodeType": "YulIdentifier", + "src": "1268:9:103" + }, + { + "name": "offset", + "nativeSrc": "1279:6:103", + "nodeType": "YulIdentifier", + "src": "1279:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1264:3:103", + "nodeType": "YulIdentifier", + "src": "1264:3:103" + }, + "nativeSrc": "1264:22:103", + "nodeType": "YulFunctionCall", + "src": "1264:22:103" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "1258:2:103", + "nodeType": "YulTypedName", + "src": "1258:2:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "1334:16:103", + "nodeType": "YulBlock", + "src": "1334:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1343:1:103", + "nodeType": "YulLiteral", + "src": "1343:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1346:1:103", + "nodeType": "YulLiteral", + "src": "1346:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1336:6:103", + "nodeType": "YulIdentifier", + "src": "1336:6:103" + }, + "nativeSrc": "1336:12:103", + "nodeType": "YulFunctionCall", + "src": "1336:12:103" + }, + "nativeSrc": "1336:12:103", + "nodeType": "YulExpressionStatement", + "src": "1336:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "1313:2:103", + "nodeType": "YulIdentifier", + "src": "1313:2:103" + }, + { + "kind": "number", + "nativeSrc": "1317:4:103", + "nodeType": "YulLiteral", + "src": "1317:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1309:3:103", + "nodeType": "YulIdentifier", + "src": "1309:3:103" + }, + "nativeSrc": "1309:13:103", + "nodeType": "YulFunctionCall", + "src": "1309:13:103" + }, + { + "name": "dataEnd", + "nativeSrc": "1324:7:103", + "nodeType": "YulIdentifier", + "src": "1324:7:103" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "1305:3:103", + "nodeType": "YulIdentifier", + "src": "1305:3:103" + }, + "nativeSrc": "1305:27:103", + "nodeType": "YulFunctionCall", + "src": "1305:27:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1298:6:103", + "nodeType": "YulIdentifier", + "src": "1298:6:103" + }, + "nativeSrc": "1298:35:103", + "nodeType": "YulFunctionCall", + "src": "1298:35:103" + }, + "nativeSrc": "1295:55:103", + "nodeType": "YulIf", + "src": "1295:55:103" + }, + { + "nativeSrc": "1359:26:103", + "nodeType": "YulVariableDeclaration", + "src": "1359:26:103", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "1382:2:103", + "nodeType": "YulIdentifier", + "src": "1382:2:103" + } + ], + "functionName": { + "name": "calldataload", + "nativeSrc": "1369:12:103", + "nodeType": "YulIdentifier", + "src": "1369:12:103" + }, + "nativeSrc": "1369:16:103", + "nodeType": "YulFunctionCall", + "src": "1369:16:103" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "1363:2:103", + "nodeType": "YulTypedName", + "src": "1363:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "1394:61:103", + "nodeType": "YulVariableDeclaration", + "src": "1394:61:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "1451:2:103", + "nodeType": "YulIdentifier", + "src": "1451:2:103" + } + ], + "functionName": { + "name": "array_allocation_size_bytes", + "nativeSrc": "1423:27:103", + "nodeType": "YulIdentifier", + "src": "1423:27:103" + }, + "nativeSrc": "1423:31:103", + "nodeType": "YulFunctionCall", + "src": "1423:31:103" + } + ], + "functionName": { + "name": "allocate_memory", + "nativeSrc": "1407:15:103", + "nodeType": "YulIdentifier", + "src": "1407:15:103" + }, + "nativeSrc": "1407:48:103", + "nodeType": "YulFunctionCall", + "src": "1407:48:103" + }, + "variables": [ + { + "name": "array", + "nativeSrc": "1398:5:103", + "nodeType": "YulTypedName", + "src": "1398:5:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array", + "nativeSrc": "1471:5:103", + "nodeType": "YulIdentifier", + "src": "1471:5:103" + }, + { + "name": "_2", + "nativeSrc": "1478:2:103", + "nodeType": "YulIdentifier", + "src": "1478:2:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1464:6:103", + "nodeType": "YulIdentifier", + "src": "1464:6:103" + }, + "nativeSrc": "1464:17:103", + "nodeType": "YulFunctionCall", + "src": "1464:17:103" + }, + "nativeSrc": "1464:17:103", + "nodeType": "YulExpressionStatement", + "src": "1464:17:103" + }, + { + "body": { + "nativeSrc": "1527:16:103", + "nodeType": "YulBlock", + "src": "1527:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1536:1:103", + "nodeType": "YulLiteral", + "src": "1536:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1539:1:103", + "nodeType": "YulLiteral", + "src": "1539:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1529:6:103", + "nodeType": "YulIdentifier", + "src": "1529:6:103" + }, + "nativeSrc": "1529:12:103", + "nodeType": "YulFunctionCall", + "src": "1529:12:103" + }, + "nativeSrc": "1529:12:103", + "nodeType": "YulExpressionStatement", + "src": "1529:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "1504:2:103", + "nodeType": "YulIdentifier", + "src": "1504:2:103" + }, + { + "name": "_2", + "nativeSrc": "1508:2:103", + "nodeType": "YulIdentifier", + "src": "1508:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1500:3:103", + "nodeType": "YulIdentifier", + "src": "1500:3:103" + }, + "nativeSrc": "1500:11:103", + "nodeType": "YulFunctionCall", + "src": "1500:11:103" + }, + { + "kind": "number", + "nativeSrc": "1513:2:103", + "nodeType": "YulLiteral", + "src": "1513:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1496:3:103", + "nodeType": "YulIdentifier", + "src": "1496:3:103" + }, + "nativeSrc": "1496:20:103", + "nodeType": "YulFunctionCall", + "src": "1496:20:103" + }, + { + "name": "dataEnd", + "nativeSrc": "1518:7:103", + "nodeType": "YulIdentifier", + "src": "1518:7:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "1493:2:103", + "nodeType": "YulIdentifier", + "src": "1493:2:103" + }, + "nativeSrc": "1493:33:103", + "nodeType": "YulFunctionCall", + "src": "1493:33:103" + }, + "nativeSrc": "1490:53:103", + "nodeType": "YulIf", + "src": "1490:53:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "array", + "nativeSrc": "1569:5:103", + "nodeType": "YulIdentifier", + "src": "1569:5:103" + }, + { + "kind": "number", + "nativeSrc": "1576:2:103", + "nodeType": "YulLiteral", + "src": "1576:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1565:3:103", + "nodeType": "YulIdentifier", + "src": "1565:3:103" + }, + "nativeSrc": "1565:14:103", + "nodeType": "YulFunctionCall", + "src": "1565:14:103" + }, + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "1585:2:103", + "nodeType": "YulIdentifier", + "src": "1585:2:103" + }, + { + "kind": "number", + "nativeSrc": "1589:2:103", + "nodeType": "YulLiteral", + "src": "1589:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1581:3:103", + "nodeType": "YulIdentifier", + "src": "1581:3:103" + }, + "nativeSrc": "1581:11:103", + "nodeType": "YulFunctionCall", + "src": "1581:11:103" + }, + { + "name": "_2", + "nativeSrc": "1594:2:103", + "nodeType": "YulIdentifier", + "src": "1594:2:103" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "1552:12:103", + "nodeType": "YulIdentifier", + "src": "1552:12:103" + }, + "nativeSrc": "1552:45:103", + "nodeType": "YulFunctionCall", + "src": "1552:45:103" + }, + "nativeSrc": "1552:45:103", + "nodeType": "YulExpressionStatement", + "src": "1552:45:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "array", + "nativeSrc": "1621:5:103", + "nodeType": "YulIdentifier", + "src": "1621:5:103" + }, + { + "name": "_2", + "nativeSrc": "1628:2:103", + "nodeType": "YulIdentifier", + "src": "1628:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1617:3:103", + "nodeType": "YulIdentifier", + "src": "1617:3:103" + }, + "nativeSrc": "1617:14:103", + "nodeType": "YulFunctionCall", + "src": "1617:14:103" + }, + { + "kind": "number", + "nativeSrc": "1633:2:103", + "nodeType": "YulLiteral", + "src": "1633:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1613:3:103", + "nodeType": "YulIdentifier", + "src": "1613:3:103" + }, + "nativeSrc": "1613:23:103", + "nodeType": "YulFunctionCall", + "src": "1613:23:103" + }, + { + "kind": "number", + "nativeSrc": "1638:1:103", + "nodeType": "YulLiteral", + "src": "1638:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1606:6:103", + "nodeType": "YulIdentifier", + "src": "1606:6:103" + }, + "nativeSrc": "1606:34:103", + "nodeType": "YulFunctionCall", + "src": "1606:34:103" + }, + "nativeSrc": "1606:34:103", + "nodeType": "YulExpressionStatement", + "src": "1606:34:103" + }, + { + "nativeSrc": "1649:15:103", + "nodeType": "YulAssignment", + "src": "1649:15:103", + "value": { + "name": "array", + "nativeSrc": "1659:5:103", + "nodeType": "YulIdentifier", + "src": "1659:5:103" + }, + "variableNames": [ + { + "name": "value1", + "nativeSrc": "1649:6:103", + "nodeType": "YulIdentifier", + "src": "1649:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr", + "nativeSrc": "825:845:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "879:9:103", + "nodeType": "YulTypedName", + "src": "879:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "890:7:103", + "nodeType": "YulTypedName", + "src": "890:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "902:6:103", + "nodeType": "YulTypedName", + "src": "902:6:103", + "type": "" + }, + { + "name": "value1", + "nativeSrc": "910:6:103", + "nodeType": "YulTypedName", + "src": "910:6:103", + "type": "" + } + ], + "src": "825:845:103" + }, + { + "body": { + "nativeSrc": "1770:92:103", + "nodeType": "YulBlock", + "src": "1770:92:103", + "statements": [ + { + "nativeSrc": "1780:26:103", + "nodeType": "YulAssignment", + "src": "1780:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1792:9:103", + "nodeType": "YulIdentifier", + "src": "1792:9:103" + }, + { + "kind": "number", + "nativeSrc": "1803:2:103", + "nodeType": "YulLiteral", + "src": "1803:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "1788:3:103", + "nodeType": "YulIdentifier", + "src": "1788:3:103" + }, + "nativeSrc": "1788:18:103", + "nodeType": "YulFunctionCall", + "src": "1788:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "1780:4:103", + "nodeType": "YulIdentifier", + "src": "1780:4:103" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "1822:9:103", + "nodeType": "YulIdentifier", + "src": "1822:9:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "1847:6:103", + "nodeType": "YulIdentifier", + "src": "1847:6:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1840:6:103", + "nodeType": "YulIdentifier", + "src": "1840:6:103" + }, + "nativeSrc": "1840:14:103", + "nodeType": "YulFunctionCall", + "src": "1840:14:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "1833:6:103", + "nodeType": "YulIdentifier", + "src": "1833:6:103" + }, + "nativeSrc": "1833:22:103", + "nodeType": "YulFunctionCall", + "src": "1833:22:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "1815:6:103", + "nodeType": "YulIdentifier", + "src": "1815:6:103" + }, + "nativeSrc": "1815:41:103", + "nodeType": "YulFunctionCall", + "src": "1815:41:103" + }, + "nativeSrc": "1815:41:103", + "nodeType": "YulExpressionStatement", + "src": "1815:41:103" + } + ] + }, + "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", + "nativeSrc": "1675:187:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "1739:9:103", + "nodeType": "YulTypedName", + "src": "1739:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "1750:6:103", + "nodeType": "YulTypedName", + "src": "1750:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "1761:4:103", + "nodeType": "YulTypedName", + "src": "1761:4:103", + "type": "" + } + ], + "src": "1675:187:103" + }, + { + "body": { + "nativeSrc": "2041:182:103", + "nodeType": "YulBlock", + "src": "2041:182:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2058:9:103", + "nodeType": "YulIdentifier", + "src": "2058:9:103" + }, + { + "kind": "number", + "nativeSrc": "2069:2:103", + "nodeType": "YulLiteral", + "src": "2069:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2051:6:103", + "nodeType": "YulIdentifier", + "src": "2051:6:103" + }, + "nativeSrc": "2051:21:103", + "nodeType": "YulFunctionCall", + "src": "2051:21:103" + }, + "nativeSrc": "2051:21:103", + "nodeType": "YulExpressionStatement", + "src": "2051:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2092:9:103", + "nodeType": "YulIdentifier", + "src": "2092:9:103" + }, + { + "kind": "number", + "nativeSrc": "2103:2:103", + "nodeType": "YulLiteral", + "src": "2103:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2088:3:103", + "nodeType": "YulIdentifier", + "src": "2088:3:103" + }, + "nativeSrc": "2088:18:103", + "nodeType": "YulFunctionCall", + "src": "2088:18:103" + }, + { + "kind": "number", + "nativeSrc": "2108:2:103", + "nodeType": "YulLiteral", + "src": "2108:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2081:6:103", + "nodeType": "YulIdentifier", + "src": "2081:6:103" + }, + "nativeSrc": "2081:30:103", + "nodeType": "YulFunctionCall", + "src": "2081:30:103" + }, + "nativeSrc": "2081:30:103", + "nodeType": "YulExpressionStatement", + "src": "2081:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2131:9:103", + "nodeType": "YulIdentifier", + "src": "2131:9:103" + }, + { + "kind": "number", + "nativeSrc": "2142:2:103", + "nodeType": "YulLiteral", + "src": "2142:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2127:3:103", + "nodeType": "YulIdentifier", + "src": "2127:3:103" + }, + "nativeSrc": "2127:18:103", + "nodeType": "YulFunctionCall", + "src": "2127:18:103" + }, + { + "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e", + "kind": "string", + "nativeSrc": "2147:34:103", + "nodeType": "YulLiteral", + "src": "2147:34:103", + "type": "", + "value": "WitnetProxy: null implementation" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2120:6:103", + "nodeType": "YulIdentifier", + "src": "2120:6:103" + }, + "nativeSrc": "2120:62:103", + "nodeType": "YulFunctionCall", + "src": "2120:62:103" + }, + "nativeSrc": "2120:62:103", + "nodeType": "YulExpressionStatement", + "src": "2120:62:103" + }, + { + "nativeSrc": "2191:26:103", + "nodeType": "YulAssignment", + "src": "2191:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2203:9:103", + "nodeType": "YulIdentifier", + "src": "2203:9:103" + }, + { + "kind": "number", + "nativeSrc": "2214:2:103", + "nodeType": "YulLiteral", + "src": "2214:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2199:3:103", + "nodeType": "YulIdentifier", + "src": "2199:3:103" + }, + "nativeSrc": "2199:18:103", + "nodeType": "YulFunctionCall", + "src": "2199:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2191:4:103", + "nodeType": "YulIdentifier", + "src": "2191:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "1867:356:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2018:9:103", + "nodeType": "YulTypedName", + "src": "2018:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2032:4:103", + "nodeType": "YulTypedName", + "src": "2032:4:103", + "type": "" + } + ], + "src": "1867:356:103" + }, + { + "body": { + "nativeSrc": "2402:181:103", + "nodeType": "YulBlock", + "src": "2402:181:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2419:9:103", + "nodeType": "YulIdentifier", + "src": "2419:9:103" + }, + { + "kind": "number", + "nativeSrc": "2430:2:103", + "nodeType": "YulLiteral", + "src": "2430:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2412:6:103", + "nodeType": "YulIdentifier", + "src": "2412:6:103" + }, + "nativeSrc": "2412:21:103", + "nodeType": "YulFunctionCall", + "src": "2412:21:103" + }, + "nativeSrc": "2412:21:103", + "nodeType": "YulExpressionStatement", + "src": "2412:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2453:9:103", + "nodeType": "YulIdentifier", + "src": "2453:9:103" + }, + { + "kind": "number", + "nativeSrc": "2464:2:103", + "nodeType": "YulLiteral", + "src": "2464:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2449:3:103", + "nodeType": "YulIdentifier", + "src": "2449:3:103" + }, + "nativeSrc": "2449:18:103", + "nodeType": "YulFunctionCall", + "src": "2449:18:103" + }, + { + "kind": "number", + "nativeSrc": "2469:2:103", + "nodeType": "YulLiteral", + "src": "2469:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2442:6:103", + "nodeType": "YulIdentifier", + "src": "2442:6:103" + }, + "nativeSrc": "2442:30:103", + "nodeType": "YulFunctionCall", + "src": "2442:30:103" + }, + "nativeSrc": "2442:30:103", + "nodeType": "YulExpressionStatement", + "src": "2442:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2492:9:103", + "nodeType": "YulIdentifier", + "src": "2492:9:103" + }, + { + "kind": "number", + "nativeSrc": "2503:2:103", + "nodeType": "YulLiteral", + "src": "2503:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2488:3:103", + "nodeType": "YulIdentifier", + "src": "2488:3:103" + }, + "nativeSrc": "2488:18:103", + "nodeType": "YulFunctionCall", + "src": "2488:18:103" + }, + { + "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465", + "kind": "string", + "nativeSrc": "2508:33:103", + "nodeType": "YulLiteral", + "src": "2508:33:103", + "type": "", + "value": "WitnetProxy: nothing to upgrade" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "2481:6:103", + "nodeType": "YulIdentifier", + "src": "2481:6:103" + }, + "nativeSrc": "2481:61:103", + "nodeType": "YulFunctionCall", + "src": "2481:61:103" + }, + "nativeSrc": "2481:61:103", + "nodeType": "YulExpressionStatement", + "src": "2481:61:103" + }, + { + "nativeSrc": "2551:26:103", + "nodeType": "YulAssignment", + "src": "2551:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2563:9:103", + "nodeType": "YulIdentifier", + "src": "2563:9:103" + }, + { + "kind": "number", + "nativeSrc": "2574:2:103", + "nodeType": "YulLiteral", + "src": "2574:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "2559:3:103", + "nodeType": "YulIdentifier", + "src": "2559:3:103" + }, + "nativeSrc": "2559:18:103", + "nodeType": "YulFunctionCall", + "src": "2559:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "2551:4:103", + "nodeType": "YulIdentifier", + "src": "2551:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2228:355:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2379:9:103", + "nodeType": "YulTypedName", + "src": "2379:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "2393:4:103", + "nodeType": "YulTypedName", + "src": "2393:4:103", + "type": "" + } + ], + "src": "2228:355:103" + }, + { + "body": { + "nativeSrc": "2666:199:103", + "nodeType": "YulBlock", + "src": "2666:199:103", + "statements": [ + { + "body": { + "nativeSrc": "2712:16:103", + "nodeType": "YulBlock", + "src": "2712:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2721:1:103", + "nodeType": "YulLiteral", + "src": "2721:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2724:1:103", + "nodeType": "YulLiteral", + "src": "2724:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2714:6:103", + "nodeType": "YulIdentifier", + "src": "2714:6:103" + }, + "nativeSrc": "2714:12:103", + "nodeType": "YulFunctionCall", + "src": "2714:12:103" + }, + "nativeSrc": "2714:12:103", + "nodeType": "YulExpressionStatement", + "src": "2714:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "2687:7:103", + "nodeType": "YulIdentifier", + "src": "2687:7:103" + }, + { + "name": "headStart", + "nativeSrc": "2696:9:103", + "nodeType": "YulIdentifier", + "src": "2696:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "2683:3:103", + "nodeType": "YulIdentifier", + "src": "2683:3:103" + }, + "nativeSrc": "2683:23:103", + "nodeType": "YulFunctionCall", + "src": "2683:23:103" + }, + { + "kind": "number", + "nativeSrc": "2708:2:103", + "nodeType": "YulLiteral", + "src": "2708:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "2679:3:103", + "nodeType": "YulIdentifier", + "src": "2679:3:103" + }, + "nativeSrc": "2679:32:103", + "nodeType": "YulFunctionCall", + "src": "2679:32:103" + }, + "nativeSrc": "2676:52:103", + "nodeType": "YulIf", + "src": "2676:52:103" + }, + { + "nativeSrc": "2737:29:103", + "nodeType": "YulVariableDeclaration", + "src": "2737:29:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "2756:9:103", + "nodeType": "YulIdentifier", + "src": "2756:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "2750:5:103", + "nodeType": "YulIdentifier", + "src": "2750:5:103" + }, + "nativeSrc": "2750:16:103", + "nodeType": "YulFunctionCall", + "src": "2750:16:103" + }, + "variables": [ + { + "name": "value", + "nativeSrc": "2741:5:103", + "nodeType": "YulTypedName", + "src": "2741:5:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "2819:16:103", + "nodeType": "YulBlock", + "src": "2819:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "2828:1:103", + "nodeType": "YulLiteral", + "src": "2828:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "2831:1:103", + "nodeType": "YulLiteral", + "src": "2831:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "2821:6:103", + "nodeType": "YulIdentifier", + "src": "2821:6:103" + }, + "nativeSrc": "2821:12:103", + "nodeType": "YulFunctionCall", + "src": "2821:12:103" + }, + "nativeSrc": "2821:12:103", + "nodeType": "YulExpressionStatement", + "src": "2821:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2788:5:103", + "nodeType": "YulIdentifier", + "src": "2788:5:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "2809:5:103", + "nodeType": "YulIdentifier", + "src": "2809:5:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2802:6:103", + "nodeType": "YulIdentifier", + "src": "2802:6:103" + }, + "nativeSrc": "2802:13:103", + "nodeType": "YulFunctionCall", + "src": "2802:13:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2795:6:103", + "nodeType": "YulIdentifier", + "src": "2795:6:103" + }, + "nativeSrc": "2795:21:103", + "nodeType": "YulFunctionCall", + "src": "2795:21:103" + } + ], + "functionName": { + "name": "eq", + "nativeSrc": "2785:2:103", + "nodeType": "YulIdentifier", + "src": "2785:2:103" + }, + "nativeSrc": "2785:32:103", + "nodeType": "YulFunctionCall", + "src": "2785:32:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "2778:6:103", + "nodeType": "YulIdentifier", + "src": "2778:6:103" + }, + "nativeSrc": "2778:40:103", + "nodeType": "YulFunctionCall", + "src": "2778:40:103" + }, + "nativeSrc": "2775:60:103", + "nodeType": "YulIf", + "src": "2775:60:103" + }, + { + "nativeSrc": "2844:15:103", + "nodeType": "YulAssignment", + "src": "2844:15:103", + "value": { + "name": "value", + "nativeSrc": "2854:5:103", + "nodeType": "YulIdentifier", + "src": "2854:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "2844:6:103", + "nodeType": "YulIdentifier", + "src": "2844:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bool_fromMemory", + "nativeSrc": "2588:277:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "2632:9:103", + "nodeType": "YulTypedName", + "src": "2632:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "2643:7:103", + "nodeType": "YulTypedName", + "src": "2643:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "2655:6:103", + "nodeType": "YulTypedName", + "src": "2655:6:103", + "type": "" + } + ], + "src": "2588:277:103" + }, + { + "body": { + "nativeSrc": "3044:232:103", + "nodeType": "YulBlock", + "src": "3044:232:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3061:9:103", + "nodeType": "YulIdentifier", + "src": "3061:9:103" + }, + { + "kind": "number", + "nativeSrc": "3072:2:103", + "nodeType": "YulLiteral", + "src": "3072:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3054:6:103", + "nodeType": "YulIdentifier", + "src": "3054:6:103" + }, + "nativeSrc": "3054:21:103", + "nodeType": "YulFunctionCall", + "src": "3054:21:103" + }, + "nativeSrc": "3054:21:103", + "nodeType": "YulExpressionStatement", + "src": "3054:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3095:9:103", + "nodeType": "YulIdentifier", + "src": "3095:9:103" + }, + { + "kind": "number", + "nativeSrc": "3106:2:103", + "nodeType": "YulLiteral", + "src": "3106:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3091:3:103", + "nodeType": "YulIdentifier", + "src": "3091:3:103" + }, + "nativeSrc": "3091:18:103", + "nodeType": "YulFunctionCall", + "src": "3091:18:103" + }, + { + "kind": "number", + "nativeSrc": "3111:2:103", + "nodeType": "YulLiteral", + "src": "3111:2:103", + "type": "", + "value": "42" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3084:6:103", + "nodeType": "YulIdentifier", + "src": "3084:6:103" + }, + "nativeSrc": "3084:30:103", + "nodeType": "YulFunctionCall", + "src": "3084:30:103" + }, + "nativeSrc": "3084:30:103", + "nodeType": "YulExpressionStatement", + "src": "3084:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3134:9:103", + "nodeType": "YulIdentifier", + "src": "3134:9:103" + }, + { + "kind": "number", + "nativeSrc": "3145:2:103", + "nodeType": "YulLiteral", + "src": "3145:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3130:3:103", + "nodeType": "YulIdentifier", + "src": "3130:3:103" + }, + "nativeSrc": "3130:18:103", + "nodeType": "YulFunctionCall", + "src": "3130:18:103" + }, + { + "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b20757067", + "kind": "string", + "nativeSrc": "3150:34:103", + "nodeType": "YulLiteral", + "src": "3150:34:103", + "type": "", + "value": "WitnetProxy: unable to check upg" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3123:6:103", + "nodeType": "YulIdentifier", + "src": "3123:6:103" + }, + "nativeSrc": "3123:62:103", + "nodeType": "YulFunctionCall", + "src": "3123:62:103" + }, + "nativeSrc": "3123:62:103", + "nodeType": "YulExpressionStatement", + "src": "3123:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3205:9:103", + "nodeType": "YulIdentifier", + "src": "3205:9:103" + }, + { + "kind": "number", + "nativeSrc": "3216:2:103", + "nodeType": "YulLiteral", + "src": "3216:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3201:3:103", + "nodeType": "YulIdentifier", + "src": "3201:3:103" + }, + "nativeSrc": "3201:18:103", + "nodeType": "YulFunctionCall", + "src": "3201:18:103" + }, + { + "hexValue": "7261646162696c697479", + "kind": "string", + "nativeSrc": "3221:12:103", + "nodeType": "YulLiteral", + "src": "3221:12:103", + "type": "", + "value": "radability" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3194:6:103", + "nodeType": "YulIdentifier", + "src": "3194:6:103" + }, + "nativeSrc": "3194:40:103", + "nodeType": "YulFunctionCall", + "src": "3194:40:103" + }, + "nativeSrc": "3194:40:103", + "nodeType": "YulExpressionStatement", + "src": "3194:40:103" + }, + { + "nativeSrc": "3243:27:103", + "nodeType": "YulAssignment", + "src": "3243:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3255:9:103", + "nodeType": "YulIdentifier", + "src": "3255:9:103" + }, + { + "kind": "number", + "nativeSrc": "3266:3:103", + "nodeType": "YulLiteral", + "src": "3266:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3251:3:103", + "nodeType": "YulIdentifier", + "src": "3251:3:103" + }, + "nativeSrc": "3251:19:103", + "nodeType": "YulFunctionCall", + "src": "3251:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3243:4:103", + "nodeType": "YulIdentifier", + "src": "3243:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "2870:406:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3021:9:103", + "nodeType": "YulTypedName", + "src": "3021:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3035:4:103", + "nodeType": "YulTypedName", + "src": "3035:4:103", + "type": "" + } + ], + "src": "2870:406:103" + }, + { + "body": { + "nativeSrc": "3455:177:103", + "nodeType": "YulBlock", + "src": "3455:177:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3472:9:103", + "nodeType": "YulIdentifier", + "src": "3472:9:103" + }, + { + "kind": "number", + "nativeSrc": "3483:2:103", + "nodeType": "YulLiteral", + "src": "3483:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3465:6:103", + "nodeType": "YulIdentifier", + "src": "3465:6:103" + }, + "nativeSrc": "3465:21:103", + "nodeType": "YulFunctionCall", + "src": "3465:21:103" + }, + "nativeSrc": "3465:21:103", + "nodeType": "YulExpressionStatement", + "src": "3465:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3506:9:103", + "nodeType": "YulIdentifier", + "src": "3506:9:103" + }, + { + "kind": "number", + "nativeSrc": "3517:2:103", + "nodeType": "YulLiteral", + "src": "3517:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3502:3:103", + "nodeType": "YulIdentifier", + "src": "3502:3:103" + }, + "nativeSrc": "3502:18:103", + "nodeType": "YulFunctionCall", + "src": "3502:18:103" + }, + { + "kind": "number", + "nativeSrc": "3522:2:103", + "nodeType": "YulLiteral", + "src": "3522:2:103", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3495:6:103", + "nodeType": "YulIdentifier", + "src": "3495:6:103" + }, + "nativeSrc": "3495:30:103", + "nodeType": "YulFunctionCall", + "src": "3495:30:103" + }, + "nativeSrc": "3495:30:103", + "nodeType": "YulExpressionStatement", + "src": "3495:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3545:9:103", + "nodeType": "YulIdentifier", + "src": "3545:9:103" + }, + { + "kind": "number", + "nativeSrc": "3556:2:103", + "nodeType": "YulLiteral", + "src": "3556:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3541:3:103", + "nodeType": "YulIdentifier", + "src": "3541:3:103" + }, + "nativeSrc": "3541:18:103", + "nodeType": "YulFunctionCall", + "src": "3541:18:103" + }, + { + "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65", + "kind": "string", + "nativeSrc": "3561:29:103", + "nodeType": "YulLiteral", + "src": "3561:29:103", + "type": "", + "value": "WitnetProxy: not upgradable" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3534:6:103", + "nodeType": "YulIdentifier", + "src": "3534:6:103" + }, + "nativeSrc": "3534:57:103", + "nodeType": "YulFunctionCall", + "src": "3534:57:103" + }, + "nativeSrc": "3534:57:103", + "nodeType": "YulExpressionStatement", + "src": "3534:57:103" + }, + { + "nativeSrc": "3600:26:103", + "nodeType": "YulAssignment", + "src": "3600:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "3612:9:103", + "nodeType": "YulIdentifier", + "src": "3612:9:103" + }, + { + "kind": "number", + "nativeSrc": "3623:2:103", + "nodeType": "YulLiteral", + "src": "3623:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3608:3:103", + "nodeType": "YulIdentifier", + "src": "3608:3:103" + }, + "nativeSrc": "3608:18:103", + "nodeType": "YulFunctionCall", + "src": "3608:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "3600:4:103", + "nodeType": "YulIdentifier", + "src": "3600:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "3281:351:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "3432:9:103", + "nodeType": "YulTypedName", + "src": "3432:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "3446:4:103", + "nodeType": "YulTypedName", + "src": "3446:4:103", + "type": "" + } + ], + "src": "3281:351:103" + }, + { + "body": { + "nativeSrc": "3703:184:103", + "nodeType": "YulBlock", + "src": "3703:184:103", + "statements": [ + { + "nativeSrc": "3713:10:103", + "nodeType": "YulVariableDeclaration", + "src": "3713:10:103", + "value": { + "kind": "number", + "nativeSrc": "3722:1:103", + "nodeType": "YulLiteral", + "src": "3722:1:103", + "type": "", + "value": "0" + }, + "variables": [ + { + "name": "i", + "nativeSrc": "3717:1:103", + "nodeType": "YulTypedName", + "src": "3717:1:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "3782:63:103", + "nodeType": "YulBlock", + "src": "3782:63:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "3807:3:103", + "nodeType": "YulIdentifier", + "src": "3807:3:103" + }, + { + "name": "i", + "nativeSrc": "3812:1:103", + "nodeType": "YulIdentifier", + "src": "3812:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3803:3:103", + "nodeType": "YulIdentifier", + "src": "3803:3:103" + }, + "nativeSrc": "3803:11:103", + "nodeType": "YulFunctionCall", + "src": "3803:11:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "src", + "nativeSrc": "3826:3:103", + "nodeType": "YulIdentifier", + "src": "3826:3:103" + }, + { + "name": "i", + "nativeSrc": "3831:1:103", + "nodeType": "YulIdentifier", + "src": "3831:1:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3822:3:103", + "nodeType": "YulIdentifier", + "src": "3822:3:103" + }, + "nativeSrc": "3822:11:103", + "nodeType": "YulFunctionCall", + "src": "3822:11:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "3816:5:103", + "nodeType": "YulIdentifier", + "src": "3816:5:103" + }, + "nativeSrc": "3816:18:103", + "nodeType": "YulFunctionCall", + "src": "3816:18:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3796:6:103", + "nodeType": "YulIdentifier", + "src": "3796:6:103" + }, + "nativeSrc": "3796:39:103", + "nodeType": "YulFunctionCall", + "src": "3796:39:103" + }, + "nativeSrc": "3796:39:103", + "nodeType": "YulExpressionStatement", + "src": "3796:39:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3743:1:103", + "nodeType": "YulIdentifier", + "src": "3743:1:103" + }, + { + "name": "length", + "nativeSrc": "3746:6:103", + "nodeType": "YulIdentifier", + "src": "3746:6:103" + } + ], + "functionName": { + "name": "lt", + "nativeSrc": "3740:2:103", + "nodeType": "YulIdentifier", + "src": "3740:2:103" + }, + "nativeSrc": "3740:13:103", + "nodeType": "YulFunctionCall", + "src": "3740:13:103" + }, + "nativeSrc": "3732:113:103", + "nodeType": "YulForLoop", + "post": { + "nativeSrc": "3754:19:103", + "nodeType": "YulBlock", + "src": "3754:19:103", + "statements": [ + { + "nativeSrc": "3756:15:103", + "nodeType": "YulAssignment", + "src": "3756:15:103", + "value": { + "arguments": [ + { + "name": "i", + "nativeSrc": "3765:1:103", + "nodeType": "YulIdentifier", + "src": "3765:1:103" + }, + { + "kind": "number", + "nativeSrc": "3768:2:103", + "nodeType": "YulLiteral", + "src": "3768:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3761:3:103", + "nodeType": "YulIdentifier", + "src": "3761:3:103" + }, + "nativeSrc": "3761:10:103", + "nodeType": "YulFunctionCall", + "src": "3761:10:103" + }, + "variableNames": [ + { + "name": "i", + "nativeSrc": "3756:1:103", + "nodeType": "YulIdentifier", + "src": "3756:1:103" + } + ] + } + ] + }, + "pre": { + "nativeSrc": "3736:3:103", + "nodeType": "YulBlock", + "src": "3736:3:103", + "statements": [] + }, + "src": "3732:113:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "dst", + "nativeSrc": "3865:3:103", + "nodeType": "YulIdentifier", + "src": "3865:3:103" + }, + { + "name": "length", + "nativeSrc": "3870:6:103", + "nodeType": "YulIdentifier", + "src": "3870:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "3861:3:103", + "nodeType": "YulIdentifier", + "src": "3861:3:103" + }, + "nativeSrc": "3861:16:103", + "nodeType": "YulFunctionCall", + "src": "3861:16:103" + }, + { + "kind": "number", + "nativeSrc": "3879:1:103", + "nodeType": "YulLiteral", + "src": "3879:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "3854:6:103", + "nodeType": "YulIdentifier", + "src": "3854:6:103" + }, + "nativeSrc": "3854:27:103", + "nodeType": "YulFunctionCall", + "src": "3854:27:103" + }, + "nativeSrc": "3854:27:103", + "nodeType": "YulExpressionStatement", + "src": "3854:27:103" + } + ] + }, + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "3637:250:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "src", + "nativeSrc": "3681:3:103", + "nodeType": "YulTypedName", + "src": "3681:3:103", + "type": "" + }, + { + "name": "dst", + "nativeSrc": "3686:3:103", + "nodeType": "YulTypedName", + "src": "3686:3:103", + "type": "" + }, + { + "name": "length", + "nativeSrc": "3691:6:103", + "nodeType": "YulTypedName", + "src": "3691:6:103", + "type": "" + } + ], + "src": "3637:250:103" + }, + { + "body": { + "nativeSrc": "4029:150:103", + "nodeType": "YulBlock", + "src": "4029:150:103", + "statements": [ + { + "nativeSrc": "4039:27:103", + "nodeType": "YulVariableDeclaration", + "src": "4039:27:103", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4059:6:103", + "nodeType": "YulIdentifier", + "src": "4059:6:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "4053:5:103", + "nodeType": "YulIdentifier", + "src": "4053:5:103" + }, + "nativeSrc": "4053:13:103", + "nodeType": "YulFunctionCall", + "src": "4053:13:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "4043:6:103", + "nodeType": "YulTypedName", + "src": "4043:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value0", + "nativeSrc": "4114:6:103", + "nodeType": "YulIdentifier", + "src": "4114:6:103" + }, + { + "kind": "number", + "nativeSrc": "4122:4:103", + "nodeType": "YulLiteral", + "src": "4122:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4110:3:103", + "nodeType": "YulIdentifier", + "src": "4110:3:103" + }, + "nativeSrc": "4110:17:103", + "nodeType": "YulFunctionCall", + "src": "4110:17:103" + }, + { + "name": "pos", + "nativeSrc": "4129:3:103", + "nodeType": "YulIdentifier", + "src": "4129:3:103" + }, + { + "name": "length", + "nativeSrc": "4134:6:103", + "nodeType": "YulIdentifier", + "src": "4134:6:103" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "4075:34:103", + "nodeType": "YulIdentifier", + "src": "4075:34:103" + }, + "nativeSrc": "4075:66:103", + "nodeType": "YulFunctionCall", + "src": "4075:66:103" + }, + "nativeSrc": "4075:66:103", + "nodeType": "YulExpressionStatement", + "src": "4075:66:103" + }, + { + "nativeSrc": "4150:23:103", + "nodeType": "YulAssignment", + "src": "4150:23:103", + "value": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "4161:3:103", + "nodeType": "YulIdentifier", + "src": "4161:3:103" + }, + { + "name": "length", + "nativeSrc": "4166:6:103", + "nodeType": "YulIdentifier", + "src": "4166:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4157:3:103", + "nodeType": "YulIdentifier", + "src": "4157:3:103" + }, + "nativeSrc": "4157:16:103", + "nodeType": "YulFunctionCall", + "src": "4157:16:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "4150:3:103", + "nodeType": "YulIdentifier", + "src": "4150:3:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", + "nativeSrc": "3892:287:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "pos", + "nativeSrc": "4005:3:103", + "nodeType": "YulTypedName", + "src": "4005:3:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "4010:6:103", + "nodeType": "YulTypedName", + "src": "4010:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "4021:3:103", + "nodeType": "YulTypedName", + "src": "4021:3:103", + "type": "" + } + ], + "src": "3892:287:103" + }, + { + "body": { + "nativeSrc": "4358:229:103", + "nodeType": "YulBlock", + "src": "4358:229:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4375:9:103", + "nodeType": "YulIdentifier", + "src": "4375:9:103" + }, + { + "kind": "number", + "nativeSrc": "4386:2:103", + "nodeType": "YulLiteral", + "src": "4386:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4368:6:103", + "nodeType": "YulIdentifier", + "src": "4368:6:103" + }, + "nativeSrc": "4368:21:103", + "nodeType": "YulFunctionCall", + "src": "4368:21:103" + }, + "nativeSrc": "4368:21:103", + "nodeType": "YulExpressionStatement", + "src": "4368:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4409:9:103", + "nodeType": "YulIdentifier", + "src": "4409:9:103" + }, + { + "kind": "number", + "nativeSrc": "4420:2:103", + "nodeType": "YulLiteral", + "src": "4420:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4405:3:103", + "nodeType": "YulIdentifier", + "src": "4405:3:103" + }, + "nativeSrc": "4405:18:103", + "nodeType": "YulFunctionCall", + "src": "4405:18:103" + }, + { + "kind": "number", + "nativeSrc": "4425:2:103", + "nodeType": "YulLiteral", + "src": "4425:2:103", + "type": "", + "value": "39" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4398:6:103", + "nodeType": "YulIdentifier", + "src": "4398:6:103" + }, + "nativeSrc": "4398:30:103", + "nodeType": "YulFunctionCall", + "src": "4398:30:103" + }, + "nativeSrc": "4398:30:103", + "nodeType": "YulExpressionStatement", + "src": "4398:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4448:9:103", + "nodeType": "YulIdentifier", + "src": "4448:9:103" + }, + { + "kind": "number", + "nativeSrc": "4459:2:103", + "nodeType": "YulLiteral", + "src": "4459:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4444:3:103", + "nodeType": "YulIdentifier", + "src": "4444:3:103" + }, + "nativeSrc": "4444:18:103", + "nodeType": "YulFunctionCall", + "src": "4444:18:103" + }, + { + "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d65", + "kind": "string", + "nativeSrc": "4464:34:103", + "nodeType": "YulLiteral", + "src": "4464:34:103", + "type": "", + "value": "WitnetProxy: uncompliant impleme" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4437:6:103", + "nodeType": "YulIdentifier", + "src": "4437:6:103" + }, + "nativeSrc": "4437:62:103", + "nodeType": "YulFunctionCall", + "src": "4437:62:103" + }, + "nativeSrc": "4437:62:103", + "nodeType": "YulExpressionStatement", + "src": "4437:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4519:9:103", + "nodeType": "YulIdentifier", + "src": "4519:9:103" + }, + { + "kind": "number", + "nativeSrc": "4530:2:103", + "nodeType": "YulLiteral", + "src": "4530:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4515:3:103", + "nodeType": "YulIdentifier", + "src": "4515:3:103" + }, + "nativeSrc": "4515:18:103", + "nodeType": "YulFunctionCall", + "src": "4515:18:103" + }, + { + "hexValue": "6e746174696f6e", + "kind": "string", + "nativeSrc": "4535:9:103", + "nodeType": "YulLiteral", + "src": "4535:9:103", + "type": "", + "value": "ntation" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4508:6:103", + "nodeType": "YulIdentifier", + "src": "4508:6:103" + }, + "nativeSrc": "4508:37:103", + "nodeType": "YulFunctionCall", + "src": "4508:37:103" + }, + "nativeSrc": "4508:37:103", + "nodeType": "YulExpressionStatement", + "src": "4508:37:103" + }, + { + "nativeSrc": "4554:27:103", + "nodeType": "YulAssignment", + "src": "4554:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4566:9:103", + "nodeType": "YulIdentifier", + "src": "4566:9:103" + }, + { + "kind": "number", + "nativeSrc": "4577:3:103", + "nodeType": "YulLiteral", + "src": "4577:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4562:3:103", + "nodeType": "YulIdentifier", + "src": "4562:3:103" + }, + "nativeSrc": "4562:19:103", + "nodeType": "YulFunctionCall", + "src": "4562:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4554:4:103", + "nodeType": "YulIdentifier", + "src": "4554:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "4184:403:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4335:9:103", + "nodeType": "YulTypedName", + "src": "4335:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "4349:4:103", + "nodeType": "YulTypedName", + "src": "4349:4:103", + "type": "" + } + ], + "src": "4184:403:103" + }, + { + "body": { + "nativeSrc": "4766:177:103", + "nodeType": "YulBlock", + "src": "4766:177:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4783:9:103", + "nodeType": "YulIdentifier", + "src": "4783:9:103" + }, + { + "kind": "number", + "nativeSrc": "4794:2:103", + "nodeType": "YulLiteral", + "src": "4794:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4776:6:103", + "nodeType": "YulIdentifier", + "src": "4776:6:103" + }, + "nativeSrc": "4776:21:103", + "nodeType": "YulFunctionCall", + "src": "4776:21:103" + }, + "nativeSrc": "4776:21:103", + "nodeType": "YulExpressionStatement", + "src": "4776:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4817:9:103", + "nodeType": "YulIdentifier", + "src": "4817:9:103" + }, + { + "kind": "number", + "nativeSrc": "4828:2:103", + "nodeType": "YulLiteral", + "src": "4828:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4813:3:103", + "nodeType": "YulIdentifier", + "src": "4813:3:103" + }, + "nativeSrc": "4813:18:103", + "nodeType": "YulFunctionCall", + "src": "4813:18:103" + }, + { + "kind": "number", + "nativeSrc": "4833:2:103", + "nodeType": "YulLiteral", + "src": "4833:2:103", + "type": "", + "value": "27" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4806:6:103", + "nodeType": "YulIdentifier", + "src": "4806:6:103" + }, + "nativeSrc": "4806:30:103", + "nodeType": "YulFunctionCall", + "src": "4806:30:103" + }, + "nativeSrc": "4806:30:103", + "nodeType": "YulExpressionStatement", + "src": "4806:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4856:9:103", + "nodeType": "YulIdentifier", + "src": "4856:9:103" + }, + { + "kind": "number", + "nativeSrc": "4867:2:103", + "nodeType": "YulLiteral", + "src": "4867:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4852:3:103", + "nodeType": "YulIdentifier", + "src": "4852:3:103" + }, + "nativeSrc": "4852:18:103", + "nodeType": "YulFunctionCall", + "src": "4852:18:103" + }, + { + "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564", + "kind": "string", + "nativeSrc": "4872:29:103", + "nodeType": "YulLiteral", + "src": "4872:29:103", + "type": "", + "value": "WitnetProxy: not authorized" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "4845:6:103", + "nodeType": "YulIdentifier", + "src": "4845:6:103" + }, + "nativeSrc": "4845:57:103", + "nodeType": "YulFunctionCall", + "src": "4845:57:103" + }, + "nativeSrc": "4845:57:103", + "nodeType": "YulExpressionStatement", + "src": "4845:57:103" + }, + { + "nativeSrc": "4911:26:103", + "nodeType": "YulAssignment", + "src": "4911:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "4923:9:103", + "nodeType": "YulIdentifier", + "src": "4923:9:103" + }, + { + "kind": "number", + "nativeSrc": "4934:2:103", + "nodeType": "YulLiteral", + "src": "4934:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4919:3:103", + "nodeType": "YulIdentifier", + "src": "4919:3:103" + }, + "nativeSrc": "4919:18:103", + "nodeType": "YulFunctionCall", + "src": "4919:18:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "4911:4:103", + "nodeType": "YulIdentifier", + "src": "4911:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "4592:351:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4743:9:103", + "nodeType": "YulTypedName", + "src": "4743:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "4757:4:103", + "nodeType": "YulTypedName", + "src": "4757:4:103", + "type": "" + } + ], + "src": "4592:351:103" + }, + { + "body": { + "nativeSrc": "5029:103:103", + "nodeType": "YulBlock", + "src": "5029:103:103", + "statements": [ + { + "body": { + "nativeSrc": "5075:16:103", + "nodeType": "YulBlock", + "src": "5075:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5084:1:103", + "nodeType": "YulLiteral", + "src": "5084:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "5087:1:103", + "nodeType": "YulLiteral", + "src": "5087:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "5077:6:103", + "nodeType": "YulIdentifier", + "src": "5077:6:103" + }, + "nativeSrc": "5077:12:103", + "nodeType": "YulFunctionCall", + "src": "5077:12:103" + }, + "nativeSrc": "5077:12:103", + "nodeType": "YulExpressionStatement", + "src": "5077:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "5050:7:103", + "nodeType": "YulIdentifier", + "src": "5050:7:103" + }, + { + "name": "headStart", + "nativeSrc": "5059:9:103", + "nodeType": "YulIdentifier", + "src": "5059:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "5046:3:103", + "nodeType": "YulIdentifier", + "src": "5046:3:103" + }, + "nativeSrc": "5046:23:103", + "nodeType": "YulFunctionCall", + "src": "5046:23:103" + }, + { + "kind": "number", + "nativeSrc": "5071:2:103", + "nodeType": "YulLiteral", + "src": "5071:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "5042:3:103", + "nodeType": "YulIdentifier", + "src": "5042:3:103" + }, + "nativeSrc": "5042:32:103", + "nodeType": "YulFunctionCall", + "src": "5042:32:103" + }, + "nativeSrc": "5039:52:103", + "nodeType": "YulIf", + "src": "5039:52:103" + }, + { + "nativeSrc": "5100:26:103", + "nodeType": "YulAssignment", + "src": "5100:26:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5116:9:103", + "nodeType": "YulIdentifier", + "src": "5116:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5110:5:103", + "nodeType": "YulIdentifier", + "src": "5110:5:103" + }, + "nativeSrc": "5110:16:103", + "nodeType": "YulFunctionCall", + "src": "5110:16:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "5100:6:103", + "nodeType": "YulIdentifier", + "src": "5100:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_bytes32_fromMemory", + "nativeSrc": "4948:184:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "4995:9:103", + "nodeType": "YulTypedName", + "src": "4995:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "5006:7:103", + "nodeType": "YulTypedName", + "src": "5006:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "5018:6:103", + "nodeType": "YulTypedName", + "src": "5018:6:103", + "type": "" + } + ], + "src": "4948:184:103" + }, + { + "body": { + "nativeSrc": "5311:226:103", + "nodeType": "YulBlock", + "src": "5311:226:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5328:9:103", + "nodeType": "YulIdentifier", + "src": "5328:9:103" + }, + { + "kind": "number", + "nativeSrc": "5339:2:103", + "nodeType": "YulLiteral", + "src": "5339:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5321:6:103", + "nodeType": "YulIdentifier", + "src": "5321:6:103" + }, + "nativeSrc": "5321:21:103", + "nodeType": "YulFunctionCall", + "src": "5321:21:103" + }, + "nativeSrc": "5321:21:103", + "nodeType": "YulExpressionStatement", + "src": "5321:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5362:9:103", + "nodeType": "YulIdentifier", + "src": "5362:9:103" + }, + { + "kind": "number", + "nativeSrc": "5373:2:103", + "nodeType": "YulLiteral", + "src": "5373:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5358:3:103", + "nodeType": "YulIdentifier", + "src": "5358:3:103" + }, + "nativeSrc": "5358:18:103", + "nodeType": "YulFunctionCall", + "src": "5358:18:103" + }, + { + "kind": "number", + "nativeSrc": "5378:2:103", + "nodeType": "YulLiteral", + "src": "5378:2:103", + "type": "", + "value": "36" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5351:6:103", + "nodeType": "YulIdentifier", + "src": "5351:6:103" + }, + "nativeSrc": "5351:30:103", + "nodeType": "YulFunctionCall", + "src": "5351:30:103" + }, + "nativeSrc": "5351:30:103", + "nodeType": "YulExpressionStatement", + "src": "5351:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5401:9:103", + "nodeType": "YulIdentifier", + "src": "5401:9:103" + }, + { + "kind": "number", + "nativeSrc": "5412:2:103", + "nodeType": "YulLiteral", + "src": "5412:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5397:3:103", + "nodeType": "YulIdentifier", + "src": "5397:3:103" + }, + "nativeSrc": "5397:18:103", + "nodeType": "YulFunctionCall", + "src": "5397:18:103" + }, + { + "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d", + "kind": "string", + "nativeSrc": "5417:34:103", + "nodeType": "YulLiteral", + "src": "5417:34:103", + "type": "", + "value": "WitnetProxy: proxiableUUIDs mism" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5390:6:103", + "nodeType": "YulIdentifier", + "src": "5390:6:103" + }, + "nativeSrc": "5390:62:103", + "nodeType": "YulFunctionCall", + "src": "5390:62:103" + }, + "nativeSrc": "5390:62:103", + "nodeType": "YulExpressionStatement", + "src": "5390:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5472:9:103", + "nodeType": "YulIdentifier", + "src": "5472:9:103" + }, + { + "kind": "number", + "nativeSrc": "5483:2:103", + "nodeType": "YulLiteral", + "src": "5483:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5468:3:103", + "nodeType": "YulIdentifier", + "src": "5468:3:103" + }, + "nativeSrc": "5468:18:103", + "nodeType": "YulFunctionCall", + "src": "5468:18:103" + }, + { + "hexValue": "61746368", + "kind": "string", + "nativeSrc": "5488:6:103", + "nodeType": "YulLiteral", + "src": "5488:6:103", + "type": "", + "value": "atch" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5461:6:103", + "nodeType": "YulIdentifier", + "src": "5461:6:103" + }, + "nativeSrc": "5461:34:103", + "nodeType": "YulFunctionCall", + "src": "5461:34:103" + }, + "nativeSrc": "5461:34:103", + "nodeType": "YulExpressionStatement", + "src": "5461:34:103" + }, + { + "nativeSrc": "5504:27:103", + "nodeType": "YulAssignment", + "src": "5504:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5516:9:103", + "nodeType": "YulIdentifier", + "src": "5516:9:103" + }, + { + "kind": "number", + "nativeSrc": "5527:3:103", + "nodeType": "YulLiteral", + "src": "5527:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5512:3:103", + "nodeType": "YulIdentifier", + "src": "5512:3:103" + }, + "nativeSrc": "5512:19:103", + "nodeType": "YulFunctionCall", + "src": "5512:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "5504:4:103", + "nodeType": "YulIdentifier", + "src": "5504:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "5137:400:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "5288:9:103", + "nodeType": "YulTypedName", + "src": "5288:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "5302:4:103", + "nodeType": "YulTypedName", + "src": "5302:4:103", + "type": "" + } + ], + "src": "5137:400:103" + }, + { + "body": { + "nativeSrc": "5591:221:103", + "nodeType": "YulBlock", + "src": "5591:221:103", + "statements": [ + { + "nativeSrc": "5601:26:103", + "nodeType": "YulVariableDeclaration", + "src": "5601:26:103", + "value": { + "arguments": [ + { + "name": "value", + "nativeSrc": "5621:5:103", + "nodeType": "YulIdentifier", + "src": "5621:5:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "5615:5:103", + "nodeType": "YulIdentifier", + "src": "5615:5:103" + }, + "nativeSrc": "5615:12:103", + "nodeType": "YulFunctionCall", + "src": "5615:12:103" + }, + "variables": [ + { + "name": "length", + "nativeSrc": "5605:6:103", + "nodeType": "YulTypedName", + "src": "5605:6:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5643:3:103", + "nodeType": "YulIdentifier", + "src": "5643:3:103" + }, + { + "name": "length", + "nativeSrc": "5648:6:103", + "nodeType": "YulIdentifier", + "src": "5648:6:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5636:6:103", + "nodeType": "YulIdentifier", + "src": "5636:6:103" + }, + "nativeSrc": "5636:19:103", + "nodeType": "YulFunctionCall", + "src": "5636:19:103" + }, + "nativeSrc": "5636:19:103", + "nodeType": "YulExpressionStatement", + "src": "5636:19:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "value", + "nativeSrc": "5703:5:103", + "nodeType": "YulIdentifier", + "src": "5703:5:103" + }, + { + "kind": "number", + "nativeSrc": "5710:4:103", + "nodeType": "YulLiteral", + "src": "5710:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5699:3:103", + "nodeType": "YulIdentifier", + "src": "5699:3:103" + }, + "nativeSrc": "5699:16:103", + "nodeType": "YulFunctionCall", + "src": "5699:16:103" + }, + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5721:3:103", + "nodeType": "YulIdentifier", + "src": "5721:3:103" + }, + { + "kind": "number", + "nativeSrc": "5726:4:103", + "nodeType": "YulLiteral", + "src": "5726:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5717:3:103", + "nodeType": "YulIdentifier", + "src": "5717:3:103" + }, + "nativeSrc": "5717:14:103", + "nodeType": "YulFunctionCall", + "src": "5717:14:103" + }, + { + "name": "length", + "nativeSrc": "5733:6:103", + "nodeType": "YulIdentifier", + "src": "5733:6:103" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "5664:34:103", + "nodeType": "YulIdentifier", + "src": "5664:34:103" + }, + "nativeSrc": "5664:76:103", + "nodeType": "YulFunctionCall", + "src": "5664:76:103" + }, + "nativeSrc": "5664:76:103", + "nodeType": "YulExpressionStatement", + "src": "5664:76:103" + }, + { + "nativeSrc": "5749:57:103", + "nodeType": "YulAssignment", + "src": "5749:57:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "pos", + "nativeSrc": "5764:3:103", + "nodeType": "YulIdentifier", + "src": "5764:3:103" + }, + { + "arguments": [ + { + "arguments": [ + { + "name": "length", + "nativeSrc": "5777:6:103", + "nodeType": "YulIdentifier", + "src": "5777:6:103" + }, + { + "kind": "number", + "nativeSrc": "5785:2:103", + "nodeType": "YulLiteral", + "src": "5785:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5773:3:103", + "nodeType": "YulIdentifier", + "src": "5773:3:103" + }, + "nativeSrc": "5773:15:103", + "nodeType": "YulFunctionCall", + "src": "5773:15:103" + }, + { + "arguments": [ + { + "kind": "number", + "nativeSrc": "5794:2:103", + "nodeType": "YulLiteral", + "src": "5794:2:103", + "type": "", + "value": "31" + } + ], + "functionName": { + "name": "not", + "nativeSrc": "5790:3:103", + "nodeType": "YulIdentifier", + "src": "5790:3:103" + }, + "nativeSrc": "5790:7:103", + "nodeType": "YulFunctionCall", + "src": "5790:7:103" + } + ], + "functionName": { + "name": "and", + "nativeSrc": "5769:3:103", + "nodeType": "YulIdentifier", + "src": "5769:3:103" + }, + "nativeSrc": "5769:29:103", + "nodeType": "YulFunctionCall", + "src": "5769:29:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5760:3:103", + "nodeType": "YulIdentifier", + "src": "5760:3:103" + }, + "nativeSrc": "5760:39:103", + "nodeType": "YulFunctionCall", + "src": "5760:39:103" + }, + { + "kind": "number", + "nativeSrc": "5801:4:103", + "nodeType": "YulLiteral", + "src": "5801:4:103", + "type": "", + "value": "0x20" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "5756:3:103", + "nodeType": "YulIdentifier", + "src": "5756:3:103" + }, + "nativeSrc": "5756:50:103", + "nodeType": "YulFunctionCall", + "src": "5756:50:103" + }, + "variableNames": [ + { + "name": "end", + "nativeSrc": "5749:3:103", + "nodeType": "YulIdentifier", + "src": "5749:3:103" + } + ] + } + ] + }, + "name": "abi_encode_bytes", + "nativeSrc": "5542:270:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "value", + "nativeSrc": "5568:5:103", + "nodeType": "YulTypedName", + "src": "5568:5:103", + "type": "" + }, + { + "name": "pos", + "nativeSrc": "5575:3:103", + "nodeType": "YulTypedName", + "src": "5575:3:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "end", + "nativeSrc": "5583:3:103", + "nodeType": "YulTypedName", + "src": "5583:3:103", + "type": "" + } + ], + "src": "5542:270:103" + }, + { + "body": { + "nativeSrc": "5936:98:103", + "nodeType": "YulBlock", + "src": "5936:98:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "5953:9:103", + "nodeType": "YulIdentifier", + "src": "5953:9:103" + }, + { + "kind": "number", + "nativeSrc": "5964:2:103", + "nodeType": "YulLiteral", + "src": "5964:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "5946:6:103", + "nodeType": "YulIdentifier", + "src": "5946:6:103" + }, + "nativeSrc": "5946:21:103", + "nodeType": "YulFunctionCall", + "src": "5946:21:103" + }, + "nativeSrc": "5946:21:103", + "nodeType": "YulExpressionStatement", + "src": "5946:21:103" + }, + { + "nativeSrc": "5976:52:103", + "nodeType": "YulAssignment", + "src": "5976:52:103", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "6001:6:103", + "nodeType": "YulIdentifier", + "src": "6001:6:103" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6013:9:103", + "nodeType": "YulIdentifier", + "src": "6013:9:103" + }, + { + "kind": "number", + "nativeSrc": "6024:2:103", + "nodeType": "YulLiteral", + "src": "6024:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6009:3:103", + "nodeType": "YulIdentifier", + "src": "6009:3:103" + }, + "nativeSrc": "6009:18:103", + "nodeType": "YulFunctionCall", + "src": "6009:18:103" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "5984:16:103", + "nodeType": "YulIdentifier", + "src": "5984:16:103" + }, + "nativeSrc": "5984:44:103", + "nodeType": "YulFunctionCall", + "src": "5984:44:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "5976:4:103", + "nodeType": "YulIdentifier", + "src": "5976:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", + "nativeSrc": "5817:217:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "5905:9:103", + "nodeType": "YulTypedName", + "src": "5905:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "5916:6:103", + "nodeType": "YulTypedName", + "src": "5916:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "5927:4:103", + "nodeType": "YulTypedName", + "src": "5927:4:103", + "type": "" + } + ], + "src": "5817:217:103" + }, + { + "body": { + "nativeSrc": "6213:224:103", + "nodeType": "YulBlock", + "src": "6213:224:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6230:9:103", + "nodeType": "YulIdentifier", + "src": "6230:9:103" + }, + { + "kind": "number", + "nativeSrc": "6241:2:103", + "nodeType": "YulLiteral", + "src": "6241:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6223:6:103", + "nodeType": "YulIdentifier", + "src": "6223:6:103" + }, + "nativeSrc": "6223:21:103", + "nodeType": "YulFunctionCall", + "src": "6223:21:103" + }, + "nativeSrc": "6223:21:103", + "nodeType": "YulExpressionStatement", + "src": "6223:21:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6264:9:103", + "nodeType": "YulIdentifier", + "src": "6264:9:103" + }, + { + "kind": "number", + "nativeSrc": "6275:2:103", + "nodeType": "YulLiteral", + "src": "6275:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6260:3:103", + "nodeType": "YulIdentifier", + "src": "6260:3:103" + }, + "nativeSrc": "6260:18:103", + "nodeType": "YulFunctionCall", + "src": "6260:18:103" + }, + { + "kind": "number", + "nativeSrc": "6280:2:103", + "nodeType": "YulLiteral", + "src": "6280:2:103", + "type": "", + "value": "34" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6253:6:103", + "nodeType": "YulIdentifier", + "src": "6253:6:103" + }, + "nativeSrc": "6253:30:103", + "nodeType": "YulFunctionCall", + "src": "6253:30:103" + }, + "nativeSrc": "6253:30:103", + "nodeType": "YulExpressionStatement", + "src": "6253:30:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6303:9:103", + "nodeType": "YulIdentifier", + "src": "6303:9:103" + }, + { + "kind": "number", + "nativeSrc": "6314:2:103", + "nodeType": "YulLiteral", + "src": "6314:2:103", + "type": "", + "value": "64" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6299:3:103", + "nodeType": "YulIdentifier", + "src": "6299:3:103" + }, + "nativeSrc": "6299:18:103", + "nodeType": "YulFunctionCall", + "src": "6299:18:103" + }, + { + "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c", + "kind": "string", + "nativeSrc": "6319:34:103", + "nodeType": "YulLiteral", + "src": "6319:34:103", + "type": "", + "value": "WitnetProxy: initialization fail" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6292:6:103", + "nodeType": "YulIdentifier", + "src": "6292:6:103" + }, + "nativeSrc": "6292:62:103", + "nodeType": "YulFunctionCall", + "src": "6292:62:103" + }, + "nativeSrc": "6292:62:103", + "nodeType": "YulExpressionStatement", + "src": "6292:62:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6374:9:103", + "nodeType": "YulIdentifier", + "src": "6374:9:103" + }, + { + "kind": "number", + "nativeSrc": "6385:2:103", + "nodeType": "YulLiteral", + "src": "6385:2:103", + "type": "", + "value": "96" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6370:3:103", + "nodeType": "YulIdentifier", + "src": "6370:3:103" + }, + "nativeSrc": "6370:18:103", + "nodeType": "YulFunctionCall", + "src": "6370:18:103" + }, + { + "hexValue": "6564", + "kind": "string", + "nativeSrc": "6390:4:103", + "nodeType": "YulLiteral", + "src": "6390:4:103", + "type": "", + "value": "ed" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6363:6:103", + "nodeType": "YulIdentifier", + "src": "6363:6:103" + }, + "nativeSrc": "6363:32:103", + "nodeType": "YulFunctionCall", + "src": "6363:32:103" + }, + "nativeSrc": "6363:32:103", + "nodeType": "YulExpressionStatement", + "src": "6363:32:103" + }, + { + "nativeSrc": "6404:27:103", + "nodeType": "YulAssignment", + "src": "6404:27:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6416:9:103", + "nodeType": "YulIdentifier", + "src": "6416:9:103" + }, + { + "kind": "number", + "nativeSrc": "6427:3:103", + "nodeType": "YulLiteral", + "src": "6427:3:103", + "type": "", + "value": "128" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6412:3:103", + "nodeType": "YulIdentifier", + "src": "6412:3:103" + }, + "nativeSrc": "6412:19:103", + "nodeType": "YulFunctionCall", + "src": "6412:19:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "6404:4:103", + "nodeType": "YulIdentifier", + "src": "6404:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "6039:398:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6190:9:103", + "nodeType": "YulTypedName", + "src": "6190:9:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "6204:4:103", + "nodeType": "YulTypedName", + "src": "6204:4:103", + "type": "" + } + ], + "src": "6039:398:103" + }, + { + "body": { + "nativeSrc": "6533:557:103", + "nodeType": "YulBlock", + "src": "6533:557:103", + "statements": [ + { + "body": { + "nativeSrc": "6579:16:103", + "nodeType": "YulBlock", + "src": "6579:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6588:1:103", + "nodeType": "YulLiteral", + "src": "6588:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "6591:1:103", + "nodeType": "YulLiteral", + "src": "6591:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6581:6:103", + "nodeType": "YulIdentifier", + "src": "6581:6:103" + }, + "nativeSrc": "6581:12:103", + "nodeType": "YulFunctionCall", + "src": "6581:12:103" + }, + "nativeSrc": "6581:12:103", + "nodeType": "YulExpressionStatement", + "src": "6581:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "name": "dataEnd", + "nativeSrc": "6554:7:103", + "nodeType": "YulIdentifier", + "src": "6554:7:103" + }, + { + "name": "headStart", + "nativeSrc": "6563:9:103", + "nodeType": "YulIdentifier", + "src": "6563:9:103" + } + ], + "functionName": { + "name": "sub", + "nativeSrc": "6550:3:103", + "nodeType": "YulIdentifier", + "src": "6550:3:103" + }, + "nativeSrc": "6550:23:103", + "nodeType": "YulFunctionCall", + "src": "6550:23:103" + }, + { + "kind": "number", + "nativeSrc": "6575:2:103", + "nodeType": "YulLiteral", + "src": "6575:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "6546:3:103", + "nodeType": "YulIdentifier", + "src": "6546:3:103" + }, + "nativeSrc": "6546:32:103", + "nodeType": "YulFunctionCall", + "src": "6546:32:103" + }, + "nativeSrc": "6543:52:103", + "nodeType": "YulIf", + "src": "6543:52:103" + }, + { + "nativeSrc": "6604:30:103", + "nodeType": "YulVariableDeclaration", + "src": "6604:30:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6624:9:103", + "nodeType": "YulIdentifier", + "src": "6624:9:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "6618:5:103", + "nodeType": "YulIdentifier", + "src": "6618:5:103" + }, + "nativeSrc": "6618:16:103", + "nodeType": "YulFunctionCall", + "src": "6618:16:103" + }, + "variables": [ + { + "name": "offset", + "nativeSrc": "6608:6:103", + "nodeType": "YulTypedName", + "src": "6608:6:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "6677:16:103", + "nodeType": "YulBlock", + "src": "6677:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6686:1:103", + "nodeType": "YulLiteral", + "src": "6686:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "6689:1:103", + "nodeType": "YulLiteral", + "src": "6689:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6679:6:103", + "nodeType": "YulIdentifier", + "src": "6679:6:103" + }, + "nativeSrc": "6679:12:103", + "nodeType": "YulFunctionCall", + "src": "6679:12:103" + }, + "nativeSrc": "6679:12:103", + "nodeType": "YulExpressionStatement", + "src": "6679:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "name": "offset", + "nativeSrc": "6649:6:103", + "nodeType": "YulIdentifier", + "src": "6649:6:103" + }, + { + "kind": "number", + "nativeSrc": "6657:18:103", + "nodeType": "YulLiteral", + "src": "6657:18:103", + "type": "", + "value": "0xffffffffffffffff" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "6646:2:103", + "nodeType": "YulIdentifier", + "src": "6646:2:103" + }, + "nativeSrc": "6646:30:103", + "nodeType": "YulFunctionCall", + "src": "6646:30:103" + }, + "nativeSrc": "6643:50:103", + "nodeType": "YulIf", + "src": "6643:50:103" + }, + { + "nativeSrc": "6702:32:103", + "nodeType": "YulVariableDeclaration", + "src": "6702:32:103", + "value": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "6716:9:103", + "nodeType": "YulIdentifier", + "src": "6716:9:103" + }, + { + "name": "offset", + "nativeSrc": "6727:6:103", + "nodeType": "YulIdentifier", + "src": "6727:6:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6712:3:103", + "nodeType": "YulIdentifier", + "src": "6712:3:103" + }, + "nativeSrc": "6712:22:103", + "nodeType": "YulFunctionCall", + "src": "6712:22:103" + }, + "variables": [ + { + "name": "_1", + "nativeSrc": "6706:2:103", + "nodeType": "YulTypedName", + "src": "6706:2:103", + "type": "" + } + ] + }, + { + "body": { + "nativeSrc": "6782:16:103", + "nodeType": "YulBlock", + "src": "6782:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6791:1:103", + "nodeType": "YulLiteral", + "src": "6791:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "6794:1:103", + "nodeType": "YulLiteral", + "src": "6794:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6784:6:103", + "nodeType": "YulIdentifier", + "src": "6784:6:103" + }, + "nativeSrc": "6784:12:103", + "nodeType": "YulFunctionCall", + "src": "6784:12:103" + }, + "nativeSrc": "6784:12:103", + "nodeType": "YulExpressionStatement", + "src": "6784:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "6761:2:103", + "nodeType": "YulIdentifier", + "src": "6761:2:103" + }, + { + "kind": "number", + "nativeSrc": "6765:4:103", + "nodeType": "YulLiteral", + "src": "6765:4:103", + "type": "", + "value": "0x1f" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6757:3:103", + "nodeType": "YulIdentifier", + "src": "6757:3:103" + }, + "nativeSrc": "6757:13:103", + "nodeType": "YulFunctionCall", + "src": "6757:13:103" + }, + { + "name": "dataEnd", + "nativeSrc": "6772:7:103", + "nodeType": "YulIdentifier", + "src": "6772:7:103" + } + ], + "functionName": { + "name": "slt", + "nativeSrc": "6753:3:103", + "nodeType": "YulIdentifier", + "src": "6753:3:103" + }, + "nativeSrc": "6753:27:103", + "nodeType": "YulFunctionCall", + "src": "6753:27:103" + } + ], + "functionName": { + "name": "iszero", + "nativeSrc": "6746:6:103", + "nodeType": "YulIdentifier", + "src": "6746:6:103" + }, + "nativeSrc": "6746:35:103", + "nodeType": "YulFunctionCall", + "src": "6746:35:103" + }, + "nativeSrc": "6743:55:103", + "nodeType": "YulIf", + "src": "6743:55:103" + }, + { + "nativeSrc": "6807:19:103", + "nodeType": "YulVariableDeclaration", + "src": "6807:19:103", + "value": { + "arguments": [ + { + "name": "_1", + "nativeSrc": "6823:2:103", + "nodeType": "YulIdentifier", + "src": "6823:2:103" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "6817:5:103", + "nodeType": "YulIdentifier", + "src": "6817:5:103" + }, + "nativeSrc": "6817:9:103", + "nodeType": "YulFunctionCall", + "src": "6817:9:103" + }, + "variables": [ + { + "name": "_2", + "nativeSrc": "6811:2:103", + "nodeType": "YulTypedName", + "src": "6811:2:103", + "type": "" + } + ] + }, + { + "nativeSrc": "6835:61:103", + "nodeType": "YulVariableDeclaration", + "src": "6835:61:103", + "value": { + "arguments": [ + { + "arguments": [ + { + "name": "_2", + "nativeSrc": "6892:2:103", + "nodeType": "YulIdentifier", + "src": "6892:2:103" + } + ], + "functionName": { + "name": "array_allocation_size_bytes", + "nativeSrc": "6864:27:103", + "nodeType": "YulIdentifier", + "src": "6864:27:103" + }, + "nativeSrc": "6864:31:103", + "nodeType": "YulFunctionCall", + "src": "6864:31:103" + } + ], + "functionName": { + "name": "allocate_memory", + "nativeSrc": "6848:15:103", + "nodeType": "YulIdentifier", + "src": "6848:15:103" + }, + "nativeSrc": "6848:48:103", + "nodeType": "YulFunctionCall", + "src": "6848:48:103" + }, + "variables": [ + { + "name": "array", + "nativeSrc": "6839:5:103", + "nodeType": "YulTypedName", + "src": "6839:5:103", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "array", + "nativeSrc": "6912:5:103", + "nodeType": "YulIdentifier", + "src": "6912:5:103" + }, + { + "name": "_2", + "nativeSrc": "6919:2:103", + "nodeType": "YulIdentifier", + "src": "6919:2:103" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "6905:6:103", + "nodeType": "YulIdentifier", + "src": "6905:6:103" + }, + "nativeSrc": "6905:17:103", + "nodeType": "YulFunctionCall", + "src": "6905:17:103" + }, + "nativeSrc": "6905:17:103", + "nodeType": "YulExpressionStatement", + "src": "6905:17:103" + }, + { + "body": { + "nativeSrc": "6968:16:103", + "nodeType": "YulBlock", + "src": "6968:16:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "6977:1:103", + "nodeType": "YulLiteral", + "src": "6977:1:103", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "6980:1:103", + "nodeType": "YulLiteral", + "src": "6980:1:103", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "6970:6:103", + "nodeType": "YulIdentifier", + "src": "6970:6:103" + }, + "nativeSrc": "6970:12:103", + "nodeType": "YulFunctionCall", + "src": "6970:12:103" + }, + "nativeSrc": "6970:12:103", + "nodeType": "YulExpressionStatement", + "src": "6970:12:103" + } + ] + }, + "condition": { + "arguments": [ + { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "6945:2:103", + "nodeType": "YulIdentifier", + "src": "6945:2:103" + }, + { + "name": "_2", + "nativeSrc": "6949:2:103", + "nodeType": "YulIdentifier", + "src": "6949:2:103" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6941:3:103", + "nodeType": "YulIdentifier", + "src": "6941:3:103" + }, + "nativeSrc": "6941:11:103", + "nodeType": "YulFunctionCall", + "src": "6941:11:103" + }, + { + "kind": "number", + "nativeSrc": "6954:2:103", + "nodeType": "YulLiteral", + "src": "6954:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "6937:3:103", + "nodeType": "YulIdentifier", + "src": "6937:3:103" + }, + "nativeSrc": "6937:20:103", + "nodeType": "YulFunctionCall", + "src": "6937:20:103" + }, + { + "name": "dataEnd", + "nativeSrc": "6959:7:103", + "nodeType": "YulIdentifier", + "src": "6959:7:103" + } + ], + "functionName": { + "name": "gt", + "nativeSrc": "6934:2:103", + "nodeType": "YulIdentifier", + "src": "6934:2:103" + }, + "nativeSrc": "6934:33:103", + "nodeType": "YulFunctionCall", + "src": "6934:33:103" + }, + "nativeSrc": "6931:53:103", + "nodeType": "YulIf", + "src": "6931:53:103" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "name": "_1", + "nativeSrc": "7032:2:103", + "nodeType": "YulIdentifier", + "src": "7032:2:103" + }, + { + "kind": "number", + "nativeSrc": "7036:2:103", + "nodeType": "YulLiteral", + "src": "7036:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7028:3:103", + "nodeType": "YulIdentifier", + "src": "7028:3:103" + }, + "nativeSrc": "7028:11:103", + "nodeType": "YulFunctionCall", + "src": "7028:11:103" + }, + { + "arguments": [ + { + "name": "array", + "nativeSrc": "7045:5:103", + "nodeType": "YulIdentifier", + "src": "7045:5:103" + }, + { + "kind": "number", + "nativeSrc": "7052:2:103", + "nodeType": "YulLiteral", + "src": "7052:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7041:3:103", + "nodeType": "YulIdentifier", + "src": "7041:3:103" + }, + "nativeSrc": "7041:14:103", + "nodeType": "YulFunctionCall", + "src": "7041:14:103" + }, + { + "name": "_2", + "nativeSrc": "7057:2:103", + "nodeType": "YulIdentifier", + "src": "7057:2:103" + } + ], + "functionName": { + "name": "copy_memory_to_memory_with_cleanup", + "nativeSrc": "6993:34:103", + "nodeType": "YulIdentifier", + "src": "6993:34:103" + }, + "nativeSrc": "6993:67:103", + "nodeType": "YulFunctionCall", + "src": "6993:67:103" + }, + "nativeSrc": "6993:67:103", + "nodeType": "YulExpressionStatement", + "src": "6993:67:103" + }, + { + "nativeSrc": "7069:15:103", + "nodeType": "YulAssignment", + "src": "7069:15:103", + "value": { + "name": "array", + "nativeSrc": "7079:5:103", + "nodeType": "YulIdentifier", + "src": "7079:5:103" + }, + "variableNames": [ + { + "name": "value0", + "nativeSrc": "7069:6:103", + "nodeType": "YulIdentifier", + "src": "7069:6:103" + } + ] + } + ] + }, + "name": "abi_decode_tuple_t_string_memory_ptr_fromMemory", + "nativeSrc": "6442:648:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "6499:9:103", + "nodeType": "YulTypedName", + "src": "6499:9:103", + "type": "" + }, + { + "name": "dataEnd", + "nativeSrc": "6510:7:103", + "nodeType": "YulTypedName", + "src": "6510:7:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "value0", + "nativeSrc": "6522:6:103", + "nodeType": "YulTypedName", + "src": "6522:6:103", + "type": "" + } + ], + "src": "6442:648:103" + }, + { + "body": { + "nativeSrc": "7216:98:103", + "nodeType": "YulBlock", + "src": "7216:98:103", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7233:9:103", + "nodeType": "YulIdentifier", + "src": "7233:9:103" + }, + { + "kind": "number", + "nativeSrc": "7244:2:103", + "nodeType": "YulLiteral", + "src": "7244:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "mstore", + "nativeSrc": "7226:6:103", + "nodeType": "YulIdentifier", + "src": "7226:6:103" + }, + "nativeSrc": "7226:21:103", + "nodeType": "YulFunctionCall", + "src": "7226:21:103" + }, + "nativeSrc": "7226:21:103", + "nodeType": "YulExpressionStatement", + "src": "7226:21:103" + }, + { + "nativeSrc": "7256:52:103", + "nodeType": "YulAssignment", + "src": "7256:52:103", + "value": { + "arguments": [ + { + "name": "value0", + "nativeSrc": "7281:6:103", + "nodeType": "YulIdentifier", + "src": "7281:6:103" + }, + { + "arguments": [ + { + "name": "headStart", + "nativeSrc": "7293:9:103", + "nodeType": "YulIdentifier", + "src": "7293:9:103" + }, + { + "kind": "number", + "nativeSrc": "7304:2:103", + "nodeType": "YulLiteral", + "src": "7304:2:103", + "type": "", + "value": "32" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "7289:3:103", + "nodeType": "YulIdentifier", + "src": "7289:3:103" + }, + "nativeSrc": "7289:18:103", + "nodeType": "YulFunctionCall", + "src": "7289:18:103" + } + ], + "functionName": { + "name": "abi_encode_bytes", + "nativeSrc": "7264:16:103", + "nodeType": "YulIdentifier", + "src": "7264:16:103" + }, + "nativeSrc": "7264:44:103", + "nodeType": "YulFunctionCall", + "src": "7264:44:103" + }, + "variableNames": [ + { + "name": "tail", + "nativeSrc": "7256:4:103", + "nodeType": "YulIdentifier", + "src": "7256:4:103" + } + ] + } + ] + }, + "name": "abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed", + "nativeSrc": "7095:219:103", + "nodeType": "YulFunctionDefinition", + "parameters": [ + { + "name": "headStart", + "nativeSrc": "7185:9:103", + "nodeType": "YulTypedName", + "src": "7185:9:103", + "type": "" + }, + { + "name": "value0", + "nativeSrc": "7196:6:103", + "nodeType": "YulTypedName", + "src": "7196:6:103", + "type": "" + } + ], + "returnVariables": [ + { + "name": "tail", + "nativeSrc": "7207:4:103", + "nodeType": "YulTypedName", + "src": "7207:4:103", + "type": "" + } + ], + "src": "7095:219:103" + } + ] + }, + "contents": "{\n { }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, sub(shl(160, 1), 1)))\n }\n function panic_error_0x41()\n {\n mstore(0, shl(224, 0x4e487b71))\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function allocate_memory(size) -> memPtr\n {\n memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(size, 31), not(31)))\n if or(gt(newFreePtr, 0xffffffffffffffff), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n }\n function array_allocation_size_bytes(length) -> size\n {\n if gt(length, 0xffffffffffffffff) { panic_error_0x41() }\n size := add(and(add(length, 31), not(31)), 0x20)\n }\n function abi_decode_tuple_t_addresst_bytes_memory_ptr(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n value0 := value\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := calldataload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(array, 32), add(_1, 32), _2)\n mstore(add(add(array, _2), 32), 0)\n value1 := array\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"WitnetProxy: null implementation\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 31)\n mstore(add(headStart, 64), \"WitnetProxy: nothing to upgrade\")\n tail := add(headStart, 96)\n }\n function abi_decode_tuple_t_bool_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := mload(headStart)\n if iszero(eq(value, iszero(iszero(value)))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 42)\n mstore(add(headStart, 64), \"WitnetProxy: unable to check upg\")\n mstore(add(headStart, 96), \"radability\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"WitnetProxy: not upgradable\")\n tail := add(headStart, 96)\n }\n function copy_memory_to_memory_with_cleanup(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n mstore(add(dst, length), 0)\n }\n function abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value0) -> end\n {\n let length := mload(value0)\n copy_memory_to_memory_with_cleanup(add(value0, 0x20), pos, length)\n end := add(pos, length)\n }\n function abi_encode_tuple_t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 39)\n mstore(add(headStart, 64), \"WitnetProxy: uncompliant impleme\")\n mstore(add(headStart, 96), \"ntation\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 27)\n mstore(add(headStart, 64), \"WitnetProxy: not authorized\")\n tail := add(headStart, 96)\n }\n function abi_decode_tuple_t_bytes32_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := mload(headStart)\n }\n function abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 36)\n mstore(add(headStart, 64), \"WitnetProxy: proxiableUUIDs mism\")\n mstore(add(headStart, 96), \"atch\")\n tail := add(headStart, 128)\n }\n function abi_encode_bytes(value, pos) -> end\n {\n let length := mload(value)\n mstore(pos, length)\n copy_memory_to_memory_with_cleanup(add(value, 0x20), add(pos, 0x20), length)\n end := add(add(pos, and(add(length, 31), not(31))), 0x20)\n }\n function abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n function abi_encode_tuple_t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 34)\n mstore(add(headStart, 64), \"WitnetProxy: initialization fail\")\n mstore(add(headStart, 96), \"ed\")\n tail := add(headStart, 128)\n }\n function abi_decode_tuple_t_string_memory_ptr_fromMemory(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let offset := mload(headStart)\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let _1 := add(headStart, offset)\n if iszero(slt(add(_1, 0x1f), dataEnd)) { revert(0, 0) }\n let _2 := mload(_1)\n let array := allocate_memory(array_allocation_size_bytes(_2))\n mstore(array, _2)\n if gt(add(add(_1, _2), 32), dataEnd) { revert(0, 0) }\n copy_memory_to_memory_with_cleanup(add(_1, 32), add(array, 32), _2)\n value0 := array\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n tail := abi_encode_bytes(value0, add(headStart, 32))\n }\n}", + "id": 103, + "language": "Yul", + "name": "#utility.yul" + } + ], + "sourceMap": "264:5139:21:-:0;;;520:17;;;;;;;;;;264:5139;;;;;;", + "deployedSourceMap": "264:5139:21:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;746:23;772:16;:14;:16::i;:::-;746:42;;1136:4;1130:11;1176:14;1173:1;1168:3;1155:36;1280:1;1277;1261:14;1256:3;1239:15;1232:5;1219:63;1308:16;1361:4;1358:1;1353:3;1338:28;1387:6;1411:119;;;;1673:4;1668:3;1661:17;1411:119;1505:4;1500:3;1493:17;1781:110;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:103;;;160:51;;148:2;133:18;1781:110:21;;;;;;;;2185:2793;;;;;;;;;;-1:-1:-1;2185:2793:21;;;;;:::i;:::-;;:::i;:::-;;;1840:14:103;;1833:22;1815:41;;1803:2;1788:18;2185:2793:21;1675:187:103;1781:110:21;5314:66;1855:28;-1:-1:-1;;;;;1855:28:21;;1781:110::o;2185:2793::-;2281:4;-1:-1:-1;;;;;2358:32:21;;2350:77;;;;-1:-1:-1;;;2350:77:21;;2069:2:103;2350:77:21;;;2051:21:103;;;2088:18;;;2081:30;2147:34;2127:18;;;2120:62;2199:18;;2350:77:21;;;;;;;;;2440:26;2469:16;:14;:16::i;:::-;2440:45;-1:-1:-1;;;;;;2500:32:21;;;2496:1298;;2652:18;-1:-1:-1;;;;;2630:40:21;:18;-1:-1:-1;;;;;2630:40:21;;2622:84;;;;-1:-1:-1;;;2622:84:21;;2430:2:103;2622:84:21;;;2412:21:103;2469:2;2449:18;;;2442:30;2508:33;2488:18;;;2481:61;2559:18;;2622:84:21;2228:355:103;2622:84:21;2822:18;-1:-1:-1;;;;;2810:44:21;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2810:46:21;;;;;;;;-1:-1:-1;;2810:46:21;;;;;;;;;;;;:::i;:::-;;;2806:262;;3000:52;;-1:-1:-1;;;3000:52:21;;3072:2:103;3000:52:21;;;3054:21:103;3111:2;3091:18;;;3084:30;3150:34;3130:18;;;3123:62;-1:-1:-1;;;3201:18:103;;;3194:40;3251:19;;3000:52:21;2870:406:103;2806:262:21;2913:13;2905:53;;;;-1:-1:-1;;;2905:53:21;;3483:2:103;2905:53:21;;;3465:21:103;3522:2;3502:18;;;3495:30;3561:29;3541:18;;;3534:57;3608:18;;2905:53:21;3281:351:103;2905:53:21;-1:-1:-1;3272:125:21;;3368:10;3272:125;;;160:51:103;3181:15:21;;;;-1:-1:-1;;;;;3222:31:21;;;133:18:103;;3272:125:21;;;-1:-1:-1;;3272:125:21;;;;;;;;;;;;;;-1:-1:-1;;;;;3272:125:21;-1:-1:-1;;;3272:125:21;;;3222:190;;;3272:125;3222:190;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3180:232;;;;3435:10;3427:62;;;;-1:-1:-1;;;3427:62:21;;;;;;;:::i;:::-;3523:7;3512:27;;;;;;;;;;;;:::i;:::-;3504:67;;;;-1:-1:-1;;;3504:67:21;;4794:2:103;3504:67:21;;;4776:21:103;4833:2;4813:18;;;4806:30;4872:29;4852:18;;;4845:57;4919:18;;3504:67:21;4592:351:103;3504:67:21;3675:18;-1:-1:-1;;;;;3663:45:21;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3624:18;-1:-1:-1;;;;;3612:45:21;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;3586:196;;;;-1:-1:-1;;;3586:196:21;;5339:2:103;3586:196:21;;;5321:21:103;5378:2;5358:18;;;5351:30;5417:34;5397:18;;;5390:62;-1:-1:-1;;;5468:18:103;;;5461:34;5512:19;;3586:196:21;5137:400:103;3586:196:21;2534:1260;;2496:1298;3879:20;3901:24;3929:18;-1:-1:-1;;;;;3929:31:21;4055:9;3975:104;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3975:104:21;;;;;;;;;;;;;;-1:-1:-1;;;;;3975:104:21;-1:-1:-1;;;3975:104:21;;;3929:161;;;3975:104;3929:161;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3878:212;;;;4106:15;4101:344;;4163:2;4142:11;:18;:23;4138:296;;;4186:44;;-1:-1:-1;;;4186:44:21;;6241:2:103;4186:44:21;;;6223:21:103;6280:2;6260:18;;;6253:30;6319:34;6299:18;;;6292:62;-1:-1:-1;;;6370:18:103;;;6363:32;6412:19;;4186:44:21;6039:398:103;4138:296:21;4335:4;4322:11;4318:22;4303:37;;4395:11;4384:33;;;;;;;;;;;;:::i;:::-;4377:41;;-1:-1:-1;;;4377:41:21;;;;;;;;:::i;4138:296::-;5314:66;4539:49;;-1:-1:-1;;;;;;4539:49:21;-1:-1:-1;;;;;4539:49:21;;;;;;;;4610:28;;;;-1:-1:-1;;4610:28:21;4767:18;-1:-1:-1;;;;;4755:44:21;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4755:46:21;;;;;;;;-1:-1:-1;;4755:46:21;;;;;;;;;;;;:::i;:::-;;;4751:220;;4909:50;;-1:-1:-1;;;4909:50:21;;;;;;;:::i;4751:220::-;4853:13;-1:-1:-1;4846:20:21;;-1:-1:-1;;;4846:20:21;2185:2793;;;;;:::o;222:127:103:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:275;425:2;419:9;490:2;471:13;;-1:-1:-1;;467:27:103;455:40;;525:18;510:34;;546:22;;;507:62;504:88;;;572:18;;:::i;:::-;608:2;601:22;354:275;;-1:-1:-1;354:275:103:o;634:186::-;682:4;715:18;707:6;704:30;701:56;;;737:18;;:::i;:::-;-1:-1:-1;803:2:103;782:15;-1:-1:-1;;778:29:103;809:4;774:40;;634:186::o;825:845::-;902:6;910;963:2;951:9;942:7;938:23;934:32;931:52;;;979:1;976;969:12;931:52;1005:23;;-1:-1:-1;;;;;1057:31:103;;1047:42;;1037:70;;1103:1;1100;1093:12;1037:70;1126:5;-1:-1:-1;1182:2:103;1167:18;;1154:32;1209:18;1198:30;;1195:50;;;1241:1;1238;1231:12;1195:50;1264:22;;1317:4;1309:13;;1305:27;-1:-1:-1;1295:55:103;;1346:1;1343;1336:12;1295:55;1382:2;1369:16;1407:48;1423:31;1451:2;1423:31;:::i;:::-;1407:48;:::i;:::-;1478:2;1471:5;1464:17;1518:7;1513:2;1508;1504;1500:11;1496:20;1493:33;1490:53;;;1539:1;1536;1529:12;1490:53;1594:2;1589;1585;1581:11;1576:2;1569:5;1565:14;1552:45;1638:1;1633:2;1628;1621:5;1617:14;1613:23;1606:34;1659:5;1649:15;;;;;825:845;;;;;:::o;2588:277::-;2655:6;2708:2;2696:9;2687:7;2683:23;2679:32;2676:52;;;2724:1;2721;2714:12;2676:52;2756:9;2750:16;2809:5;2802:13;2795:21;2788:5;2785:32;2775:60;;2831:1;2828;2821:12;2775:60;2854:5;2588:277;-1:-1:-1;;;2588:277:103:o;3637:250::-;3722:1;3732:113;3746:6;3743:1;3740:13;3732:113;;;3822:11;;;3816:18;3803:11;;;3796:39;3768:2;3761:10;3732:113;;;-1:-1:-1;;3879:1:103;3861:16;;3854:27;3637:250::o;3892:287::-;4021:3;4059:6;4053:13;4075:66;4134:6;4129:3;4122:4;4114:6;4110:17;4075:66;:::i;:::-;4157:16;;;;;3892:287;-1:-1:-1;;3892:287:103:o;4184:403::-;4386:2;4368:21;;;4425:2;4405:18;;;4398:30;4464:34;4459:2;4444:18;;4437:62;-1:-1:-1;;;4530:2:103;4515:18;;4508:37;4577:3;4562:19;;4184:403::o;4948:184::-;5018:6;5071:2;5059:9;5050:7;5046:23;5042:32;5039:52;;;5087:1;5084;5077:12;5039:52;-1:-1:-1;5110:16:103;;4948:184;-1:-1:-1;4948:184:103:o;5542:270::-;5583:3;5621:5;5615:12;5648:6;5643:3;5636:19;5664:76;5733:6;5726:4;5721:3;5717:14;5710:4;5703:5;5699:16;5664:76;:::i;:::-;5794:2;5773:15;-1:-1:-1;;5769:29:103;5760:39;;;;5801:4;5756:50;;5542:270;-1:-1:-1;;5542:270:103:o;5817:217::-;5964:2;5953:9;5946:21;5927:4;5984:44;6024:2;6013:9;6009:18;6001:6;5984:44;:::i;6442:648::-;6522:6;6575:2;6563:9;6554:7;6550:23;6546:32;6543:52;;;6591:1;6588;6581:12;6543:52;6624:9;6618:16;6657:18;6649:6;6646:30;6643:50;;;6689:1;6686;6679:12;6643:50;6712:22;;6765:4;6757:13;;6753:27;-1:-1:-1;6743:55:103;;6794:1;6791;6784:12;6743:55;6823:2;6817:9;6848:48;6864:31;6892:2;6864:31;:::i;6848:48::-;6919:2;6912:5;6905:17;6959:7;6954:2;6949;6945;6941:11;6937:20;6934:33;6931:53;;;6980:1;6977;6970:12;6931:53;6993:67;7057:2;7052;7045:5;7041:14;7036:2;7032;7028:11;6993:67;:::i;:::-;7079:5;6442:648;-1:-1:-1;;;;;6442:648:103:o", + "source": "// SPDX-License-Identifier: MIT\r\n\r\npragma solidity >=0.7.0 <0.9.0;\r\npragma experimental ABIEncoderV2;\r\n\r\nimport \"../patterns/Upgradeable.sol\";\r\n\r\n/// @title WitnetProxy: upgradable delegate-proxy contract. \r\n/// @author Guillermo Díaz \r\ncontract WitnetProxy {\r\n\r\n /// Event emitted every time the implementation gets updated.\r\n event Upgraded(address indexed implementation); \r\n\r\n /// Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470).\r\n constructor () {}\r\n\r\n receive() virtual external payable {}\r\n\r\n /// Payable fallback accepts delegating calls to payable functions. \r\n fallback() external payable { /* solhint-disable no-complex-fallback */\r\n address _implementation = implementation();\r\n assembly { /* solhint-disable avoid-low-level-calls */\r\n // Gas optimized delegate call to 'implementation' contract.\r\n // Note: `msg.data`, `msg.sender` and `msg.value` will be passed over \r\n // to actual implementation of `msg.sig` within `implementation` contract.\r\n let ptr := mload(0x40)\r\n calldatacopy(ptr, 0, calldatasize())\r\n let result := delegatecall(gas(), _implementation, ptr, calldatasize(), 0, 0)\r\n let size := returndatasize()\r\n returndatacopy(ptr, 0, size)\r\n switch result\r\n case 0 { \r\n // pass back revert message:\r\n revert(ptr, size) \r\n }\r\n default {\r\n // pass back same data as returned by 'implementation' contract:\r\n return(ptr, size) \r\n }\r\n }\r\n }\r\n\r\n /// Returns proxy's current implementation address.\r\n function implementation() public view returns (address) {\r\n return __proxySlot().implementation;\r\n }\r\n\r\n /// Upgrades the `implementation` address.\r\n /// @param _newImplementation New implementation address.\r\n /// @param _initData Raw data with which new implementation will be initialized.\r\n /// @return Returns whether new implementation would be further upgradable, or not.\r\n function upgradeTo(address _newImplementation, bytes memory _initData)\r\n public returns (bool)\r\n {\r\n // New implementation cannot be null:\r\n require(_newImplementation != address(0), \"WitnetProxy: null implementation\");\r\n\r\n address _oldImplementation = implementation();\r\n if (_oldImplementation != address(0)) {\r\n // New implementation address must differ from current one:\r\n require(_newImplementation != _oldImplementation, \"WitnetProxy: nothing to upgrade\");\r\n\r\n // Assert whether current implementation is intrinsically upgradable:\r\n try Upgradeable(_oldImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n require(_isUpgradable, \"WitnetProxy: not upgradable\");\r\n } catch {\r\n revert(\"WitnetProxy: unable to check upgradability\");\r\n }\r\n\r\n // Assert whether current implementation allows `msg.sender` to upgrade the proxy:\r\n (bool _wasCalled, bytes memory _result) = _oldImplementation.delegatecall(\r\n abi.encodeWithSignature(\r\n \"isUpgradableFrom(address)\",\r\n msg.sender\r\n )\r\n );\r\n require(_wasCalled, \"WitnetProxy: uncompliant implementation\");\r\n require(abi.decode(_result, (bool)), \"WitnetProxy: not authorized\");\r\n require(\r\n Upgradeable(_oldImplementation).proxiableUUID() == Upgradeable(_newImplementation).proxiableUUID(),\r\n \"WitnetProxy: proxiableUUIDs mismatch\"\r\n );\r\n }\r\n\r\n // Initialize new implementation within proxy-context storage:\r\n (bool _wasInitialized, bytes memory _returnData) = _newImplementation.delegatecall(\r\n abi.encodeWithSignature(\r\n \"initialize(bytes)\",\r\n _initData\r\n )\r\n );\r\n if (!_wasInitialized) {\r\n if (_returnData.length < 68) {\r\n revert(\"WitnetProxy: initialization failed\");\r\n } else {\r\n assembly {\r\n _returnData := add(_returnData, 0x04)\r\n }\r\n revert(abi.decode(_returnData, (string)));\r\n }\r\n }\r\n\r\n // If all checks and initialization pass, update implementation address:\r\n __proxySlot().implementation = _newImplementation;\r\n \r\n emit Upgraded(_newImplementation);\r\n\r\n // Asserts new implementation complies w/ minimal implementation of Upgradeable interface:\r\n try Upgradeable(_newImplementation).isUpgradable() returns (bool _isUpgradable) {\r\n return _isUpgradable;\r\n }\r\n catch {\r\n revert (\"WitnetProxy: uncompliant implementation\");\r\n }\r\n }\r\n\r\n /// @dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address.\r\n function __proxySlot() private pure returns (Proxiable.ProxiableSlot storage _slot) {\r\n assembly {\r\n // bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)\r\n _slot.slot := 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc\r\n }\r\n }\r\n\r\n}\r\n", + "sourcePath": "C:\\Users\\guill\\github\\guidiaz\\witnet-solidity-bridge\\contracts\\core\\WitnetProxy.sol", + "ast": { + "absolutePath": "project:/contracts/core/WitnetProxy.sol", + "exportedSymbols": { + "ERC165": [ + 602 + ], + "IERC165": [ + 614 + ], + "Initializable": [ + 253 + ], + "Proxiable": [ + 30273 + ], + "Upgradeable": [ + 30388 + ], + "WitnetProxy": [ + 4713 + ] + }, + "id": 4714, + "license": "MIT", + "nodeType": "SourceUnit", + "nodes": [ + { + "id": 4488, + "literals": [ + "solidity", + ">=", + "0.7", + ".0", + "<", + "0.9", + ".0" + ], + "nodeType": "PragmaDirective", + "src": "35:31:21" + }, + { + "id": 4489, + "literals": [ + "experimental", + "ABIEncoderV2" + ], + "nodeType": "PragmaDirective", + "src": "68:33:21" + }, + { + "absolutePath": "project:/contracts/patterns/Upgradeable.sol", + "file": "../patterns/Upgradeable.sol", + "id": 4490, + "nameLocation": "-1:-1:-1", + "nodeType": "ImportDirective", + "scope": 4714, + "sourceUnit": 30389, + "src": "105:37:21", + "symbolAliases": [], + "unitAlias": "" + }, + { + "abstract": false, + "baseContracts": [], + "canonicalName": "WitnetProxy", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 4491, + "nodeType": "StructuredDocumentation", + "src": "146:118:21", + "text": "@title WitnetProxy: upgradable delegate-proxy contract. \n @author Guillermo Díaz " + }, + "fullyImplemented": true, + "id": 4713, + "linearizedBaseContracts": [ + 4713 + ], + "name": "WitnetProxy", + "nameLocation": "273:11:21", + "nodeType": "ContractDefinition", + "nodes": [ + { + "anonymous": false, + "documentation": { + "id": 4492, + "nodeType": "StructuredDocumentation", + "src": "294:61:21", + "text": "Event emitted every time the implementation gets updated." + }, + "eventSelector": "bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "id": 4496, + "name": "Upgraded", + "nameLocation": "367:8:21", + "nodeType": "EventDefinition", + "parameters": { + "id": 4495, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4494, + "indexed": true, + "mutability": "mutable", + "name": "implementation", + "nameLocation": "392:14:21", + "nodeType": "VariableDeclaration", + "scope": 4496, + "src": "376:30:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4493, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "376:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "375:32:21" + }, + "src": "361:47:21" + }, + { + "body": { + "id": 4500, + "nodeType": "Block", + "src": "535:2:21", + "statements": [] + }, + "documentation": { + "id": 4497, + "nodeType": "StructuredDocumentation", + "src": "418:96:21", + "text": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)." + }, + "id": 4501, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4498, + "nodeType": "ParameterList", + "parameters": [], + "src": "532:2:21" + }, + "returnParameters": { + "id": 4499, + "nodeType": "ParameterList", + "parameters": [], + "src": "535:0:21" + }, + "scope": 4713, + "src": "520:17:21", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4504, + "nodeType": "Block", + "src": "580:2:21", + "statements": [] + }, + "id": 4505, + "implemented": true, + "kind": "receive", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4502, + "nodeType": "ParameterList", + "parameters": [], + "src": "552:2:21" + }, + "returnParameters": { + "id": 4503, + "nodeType": "ParameterList", + "parameters": [], + "src": "580:0:21" + }, + "scope": 4713, + "src": "545:37:21", + "stateMutability": "payable", + "virtual": true, + "visibility": "external" + }, + { + "body": { + "id": 4515, + "nodeType": "Block", + "src": "693:1023:21", + "statements": [ + { + "assignments": [ + 4510 + ], + "declarations": [ + { + "constant": false, + "id": 4510, + "mutability": "mutable", + "name": "_implementation", + "nameLocation": "754:15:21", + "nodeType": "VariableDeclaration", + "scope": 4515, + "src": "746:23:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4509, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "746:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4513, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4511, + "name": "implementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4527, + "src": "772:14:21", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 4512, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "772:16:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "746:42:21" + }, + { + "AST": { + "nativeSrc": "808:901:21", + "nodeType": "YulBlock", + "src": "808:901:21", + "statements": [ + { + "nativeSrc": "1119:22:21", + "nodeType": "YulVariableDeclaration", + "src": "1119:22:21", + "value": { + "arguments": [ + { + "kind": "number", + "nativeSrc": "1136:4:21", + "nodeType": "YulLiteral", + "src": "1136:4:21", + "type": "", + "value": "0x40" + } + ], + "functionName": { + "name": "mload", + "nativeSrc": "1130:5:21", + "nodeType": "YulIdentifier", + "src": "1130:5:21" + }, + "nativeSrc": "1130:11:21", + "nodeType": "YulFunctionCall", + "src": "1130:11:21" + }, + "variables": [ + { + "name": "ptr", + "nativeSrc": "1123:3:21", + "nodeType": "YulTypedName", + "src": "1123:3:21", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "1168:3:21", + "nodeType": "YulIdentifier", + "src": "1168:3:21" + }, + { + "kind": "number", + "nativeSrc": "1173:1:21", + "nodeType": "YulLiteral", + "src": "1173:1:21", + "type": "", + "value": "0" + }, + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nativeSrc": "1176:12:21", + "nodeType": "YulIdentifier", + "src": "1176:12:21" + }, + "nativeSrc": "1176:14:21", + "nodeType": "YulFunctionCall", + "src": "1176:14:21" + } + ], + "functionName": { + "name": "calldatacopy", + "nativeSrc": "1155:12:21", + "nodeType": "YulIdentifier", + "src": "1155:12:21" + }, + "nativeSrc": "1155:36:21", + "nodeType": "YulFunctionCall", + "src": "1155:36:21" + }, + "nativeSrc": "1155:36:21", + "nodeType": "YulExpressionStatement", + "src": "1155:36:21" + }, + { + "nativeSrc": "1205:77:21", + "nodeType": "YulVariableDeclaration", + "src": "1205:77:21", + "value": { + "arguments": [ + { + "arguments": [], + "functionName": { + "name": "gas", + "nativeSrc": "1232:3:21", + "nodeType": "YulIdentifier", + "src": "1232:3:21" + }, + "nativeSrc": "1232:5:21", + "nodeType": "YulFunctionCall", + "src": "1232:5:21" + }, + { + "name": "_implementation", + "nativeSrc": "1239:15:21", + "nodeType": "YulIdentifier", + "src": "1239:15:21" + }, + { + "name": "ptr", + "nativeSrc": "1256:3:21", + "nodeType": "YulIdentifier", + "src": "1256:3:21" + }, + { + "arguments": [], + "functionName": { + "name": "calldatasize", + "nativeSrc": "1261:12:21", + "nodeType": "YulIdentifier", + "src": "1261:12:21" + }, + "nativeSrc": "1261:14:21", + "nodeType": "YulFunctionCall", + "src": "1261:14:21" + }, + { + "kind": "number", + "nativeSrc": "1277:1:21", + "nodeType": "YulLiteral", + "src": "1277:1:21", + "type": "", + "value": "0" + }, + { + "kind": "number", + "nativeSrc": "1280:1:21", + "nodeType": "YulLiteral", + "src": "1280:1:21", + "type": "", + "value": "0" + } + ], + "functionName": { + "name": "delegatecall", + "nativeSrc": "1219:12:21", + "nodeType": "YulIdentifier", + "src": "1219:12:21" + }, + "nativeSrc": "1219:63:21", + "nodeType": "YulFunctionCall", + "src": "1219:63:21" + }, + "variables": [ + { + "name": "result", + "nativeSrc": "1209:6:21", + "nodeType": "YulTypedName", + "src": "1209:6:21", + "type": "" + } + ] + }, + { + "nativeSrc": "1296:28:21", + "nodeType": "YulVariableDeclaration", + "src": "1296:28:21", + "value": { + "arguments": [], + "functionName": { + "name": "returndatasize", + "nativeSrc": "1308:14:21", + "nodeType": "YulIdentifier", + "src": "1308:14:21" + }, + "nativeSrc": "1308:16:21", + "nodeType": "YulFunctionCall", + "src": "1308:16:21" + }, + "variables": [ + { + "name": "size", + "nativeSrc": "1300:4:21", + "nodeType": "YulTypedName", + "src": "1300:4:21", + "type": "" + } + ] + }, + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "1353:3:21", + "nodeType": "YulIdentifier", + "src": "1353:3:21" + }, + { + "kind": "number", + "nativeSrc": "1358:1:21", + "nodeType": "YulLiteral", + "src": "1358:1:21", + "type": "", + "value": "0" + }, + { + "name": "size", + "nativeSrc": "1361:4:21", + "nodeType": "YulIdentifier", + "src": "1361:4:21" + } + ], + "functionName": { + "name": "returndatacopy", + "nativeSrc": "1338:14:21", + "nodeType": "YulIdentifier", + "src": "1338:14:21" + }, + "nativeSrc": "1338:28:21", + "nodeType": "YulFunctionCall", + "src": "1338:28:21" + }, + "nativeSrc": "1338:28:21", + "nodeType": "YulExpressionStatement", + "src": "1338:28:21" + }, + { + "cases": [ + { + "body": { + "nativeSrc": "1419:111:21", + "nodeType": "YulBlock", + "src": "1419:111:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "1500:3:21", + "nodeType": "YulIdentifier", + "src": "1500:3:21" + }, + { + "name": "size", + "nativeSrc": "1505:4:21", + "nodeType": "YulIdentifier", + "src": "1505:4:21" + } + ], + "functionName": { + "name": "revert", + "nativeSrc": "1493:6:21", + "nodeType": "YulIdentifier", + "src": "1493:6:21" + }, + "nativeSrc": "1493:17:21", + "nodeType": "YulFunctionCall", + "src": "1493:17:21" + }, + "nativeSrc": "1493:17:21", + "nodeType": "YulExpressionStatement", + "src": "1493:17:21" + } + ] + }, + "nativeSrc": "1411:119:21", + "nodeType": "YulCase", + "src": "1411:119:21", + "value": { + "kind": "number", + "nativeSrc": "1416:1:21", + "nodeType": "YulLiteral", + "src": "1416:1:21", + "type": "", + "value": "0" + } + }, + { + "body": { + "nativeSrc": "1556:142:21", + "nodeType": "YulBlock", + "src": "1556:142:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "name": "ptr", + "nativeSrc": "1668:3:21", + "nodeType": "YulIdentifier", + "src": "1668:3:21" + }, + { + "name": "size", + "nativeSrc": "1673:4:21", + "nodeType": "YulIdentifier", + "src": "1673:4:21" + } + ], + "functionName": { + "name": "return", + "nativeSrc": "1661:6:21", + "nodeType": "YulIdentifier", + "src": "1661:6:21" + }, + "nativeSrc": "1661:17:21", + "nodeType": "YulFunctionCall", + "src": "1661:17:21" + }, + "nativeSrc": "1661:17:21", + "nodeType": "YulExpressionStatement", + "src": "1661:17:21" + } + ] + }, + "nativeSrc": "1548:150:21", + "nodeType": "YulCase", + "src": "1548:150:21", + "value": "default" + } + ], + "expression": { + "name": "result", + "nativeSrc": "1387:6:21", + "nodeType": "YulIdentifier", + "src": "1387:6:21" + }, + "nativeSrc": "1380:318:21", + "nodeType": "YulSwitch", + "src": "1380:318:21" + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 4510, + "isOffset": false, + "isSlot": false, + "src": "1239:15:21", + "valueSize": 1 + } + ], + "id": 4514, + "nodeType": "InlineAssembly", + "src": "799:910:21" + } + ] + }, + "documentation": { + "id": 4506, + "nodeType": "StructuredDocumentation", + "src": "590:69:21", + "text": "Payable fallback accepts delegating calls to payable functions. " + }, + "id": 4516, + "implemented": true, + "kind": "fallback", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4507, + "nodeType": "ParameterList", + "parameters": [], + "src": "673:2:21" + }, + "returnParameters": { + "id": 4508, + "nodeType": "ParameterList", + "parameters": [], + "src": "693:0:21" + }, + "scope": 4713, + "src": "665:1051:21", + "stateMutability": "payable", + "virtual": false, + "visibility": "external" + }, + { + "body": { + "id": 4526, + "nodeType": "Block", + "src": "1837:54:21", + "statements": [ + { + "expression": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4522, + "name": "__proxySlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4712, + "src": "1855:11:21", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$30244_storage_ptr_$", + "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)" + } + }, + "id": 4523, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1855:13:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_ProxiableSlot_$30244_storage_ptr", + "typeString": "struct Proxiable.ProxiableSlot storage pointer" + } + }, + "id": 4524, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "1869:14:21", + "memberName": "implementation", + "nodeType": "MemberAccess", + "referencedDeclaration": 30239, + "src": "1855:28:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 4521, + "id": 4525, + "nodeType": "Return", + "src": "1848:35:21" + } + ] + }, + "documentation": { + "id": 4517, + "nodeType": "StructuredDocumentation", + "src": "1724:51:21", + "text": "Returns proxy's current implementation address." + }, + "functionSelector": "5c60da1b", + "id": 4527, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "implementation", + "nameLocation": "1790:14:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4518, + "nodeType": "ParameterList", + "parameters": [], + "src": "1804:2:21" + }, + "returnParameters": { + "id": 4521, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4520, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4527, + "src": "1828:7:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4519, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1828:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1827:9:21" + }, + "scope": 4713, + "src": "1781:110:21", + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4702, + "nodeType": "Block", + "src": "2292:2686:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4543, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4538, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "2358:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4541, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2388:1:21", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 4540, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2380:7:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4539, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2380:7:21", + "typeDescriptions": {} + } + }, + "id": 4542, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2380:10:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2358:32:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e", + "id": 4544, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2392:34:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a", + "typeString": "literal_string \"WitnetProxy: null implementation\"" + }, + "value": "WitnetProxy: null implementation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a", + "typeString": "literal_string \"WitnetProxy: null implementation\"" + } + ], + "id": 4537, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "2350:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4545, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2350:77:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4546, + "nodeType": "ExpressionStatement", + "src": "2350:77:21" + }, + { + "assignments": [ + 4548 + ], + "declarations": [ + { + "constant": false, + "id": 4548, + "mutability": "mutable", + "name": "_oldImplementation", + "nameLocation": "2448:18:21", + "nodeType": "VariableDeclaration", + "scope": 4702, + "src": "2440:26:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4547, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2440:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 4551, + "initialValue": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4549, + "name": "implementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4527, + "src": "2469:14:21", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", + "typeString": "function () view returns (address)" + } + }, + "id": 4550, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2469:16:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "2440:45:21" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4557, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4552, + "name": "_oldImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4548, + "src": "2500:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 4555, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2530:1:21", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + } + ], + "id": 4554, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "2522:7:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 4553, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2522:7:21", + "typeDescriptions": {} + } + }, + "id": 4556, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2522:10:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2500:32:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4633, + "nodeType": "IfStatement", + "src": "2496:1298:21", + "trueBody": { + "id": 4632, + "nodeType": "Block", + "src": "2534:1260:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 4561, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 4559, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "2630:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "id": 4560, + "name": "_oldImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4548, + "src": "2652:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "2630:40:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465", + "id": 4562, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2672:33:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084", + "typeString": "literal_string \"WitnetProxy: nothing to upgrade\"" + }, + "value": "WitnetProxy: nothing to upgrade" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084", + "typeString": "literal_string \"WitnetProxy: nothing to upgrade\"" + } + ], + "id": 4558, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "2622:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4563, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2622:84:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4564, + "nodeType": "ExpressionStatement", + "src": "2622:84:21" + }, + { + "clauses": [ + { + "block": { + "id": 4578, + "nodeType": "Block", + "src": "2886:88:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 4574, + "name": "_isUpgradable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4571, + "src": "2913:13:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65", + "id": 4575, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2928:29:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f", + "typeString": "literal_string \"WitnetProxy: not upgradable\"" + }, + "value": "WitnetProxy: not upgradable" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f", + "typeString": "literal_string \"WitnetProxy: not upgradable\"" + } + ], + "id": 4573, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "2905:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2905:53:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4577, + "nodeType": "ExpressionStatement", + "src": "2905:53:21" + } + ] + }, + "errorName": "", + "id": 4579, + "nodeType": "TryCatchClause", + "parameters": { + "id": 4572, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4571, + "mutability": "mutable", + "name": "_isUpgradable", + "nameLocation": "2871:13:21", + "nodeType": "VariableDeclaration", + "scope": 4579, + "src": "2866:18:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4570, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2866:4:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2865:20:21" + }, + "src": "2857:117:21" + }, + { + "block": { + "id": 4584, + "nodeType": "Block", + "src": "2981:87:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b207570677261646162696c697479", + "id": 4581, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3007:44:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc", + "typeString": "literal_string \"WitnetProxy: unable to check upgradability\"" + }, + "value": "WitnetProxy: unable to check upgradability" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc", + "typeString": "literal_string \"WitnetProxy: unable to check upgradability\"" + } + ], + "id": 4580, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "3000:6:21", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4582, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3000:52:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4583, + "nodeType": "ExpressionStatement", + "src": "3000:52:21" + } + ] + }, + "errorName": "", + "id": 4585, + "nodeType": "TryCatchClause", + "src": "2975:93:21" + } + ], + "externalCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 4566, + "name": "_oldImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4548, + "src": "2822:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4565, + "name": "Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 30388, + "src": "2810:11:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Upgradeable_$30388_$", + "typeString": "type(contract Upgradeable)" + } + }, + "id": 4567, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2810:31:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Upgradeable_$30388", + "typeString": "contract Upgradeable" + } + }, + "id": 4568, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "2842:12:21", + "memberName": "isUpgradable", + "nodeType": "MemberAccess", + "referencedDeclaration": 30367, + "src": "2810:44:21", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", + "typeString": "function () view external returns (bool)" + } + }, + "id": 4569, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2810:46:21", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4586, + "nodeType": "TryStatement", + "src": "2806:262:21" + }, + { + "assignments": [ + 4588, + 4590 + ], + "declarations": [ + { + "constant": false, + "id": 4588, + "mutability": "mutable", + "name": "_wasCalled", + "nameLocation": "3186:10:21", + "nodeType": "VariableDeclaration", + "scope": 4632, + "src": "3181:15:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4587, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3181:4:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4590, + "mutability": "mutable", + "name": "_result", + "nameLocation": "3211:7:21", + "nodeType": "VariableDeclaration", + "scope": 4632, + "src": "3198:20:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4589, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3198:5:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 4600, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "697355706772616461626c6546726f6d286164647265737329", + "id": 4595, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3318:27:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7", + "typeString": "literal_string \"isUpgradableFrom(address)\"" + }, + "value": "isUpgradableFrom(address)" + }, + { + "expression": { + "id": 4596, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967281, + "src": "3368:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 4597, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3372:6:21", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "3368:10:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7", + "typeString": "literal_string \"isUpgradableFrom(address)\"" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 4593, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "3272:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4594, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3276:19:21", + "memberName": "encodeWithSignature", + "nodeType": "MemberAccess", + "src": "3272:23:21", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes memory)" + } + }, + "id": 4598, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3272:125:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4591, + "name": "_oldImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4548, + "src": "3222:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4592, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3241:12:21", + "memberName": "delegatecall", + "nodeType": "MemberAccess", + "src": "3222:31:21", + "typeDescriptions": { + "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) returns (bool,bytes memory)" + } + }, + "id": 4599, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3222:190:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3180:232:21" + }, + { + "expression": { + "arguments": [ + { + "id": 4602, + "name": "_wasCalled", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4588, + "src": "3435:10:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e", + "id": 4603, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3447:41:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4", + "typeString": "literal_string \"WitnetProxy: uncompliant implementation\"" + }, + "value": "WitnetProxy: uncompliant implementation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4", + "typeString": "literal_string \"WitnetProxy: uncompliant implementation\"" + } + ], + "id": 4601, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "3427:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3427:62:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4605, + "nodeType": "ExpressionStatement", + "src": "3427:62:21" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4609, + "name": "_result", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4590, + "src": "3523:7:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 4611, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3533:4:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + }, + "typeName": { + "id": 4610, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3533:4:21", + "typeDescriptions": {} + } + } + ], + "id": 4612, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3532:6:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_bool_$", + "typeString": "type(bool)" + } + ], + "expression": { + "id": 4607, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "3512:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4608, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3516:6:21", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "3512:10:21", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4613, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3512:27:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564", + "id": 4614, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3541:29:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2", + "typeString": "literal_string \"WitnetProxy: not authorized\"" + }, + "value": "WitnetProxy: not authorized" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2", + "typeString": "literal_string \"WitnetProxy: not authorized\"" + } + ], + "id": 4606, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "3504:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4615, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3504:67:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4616, + "nodeType": "ExpressionStatement", + "src": "3504:67:21" + }, + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "id": 4628, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 4619, + "name": "_oldImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4548, + "src": "3624:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4618, + "name": "Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 30388, + "src": "3612:11:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Upgradeable_$30388_$", + "typeString": "type(contract Upgradeable)" + } + }, + "id": 4620, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3612:31:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Upgradeable_$30388", + "typeString": "contract Upgradeable" + } + }, + "id": 4621, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3644:13:21", + "memberName": "proxiableUUID", + "nodeType": "MemberAccess", + "referencedDeclaration": 30237, + "src": "3612:45:21", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", + "typeString": "function () view external returns (bytes32)" + } + }, + "id": 4622, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3612:47:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 4624, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "3675:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4623, + "name": "Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 30388, + "src": "3663:11:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Upgradeable_$30388_$", + "typeString": "type(contract Upgradeable)" + } + }, + "id": 4625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3663:31:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Upgradeable_$30388", + "typeString": "contract Upgradeable" + } + }, + "id": 4626, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3695:13:21", + "memberName": "proxiableUUID", + "nodeType": "MemberAccess", + "referencedDeclaration": 30237, + "src": "3663:45:21", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", + "typeString": "function () view external returns (bytes32)" + } + }, + "id": 4627, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3663:47:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "src": "3612:98:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d61746368", + "id": 4629, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3729:38:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8", + "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\"" + }, + "value": "WitnetProxy: proxiableUUIDs mismatch" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8", + "typeString": "literal_string \"WitnetProxy: proxiableUUIDs mismatch\"" + } + ], + "id": 4617, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967278, + 4294967278 + ], + "referencedDeclaration": 4294967278, + "src": "3586:7:21", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (bool,string memory) pure" + } + }, + "id": 4630, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3586:196:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4631, + "nodeType": "ExpressionStatement", + "src": "3586:196:21" + } + ] + } + }, + { + "assignments": [ + 4635, + 4637 + ], + "declarations": [ + { + "constant": false, + "id": 4635, + "mutability": "mutable", + "name": "_wasInitialized", + "nameLocation": "3884:15:21", + "nodeType": "VariableDeclaration", + "scope": 4702, + "src": "3879:20:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4634, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3879:4:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4637, + "mutability": "mutable", + "name": "_returnData", + "nameLocation": "3914:11:21", + "nodeType": "VariableDeclaration", + "scope": 4702, + "src": "3901:24:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4636, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3901:5:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "id": 4646, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "696e697469616c697a6528627974657329", + "id": 4642, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4017:19:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26", + "typeString": "literal_string \"initialize(bytes)\"" + }, + "value": "initialize(bytes)" + }, + { + "id": 4643, + "name": "_initData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4532, + "src": "4055:9:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26", + "typeString": "literal_string \"initialize(bytes)\"" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4640, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "3975:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4641, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3979:19:21", + "memberName": "encodeWithSignature", + "nodeType": "MemberAccess", + "src": "3975:23:21", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", + "typeString": "function (string memory) pure returns (bytes memory)" + } + }, + "id": 4644, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3975:104:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 4638, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "3929:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4639, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3948:12:21", + "memberName": "delegatecall", + "nodeType": "MemberAccess", + "src": "3929:31:21", + "typeDescriptions": { + "typeIdentifier": "t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "function (bytes memory) returns (bool,bytes memory)" + } + }, + "id": 4645, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3929:161:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", + "typeString": "tuple(bool,bytes memory)" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3878:212:21" + }, + { + "condition": { + "id": 4648, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "4105:16:21", + "subExpression": { + "id": 4647, + "name": "_wasInitialized", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4635, + "src": "4106:15:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4672, + "nodeType": "IfStatement", + "src": "4101:344:21", + "trueBody": { + "id": 4671, + "nodeType": "Block", + "src": "4123:322:21", + "statements": [ + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 4652, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "expression": { + "id": 4649, + "name": "_returnData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4637, + "src": "4142:11:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + "id": 4650, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4154:6:21", + "memberName": "length", + "nodeType": "MemberAccess", + "src": "4142:18:21", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "hexValue": "3638", + "id": 4651, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4163:2:21", + "typeDescriptions": { + "typeIdentifier": "t_rational_68_by_1", + "typeString": "int_const 68" + }, + "value": "68" + }, + "src": "4142:23:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "falseBody": { + "id": 4669, + "nodeType": "Block", + "src": "4252:182:21", + "statements": [ + { + "AST": { + "nativeSrc": "4280:79:21", + "nodeType": "YulBlock", + "src": "4280:79:21", + "statements": [ + { + "nativeSrc": "4303:37:21", + "nodeType": "YulAssignment", + "src": "4303:37:21", + "value": { + "arguments": [ + { + "name": "_returnData", + "nativeSrc": "4322:11:21", + "nodeType": "YulIdentifier", + "src": "4322:11:21" + }, + { + "kind": "number", + "nativeSrc": "4335:4:21", + "nodeType": "YulLiteral", + "src": "4335:4:21", + "type": "", + "value": "0x04" + } + ], + "functionName": { + "name": "add", + "nativeSrc": "4318:3:21", + "nodeType": "YulIdentifier", + "src": "4318:3:21" + }, + "nativeSrc": "4318:22:21", + "nodeType": "YulFunctionCall", + "src": "4318:22:21" + }, + "variableNames": [ + { + "name": "_returnData", + "nativeSrc": "4303:11:21", + "nodeType": "YulIdentifier", + "src": "4303:11:21" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 4637, + "isOffset": false, + "isSlot": false, + "src": "4303:11:21", + "valueSize": 1 + }, + { + "declaration": 4637, + "isOffset": false, + "isSlot": false, + "src": "4322:11:21", + "valueSize": 1 + } + ], + "id": 4658, + "nodeType": "InlineAssembly", + "src": "4271:88:21" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 4662, + "name": "_returnData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4637, + "src": "4395:11:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 4664, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "4409:6:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + }, + "typeName": { + "id": 4663, + "name": "string", + "nodeType": "ElementaryTypeName", + "src": "4409:6:21", + "typeDescriptions": {} + } + } + ], + "id": 4665, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4408:8:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_string_storage_ptr_$", + "typeString": "type(string storage pointer)" + } + ], + "expression": { + "id": 4660, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4294967295, + "src": "4384:3:21", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 4661, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4388:6:21", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "4384:10:21", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 4666, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4384:33:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_string_memory_ptr", + "typeString": "string memory" + } + ], + "id": 4659, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "4377:6:21", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4667, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4377:41:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4668, + "nodeType": "ExpressionStatement", + "src": "4377:41:21" + } + ] + }, + "id": 4670, + "nodeType": "IfStatement", + "src": "4138:296:21", + "trueBody": { + "id": 4657, + "nodeType": "Block", + "src": "4167:79:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e657450726f78793a20696e697469616c697a6174696f6e206661696c6564", + "id": 4654, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4193:36:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604", + "typeString": "literal_string \"WitnetProxy: initialization failed\"" + }, + "value": "WitnetProxy: initialization failed" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_1a3a4ea76e2e68e14fc5328c93896fc2e23cf33c9f37d13d21f0003bedc2d604", + "typeString": "literal_string \"WitnetProxy: initialization failed\"" + } + ], + "id": 4653, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "4186:6:21", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4655, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4186:44:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4656, + "nodeType": "ExpressionStatement", + "src": "4186:44:21" + } + ] + } + } + ] + } + }, + { + "expression": { + "id": 4677, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 4673, + "name": "__proxySlot", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4712, + "src": "4539:11:21", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$30244_storage_ptr_$", + "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)" + } + }, + "id": 4674, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4539:13:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_ProxiableSlot_$30244_storage_ptr", + "typeString": "struct Proxiable.ProxiableSlot storage pointer" + } + }, + "id": 4675, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": true, + "memberLocation": "4553:14:21", + "memberName": "implementation", + "nodeType": "MemberAccess", + "referencedDeclaration": 30239, + "src": "4539:28:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 4676, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "4570:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "4539:49:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "id": 4678, + "nodeType": "ExpressionStatement", + "src": "4539:49:21" + }, + { + "eventCall": { + "arguments": [ + { + "id": 4680, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "4619:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4679, + "name": "Upgraded", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4496, + "src": "4610:8:21", + "typeDescriptions": { + "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", + "typeString": "function (address)" + } + }, + "id": 4681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4610:28:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4682, + "nodeType": "EmitStatement", + "src": "4605:33:21" + }, + { + "clauses": [ + { + "block": { + "id": 4693, + "nodeType": "Block", + "src": "4831:47:21", + "statements": [ + { + "expression": { + "id": 4691, + "name": "_isUpgradable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4689, + "src": "4853:13:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "functionReturnParameters": 4536, + "id": 4692, + "nodeType": "Return", + "src": "4846:20:21" + } + ] + }, + "errorName": "", + "id": 4694, + "nodeType": "TryCatchClause", + "parameters": { + "id": 4690, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4689, + "mutability": "mutable", + "name": "_isUpgradable", + "nameLocation": "4816:13:21", + "nodeType": "VariableDeclaration", + "scope": 4694, + "src": "4811:18:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4688, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "4811:4:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "4810:20:21" + }, + "src": "4802:76:21" + }, + { + "block": { + "id": 4699, + "nodeType": "Block", + "src": "4894:77:21", + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "5769746e657450726f78793a20756e636f6d706c69616e7420696d706c656d656e746174696f6e", + "id": 4696, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4917:41:21", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4", + "typeString": "literal_string \"WitnetProxy: uncompliant implementation\"" + }, + "value": "WitnetProxy: uncompliant implementation" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_af0aea8d1824a1e38021567a37dc01337985e80f2aafd4c71622592f865dd0f4", + "typeString": "literal_string \"WitnetProxy: uncompliant implementation\"" + } + ], + "id": 4695, + "name": "revert", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 4294967277, + 4294967277 + ], + "referencedDeclaration": 4294967277, + "src": "4909:6:21", + "typeDescriptions": { + "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory) pure" + } + }, + "id": 4697, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4909:50:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 4698, + "nodeType": "ExpressionStatement", + "src": "4909:50:21" + } + ] + }, + "errorName": "", + "id": 4700, + "nodeType": "TryCatchClause", + "src": "4888:83:21" + } + ], + "externalCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "id": 4684, + "name": "_newImplementation", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 4530, + "src": "4767:18:21", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 4683, + "name": "Upgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 30388, + "src": "4755:11:21", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Upgradeable_$30388_$", + "typeString": "type(contract Upgradeable)" + } + }, + "id": 4685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4755:31:21", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Upgradeable_$30388", + "typeString": "contract Upgradeable" + } + }, + "id": 4686, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4787:12:21", + "memberName": "isUpgradable", + "nodeType": "MemberAccess", + "referencedDeclaration": 30367, + "src": "4755:44:21", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", + "typeString": "function () view external returns (bool)" + } + }, + "id": 4687, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4755:46:21", + "tryCall": true, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 4701, + "nodeType": "TryStatement", + "src": "4751:220:21" + } + ] + }, + "documentation": { + "id": 4528, + "nodeType": "StructuredDocumentation", + "src": "1899:280:21", + "text": "Upgrades the `implementation` address.\n @param _newImplementation New implementation address.\n @param _initData Raw data with which new implementation will be initialized.\n @return Returns whether new implementation would be further upgradable, or not." + }, + "functionSelector": "6fbc15e9", + "id": 4703, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "upgradeTo", + "nameLocation": "2194:9:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4533, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4530, + "mutability": "mutable", + "name": "_newImplementation", + "nameLocation": "2212:18:21", + "nodeType": "VariableDeclaration", + "scope": 4703, + "src": "2204:26:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 4529, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2204:7:21", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 4532, + "mutability": "mutable", + "name": "_initData", + "nameLocation": "2245:9:21", + "nodeType": "VariableDeclaration", + "scope": 4703, + "src": "2232:22:21", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 4531, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "2232:5:21", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "2203:52:21" + }, + "returnParameters": { + "id": 4536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4535, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 4703, + "src": "2281:4:21", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 4534, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2281:4:21", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "2280:6:21" + }, + "scope": 4713, + "src": "2185:2793:21", + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "body": { + "id": 4711, + "nodeType": "Block", + "src": "5185:213:21", + "statements": [ + { + "AST": { + "nativeSrc": "5205:186:21", + "nodeType": "YulBlock", + "src": "5205:186:21", + "statements": [ + { + "nativeSrc": "5300:80:21", + "nodeType": "YulAssignment", + "src": "5300:80:21", + "value": { + "kind": "number", + "nativeSrc": "5314:66:21", + "nodeType": "YulLiteral", + "src": "5314:66:21", + "type": "", + "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" + }, + "variableNames": [ + { + "name": "_slot.slot", + "nativeSrc": "5300:10:21", + "nodeType": "YulIdentifier", + "src": "5300:10:21" + } + ] + } + ] + }, + "evmVersion": "paris", + "externalReferences": [ + { + "declaration": 4708, + "isOffset": false, + "isSlot": true, + "src": "5300:10:21", + "suffix": "slot", + "valueSize": 1 + } + ], + "id": 4710, + "nodeType": "InlineAssembly", + "src": "5196:195:21" + } + ] + }, + "documentation": { + "id": 4704, + "nodeType": "StructuredDocumentation", + "src": "4986:109:21", + "text": "@dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address." + }, + "id": 4712, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "__proxySlot", + "nameLocation": "5110:11:21", + "nodeType": "FunctionDefinition", + "parameters": { + "id": 4705, + "nodeType": "ParameterList", + "parameters": [], + "src": "5121:2:21" + }, + "returnParameters": { + "id": 4709, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 4708, + "mutability": "mutable", + "name": "_slot", + "nameLocation": "5178:5:21", + "nodeType": "VariableDeclaration", + "scope": 4712, + "src": "5146:37:21", + "stateVariable": false, + "storageLocation": "storage", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ProxiableSlot_$30244_storage_ptr", + "typeString": "struct Proxiable.ProxiableSlot" + }, + "typeName": { + "id": 4707, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 4706, + "name": "Proxiable.ProxiableSlot", + "nameLocations": [ + "5146:9:21", + "5156:13:21" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 30244, + "src": "5146:23:21" + }, + "referencedDeclaration": 30244, + "src": "5146:23:21", + "typeDescriptions": { + "typeIdentifier": "t_struct$_ProxiableSlot_$30244_storage_ptr", + "typeString": "struct Proxiable.ProxiableSlot" + } + }, + "visibility": "internal" + } + ], + "src": "5145:39:21" + }, + "scope": 4713, + "src": "5101:297:21", + "stateMutability": "pure", + "virtual": false, + "visibility": "private" + } + ], + "scope": 4714, + "src": "264:5139:21", + "usedErrors": [], + "usedEvents": [ + 4496 + ] + } + ], + "src": "35:5370:21" + }, + "compiler": { + "name": "solc", + "version": "0.8.25+commit.b61c2a91.Emscripten.clang" + }, + "networks": { + "5777": { + "events": {}, + "links": {}, + "address": "0xC32CeF95b3AeF472088B6d3c2a90DC2a117654FB", + "transactionHash": "0x2c68e14a10a4ce21ab89c01188d70a6b81ea88ca24dfcc6daaf666bd63145c82" + } + }, + "schemaVersion": "3.4.16", + "updatedAt": "2024-10-20T09:42:12.841Z", + "devdoc": { + "author": "Guillermo Díaz ", + "kind": "dev", + "methods": { + "upgradeTo(address,bytes)": { + "params": { + "_initData": "Raw data with which new implementation will be initialized.", + "_newImplementation": "New implementation address." + }, + "returns": { + "_0": "Returns whether new implementation would be further upgradable, or not." + } + } + }, + "title": "WitnetProxy: upgradable delegate-proxy contract. ", + "version": 1 + }, + "userdoc": { + "events": { + "Upgraded(address)": { + "notice": "Event emitted every time the implementation gets updated." + } + }, + "kind": "user", + "methods": { + "constructor": { + "notice": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)." + }, + "implementation()": { + "notice": "Returns proxy's current implementation address." + }, + "upgradeTo(address,bytes)": { + "notice": "Upgrades the `implementation` address." + } + }, + "version": 1 + } + } \ No newline at end of file diff --git a/migrations/scripts/1_base.js b/migrations/scripts/1_base.js new file mode 100644 index 00000000..c8d00f75 --- /dev/null +++ b/migrations/scripts/1_base.js @@ -0,0 +1,59 @@ +const ethUtils = require("ethereumjs-util") +const fs = require("fs") +const settings = require("../../settings") +const utils = require("../../src/utils") + +const WitnetDeployer = artifacts.require("WitnetDeployer") + +module.exports = async function (truffleDeployer, network, [,,, master]) { + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") + if (!addresses[network]) addresses[network] = {}; + + const deployerAddr = utils.getNetworkBaseArtifactAddress(network, addresses, "WitnetDeployer") + if (utils.isNullAddress(deployerAddr) || (await web3.eth.getCode(deployerAddr)).length < 3) { + // Settle WitnetDeployer bytecode and source code as to guarantee + // salted addresses remain as expected no matter if the solc version + // is changed in migrations/witnet.settings.js + const impl = settings.getArtifacts(network).WitnetDeployer; + utils.traceHeader("Defrosted 'WitnetDeployer'") + fs.writeFileSync( + `build/contracts/${impl}.json`, + fs.readFileSync(`migrations/frosts/${impl}.json`), + { encoding: "utf8", flag: "w" } + ) + const WitnetDeployer = artifacts.require(impl) + const metadata = JSON.parse(WitnetDeployer.metadata) + console.info(" ", "> compiler: ", metadata.compiler.version) + console.info(" ", "> compilation target:", metadata.settings.compilationTarget) + console.info(" ", "> optimizer: ", JSON.stringify(metadata.settings.optimizer)) + console.info(" ", "> evm version: ", metadata.settings.evmVersion.toUpperCase()) + console.info(" ", "> artifact codehash: ", web3.utils.soliditySha3(WitnetDeployer.toJSON().deployedBytecode)) + + await truffleDeployer.deploy(WitnetDeployer, { + from: settings.getSpecs(network)?.WitnetDeployer?.from || web3.utils.toChecksumAddress(master), + }) + addresses[network].WitnetDeployer = WitnetDeployer.address + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + + } else { + WitnetDeployer.address = addresses[network].WitnetDeployer; + utils.traceHeader("Deployed 'WitnetDeployer'") + console.info(" ", "> contract address: \x1b[95m", WitnetDeployer.address, "\x1b[0m") + console.info() + } + + // Settle WitnetDeployer bytecode and source code as to guarantee + // that proxified base artifacts can get automatically verified + utils.traceHeader("Defrosting 'WitnetProxy'") + fs.writeFileSync( + `build/contracts/WitnetProxy.json`, + fs.readFileSync(`migrations/frosts/WitnetProxy.json`), + { encoding: "utf8", flag: "w" } + ) + const WitnetProxy = artifacts.require("WitnetProxy") + const metadata = JSON.parse(WitnetProxy.metadata) + console.info(" ", "> compiler: ", metadata.compiler.version) + console.info(" ", "> optimizer: ", JSON.stringify(metadata.settings.optimizer)) + console.info(" ", "> evm version: ", metadata.settings.evmVersion.toUpperCase()) + console.info(" ", "> artifact codehash: ", web3.utils.soliditySha3(WitnetProxy.toJSON().deployedBytecode)) +} diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js deleted file mode 100644 index 19346749..00000000 --- a/migrations/scripts/1_deployer.js +++ /dev/null @@ -1,51 +0,0 @@ -const settings = require("../../settings") -const utils = require("../../src/utils") - -const WitnetDeployer = artifacts.require("WitnetDeployer") -const WitnetProxy = artifacts.require("WitnetProxy") - -module.exports = async function (deployer, network, [,,, master]) { - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {} - - const factoryAddr = addresses[network]?.WitnetDeployer || addresses?.default?.WitnetDeployer || "" - if ( - utils.isNullAddress(factoryAddr) || - (await web3.eth.getCode(factoryAddr)).length < 3 - ) { - const WitnetDeployerImpl = artifacts.require(settings.getArtifacts(network).WitnetDeployer) - await deployer.deploy(WitnetDeployerImpl, { - from: settings.getSpecs(network)?.WitnetDeployer?.from || web3.utils.toChecksumAddress(master), - }) - const factory = await WitnetDeployerImpl.deployed() - if (factory.address !== addresses?.default?.WitnetDeployer) { - addresses[network].WitnetDeployer = factory.address - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - } - } - WitnetDeployer.address = factory.address - } else { - const factory = await WitnetDeployer.at(factoryAddr) - WitnetDeployer.address = factory.address - utils.traceHeader("Skipped 'WitnetDeployer'") - console.info(" > Contract address:", factory.address) - console.info() - } - - const proxyAddr = addresses[network]?.WitnetProxy || addresses?.default?.WitnetProxy || "" - if ( - utils.isNullAddress(proxyAddr) || - (await web3.eth.getCode(proxyAddr)).length < 3 - ) { - await deployer.deploy(WitnetProxy, { - from: settings.getSpecs(network)?.WitnetDeployer?.from || master, - }) - if (WitnetProxy.address !== addresses?.default?.WitnetProxy) { - addresses[network].WitnetProxy = WitnetProxy.address - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - } - } - } -} From 51a6991249915ff2ac4cb0707b47390957347e98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 09:07:39 +0200 Subject: [PATCH 15/24] feat(migrations): agnotisticize core vs apps - trustable vs upgradable vs trustless --- migrations/addresses.json | 646 +++++------------------------- migrations/constructorArgs.json | 120 +++--- migrations/scripts/2_libs.js | 68 ++-- migrations/scripts/3_core.js | 182 --------- migrations/scripts/3_framework.js | 404 +++++++++++++++++++ migrations/scripts/4_proxies.js | 151 ------- migrations/scripts/5_apps.js | 131 ------ settings/artifacts.js | 78 ++-- settings/index.js | 33 +- settings/specs.js | 109 ++--- src/utils.js | 116 +++++- 11 files changed, 793 insertions(+), 1245 deletions(-) delete mode 100644 migrations/scripts/3_core.js create mode 100644 migrations/scripts/3_framework.js delete mode 100644 migrations/scripts/4_proxies.js delete mode 100644 migrations/scripts/5_apps.js diff --git a/migrations/addresses.json b/migrations/addresses.json index b89fa99c..af4e7838 100644 --- a/migrations/addresses.json +++ b/migrations/addresses.json @@ -1,563 +1,113 @@ { "default": { - "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", - "WitOracle": "0x77703aE126B971c9946d562F41Dd47071dA00777", - "WitnetProxy": "0xaC3E870BF8D13Dc39f76936b6AF8279eF5a9211F", - "WitPriceFeeds": "0x1111AbA2164AcdC6D291b08DfB374280035E1111", - "WitnetRandomnessV2": "0xC0FFEE98AD1434aCbDB894BbB752e138c1006fAB", - "WitOracleRadonRegistry": "0x000B61Fe075F545fd37767f40391658275900000", - "WitOracleRequestFactory": "0x000DB36997AF1F02209A6F995883B9B699900000" - }, - "arbitrum:one": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "arbitrum:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x85cd7aaF5248fC0568B003EF24FB2a5329C95c28", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x682A7dF2852F3Df2d3B4b84803da69A38ba33180", - "WitOracleRadonRegistryDefault": "0x03604d41a0289cb9325814A6aCA8BaBEf7492B44", - "WitOracleRequestFactoryDefault": "0x90a7Fc875dac0D453b43BF9E5AeE7dC68091CC24" - }, - "avalanche:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x412647Ff1519706C01706c5816E5cC355dd0A06D", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "avalanche:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x5B354083da3c7D034b8b95bE96aC5d114CcdA71f", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "base:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableOvm2": "0x9F02CD498b47B928c5a12FdC7cEa36246d27a638", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0xcB61b81a775E56e9Ec8884d2E13352d668294141", - "WitOracleRadonRegistryDefault": "0x730a88594d8287Ec898b2B7fE592aB155bE71590", - "WitOracleRequestFactoryDefault": "0xe1CDE456D3eC92640711625E01170A6800773b91" - }, - "base:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableOvm2": "0xDc5Ec161b72C5710E2D648b3f360C9b76952397b", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "boba:bnb:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableOvm2": "0x0D929cFfa089cA99a644E10A7c7fe1C8C62F657f", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "boba:bnb:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x4e6159Aa6c94584Af01Ccc828200c79D350D07E9", - "WitOracleRequestFactoryDefault": "0xFbb35731Fd5c35a84176aBccD214538843eAf5db", - "WitOracleRequestBoardTrustableOvm": "0xA126d29b0803CD0536c5487C831Daf9cB634318D", - "WitOracleTrustableOvm2": "0xA126d29b0803CD0536c5487C831Daf9cB634318D", - "WitPriceFeedsV21": "0x9E23a4CD5f903b4D0ED1358413250a1e2c459F63" - }, - "boba:eth:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableOvm2": "0xDc5Ec161b72C5710E2D648b3f360C9b76952397b", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "celo:alfajores": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "celo:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04" - }, - "conflux:core:mainnet": { - "WitnetDeployer": "0x8785dBa05D3B90c55c009D0C47f12A2d976C5e47", - "WitnetProxy": "0x8529DA52FF40990685B61432BA49246b94850d86", - "WitOracleResultErrorsLib": "0x899325905515049B49e726AF5d5f24f723a5eab2", - "WitOracleRadonEncodingLib": "0x80Ea106BE90aB7b4FCac2b3D4aCe4Ea262918188", - "WitPriceFeedsLib": "0x8Ac628741A0983869d237AF759f39a553aE91e47", - "WitOracleDataLib": "0x81cfB91911F6C8fa582033149582a63EBa39D0D3", - "WitOracleRadonRegistryDefault": "0x8C6cC510195f2B53abC65340346843Df91F6B940", - "WitOracleRequestFactoryCfxCore": "0x839d58dE8F143bC01549A7FD62fd508BCA922C8d", - "WitOracleTrustableDefault": "0x8E6Ddf8bA76350A5fde230a05fc58559A90B878D", - "WitPriceFeedsV21": "0x8af4262e9ECb7320a9ffdEe366172EAeA1D60e91", - "WitOracleRadonRegistry": "0x85d3E5577f947BcA1A12C00940087129A5F8B2eb", - "WitOracleRequestFactory": "0x8daDc231C8C810CBbe2d555338bDa94DA648f964", - "WitOracle": "0x8346D6ba3b7a04923492007cC3A2eE7135Db7463", - "WitPriceFeeds": "0x8ba3C59e1029cd90010e8C731461ddFC5f49091b", - "WitnetRandomnessV2": "0x897832C89ec306A74f9eC29abfFcaDBfCb11A13B" - }, - "conflux:core:testnet": { - "WitnetDeployer": "0x8785dBa05D3B90c55c009D0C47f12A2d976C5e47", - "WitnetProxy": "0x8529DA52FF40990685B61432BA49246b94850d86", - "WitOracleResultErrorsLib": "0x899325905515049B49e726AF5d5f24f723a5eab2", - "WitOracleRadonEncodingLib": "0x80Ea106BE90aB7b4FCac2b3D4aCe4Ea262918188", - "WitOracle": "0x8346D6ba3b7a04923492007cC3A2eE7135Db7463", - "WitOracleDataLib": "0x81cfB91911F6C8fa582033149582a63EBa39D0D3", - "WitOracleTrustableDefault": "0x857A67Cc046dB5D6414493ED9E65291FF2824116", - "WitPriceFeeds": "0x8ba3C59e1029cd90010e8C731461ddFC5f49091b", - "WitPriceFeedsLib": "0x8Ac628741A0983869d237AF759f39a553aE91e47", - "WitPriceFeedsV21": "0x80050098a4fdd72409D6C8Ec72FD50ca460349E9", - "WitnetRandomnessV2": "0x897832C89ec306A74f9eC29abfFcaDBfCb11A13B", - "WitOracleRadonRegistry": "0x85d3E5577f947BcA1A12C00940087129A5F8B2eb", - "WitOracleRadonRegistryDefault": "0x8176457C9620E8bb508aA22062E1967726179Cc9", - "WitOracleRequestFactory": "0x8daDc231C8C810CBbe2d555338bDa94DA648f964", - "WitOracleRequestFactoryCfxCore": "0x8E10530323e534d953D7EC83e075eCAbB38079d8" - }, - "conflux:espace:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "conflux:espace:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x1B9D8186e901b6ED7848374e81B79C9eBf74801E", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "cronos:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x412647Ff1519706C01706c5816E5cC355dd0A06D", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "cronos:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x44C4C71c31aD14dB5B18520D3801B88aA26427B0", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "dogechain:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "elastos:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "elastos:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" + "apps": { + "WitPriceFeeds": "0x1111AbA2164AcdC6D291b08DfB374280035E1111", + "WitRandomness": "0xC0FFEE98AD1434aCbDB894BbB752e138c1006fAB" + }, + "core": { + "WitOracle": "0x77703aE126B971c9946d562F41Dd47071dA00777", + "WitOracleRadonRegistry": "0x000B61Fe075F545fd37767f40391658275900000", + "WitOracleRequestFactory": "0x000DB36997AF1F02209A6F995883B9B699900000" + }, + "libs": { + "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", + "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", + "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", + "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837" + }, + "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E" + }, + "conflux:core": { + "apps": { + "WitPriceFeeds": "0x8ba3C59e1029cd90010e8C731461ddFC5f49091b", + "WitRandomness": "0x897832C89ec306A74f9eC29abfFcaDBfCb11A13B" + }, + "core": { + "WitOracle": "0x8346D6ba3b7a04923492007cC3A2eE7135Db7463", + "WitOracleRadonRegistry": "0x85d3E5577f947BcA1A12C00940087129A5F8B2eb", + "WitOracleRequestFactory": "0x8daDc231C8C810CBbe2d555338bDa94DA648f964" + }, + "libs": { + "WitOracleDataLib": "0x81cfB91911F6C8fa582033149582a63EBa39D0D3", + "WitOracleRadonEncodingLib": "0x80Ea106BE90aB7b4FCac2b3D4aCe4Ea262918188", + "WitOracleResultErrorsLib": "0x899325905515049B49e726AF5d5f24f723a5eab2", + "WitPriceFeedsLib": "0x8Ac628741A0983869d237AF759f39a553aE91e47" + }, + "WitnetDeployer": "0x8785dBa05D3B90c55c009D0C47f12A2d976C5e47" }, "ethereum:mainnet": { - "WitOracleResultErrorsLib": "0x3b7AD1402C243Ba59D45a0364B17A31e260A4301", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x751F77190Ce6212899D5848334838D56CF7eEe91", - "WitOracleDataLib": "0xE89dc301AEe78917018039FEBE72f9FE5aB730D9", - "WitOracleRadonRegistryDefault": "0x4a2f2b2E137DD7D4a61389E07c935B14a562078d", - "WitOracleRequestFactoryDefault": "0x1a5cc6DeE6c7d873639e3eF49678b581f459bBa1", - "WitOracleTrustableDefault": "0x7084a8C12100cDBB1995aa1B0393A83A0B868837", - "WitPriceFeedsV21": "0xC815f56cC791E41a11DB3f0D2880AdB10316fca6" - }, - "ethereum:sepolia": { - "WitnetProxy": "0x21ac85A6c320E6fC89774A98732eAE733032651C", - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0xE790FdaEa7f1f4C4Bbd74B3493Cf94E79b24396a", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x327470b70d0cCF47cB89a1f3475DE23Ac2437c9e", - "WitOracleRadonRegistryDefault": "0x34e6465f23aE086e5701A6ca8547aF7c29e0283C", - "WitOracleRequestFactoryDefault": "0x1869A7137dF26397999AA6DB90c7D6D029d13908" - }, - "gnosis:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "kava:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" + "libs": { + "WitOracleDataLib": "0xE89dc301AEe78917018039FEBE72f9FE5aB730D9", + "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", + "WitOracleResultErrorsLib": "0x3b7AD1402C243Ba59D45a0364B17A31e260A4301", + "WitPriceFeedsLib": "0x751F77190Ce6212899D5848334838D56CF7eEe91" + } }, - "kava:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x64c74993A83C55Dc81eB1ec9502867d3b4d1d924", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "kcc:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "kcc:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x64c74993A83C55Dc81eB1ec9502867d3b4d1d924", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "klaytn:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "klaytn:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x64c74993A83C55Dc81eB1ec9502867d3b4d1d924", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "mantle:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableOvm2": "0xDc5Ec161b72C5710E2D648b3f360C9b76952397b", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "mantle:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableOvm2": "0x8423ddeb7d86Ce43a9C643bE3A420Ff69825Dd53", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x853DDf69DbEaDA2fc4A521a1dBA5Beb210a5c4d2", - "WitOracleRadonRegistryDefault": "0xD1960cdC1593Bb9CA75263266dAB75EE33163187", - "WitOracleRequestFactoryDefault": "0x9ef37BF321828AD49F3D31Fd9Cd36921ee317190" - }, - "metis:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" + "meter": { + "WitnetDeployer": "0x496aB880a611825c7c2322AD6d7ead0f84276327" }, "meter:mainnet": { - "WitnetDeployer": "0x496aB880a611825c7c2322AD6d7ead0f84276327", - "WitnetProxy": "0xc0a47100832Bf857Bf1F0517F4bf84D79da60B23", - "WitOracleResultErrorsLib": "0x5a59Ce1206B1771AcdE7ff85910F9e03Aef20EB8", - "WitOracleRadonEncodingLib": "0xfa52abc94415A334F6C846CA018290CE2755B13D", - "WitPriceFeedsLib": "0xBD9Ec958409eC6FbaF4d833F7Ea4e3892A406c98", - "WitOracleDataLib": "0x70d501E01d0EE71F8DD3e533849F5fc454359d6F", - "WitOracleRadonRegistryDefault": "0x14D3AAD34a7aB614Feaf72cc0eAab120E64d032F", - "WitOracleRequestFactoryCfxCore": "0x6Ee46D8db750607ffa5Ec3Eb0DAE969E1916F417", - "WitOracleTrustableDefault": "0xB11b58238BAf7CBBb608C81e7792cEA29e4E19D0", - "WitPriceFeedsV21": "0x7e701068365CFF4f217A32be8059550d8aEdc00D", - "WitOracleRadonRegistry": "0xBa84D2ffA26c8fC7EF2c5Bd4839B4b2E4d56D330", - "WitOracleRequestFactory": "0xc5074dde3FEA0347d3B2E8C38e58e6A34FeEf8EF", - "WitOracle": "0x1f28E4d955eccE989c00b3871446AB22B3Fa9Cc8", - "WitPriceFeeds": "0x27EF7A3e155F96e68A9988EAdBF8bd3eFdba1438", - "WitnetRandomnessV2": "0x4d239f070e475E454148093781211c9eE34f476C" + "apps": { + "WitPriceFeeds": "0x27EF7A3e155F96e68A9988EAdBF8bd3eFdba1438", + "WitRandomness": "0x4d239f070e475E454148093781211c9eE34f476C" + }, + "core": { + "WitOracle": "0x1f28E4d955eccE989c00b3871446AB22B3Fa9Cc8", + "WitOracleRadonRegistry": "0xBa84D2ffA26c8fC7EF2c5Bd4839B4b2E4d56D330", + "WitOracleRequestFactory": "0xc5074dde3FEA0347d3B2E8C38e58e6A34FeEf8EF" + }, + "libs": { + "WitOracleDataLib": "0x70d501E01d0EE71F8DD3e533849F5fc454359d6F", + "WitOracleRadonEncodingLib": "0xfa52abc94415A334F6C846CA018290CE2755B13D", + "WitOracleResultErrorsLib": "0x5a59Ce1206B1771AcdE7ff85910F9e03Aef20EB8", + "WitPriceFeedsLib": "0xBD9Ec958409eC6FbaF4d833F7Ea4e3892A406c98" + } }, "meter:testnet": { "WitnetDeployer": "0xE9D654A97eC431C4f1faba550d0a26399f6fEc80", - "WitnetProxy": "0x49c94B9d32a9AFc3C9Ce0159324b81635ac3f0Ea", - "WitOracleResultErrorsLib": "0x02762C84752C1C1ef582E6FE8dBAF60383a87e66", - "WitOracleRadonEncodingLib": "0xA4c9D0f1DE84D190a0478FD9226Ec201Daf509E2", - "WitPriceFeedsLib": "0x75cC6DA115846D1E577F5C5D5566BD2C15D5d198", - "WitOracleDataLib": "0xCc0444d867188796254141220744BdfE9Ef6d742", - "WitOracleRadonRegistryDefault": "0x8e1EDea211ed85316Bc7F115972C995b5fA897aF", - "WitOracleRequestFactoryDefault": "0xC69640F34267C5B9F58f716d1385A481D7dff10D", - "WitOracleTrustableDefault": "0xb7dd2cD53790a5D87f5cfD265D3bD889ed5FC28d", - "WitPriceFeedsV21": "0x89eE40cfb4F7D9f56Ee2E2E9B1580176361D84eC", - "WitOracleRadonRegistry": "0x87E25Ad751306b21F9345494F163122e057B7b53", - "WitOracleRequestFactory": "0xd0b4512F4c9291de4104a1ad7be0c51956044bbC", - "WitOracle": "0x51e12A16d52DE519f7b13bFeDa42Fb61214d32a0", - "WitPriceFeeds": "0xD9f5Af15288294678B0863A20F4B83eeeEAa775C", - "WitnetRandomnessV2": "0x2dE368AFC80b13E4a42990004ebC74ce125486F9", - "WitOracleRequestFactoryCfxCore": "0x602e74De19acA64f6ea1E20Da94a8B4D81dF3013" - }, - "moonbeam:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "moonbeam:moonbase": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x64c74993A83C55Dc81eB1ec9502867d3b4d1d924", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "moonbeam:moonriver": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x412647Ff1519706C01706c5816E5cC355dd0A06D", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "okx:oktchain:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "okx:x1:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryNoSha256": "0xd3a3C178F76D788B4054C3945281F94e7122a8fD", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "optimism:mainnet": { - "WitnetProxy": "0xADA577AC8eE9Cb726F6FC45f0B0716FD1aB3637D", - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableOvm2": "0xDc5Ec161b72C5710E2D648b3f360C9b76952397b", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04" + "apps": { + "WitPriceFeeds": "0xD9f5Af15288294678B0863A20F4B83eeeEAa775C", + "WitRandomness": "0x2dE368AFC80b13E4a42990004ebC74ce125486F9" + }, + "core": { + "WitOracle": "0x51e12A16d52DE519f7b13bFeDa42Fb61214d32a0", + "WitOracleRadonRegistry": "0x87E25Ad751306b21F9345494F163122e057B7b53", + "WitOracleRequestFactory": "0xd0b4512F4c9291de4104a1ad7be0c51956044bbC" + }, + "libs": { + "WitOracleDataLib": "0xCc0444d867188796254141220744BdfE9Ef6d742", + "WitOracleRadonEncodingLib": "0xA4c9D0f1DE84D190a0478FD9226Ec201Daf509E2", + "WitOracleResultErrorsLib": "0x02762C84752C1C1ef582E6FE8dBAF60383a87e66", + "WitPriceFeedsLib": "0x75cC6DA115846D1E577F5C5D5566BD2C15D5d198" + } }, "optimism:sepolia": { - "WitnetProxy": "0x58Bd0091748d0438f379bbf7D8BfF3a624CEbc3F", - "WitOracleResultErrorsLib": "0x4f2F381Ed2020095F1a1B5a0BDe5AB30da916BC9", - "WitOracleRadonEncodingLib": "0xf321bcD29CFc6134c9Bf42F759f428F3A6010919", - "WitOracleDataLib": "0x25d57Cf8a047B14172Ba2a929C1441E1A77c3f9D", - "WitOracleTrustableOvm2": "0xc1C158e77A91da158a1A2D0c2A154c68a8C7c0d2", - "WitPriceFeedsLib": "0x85aa4A0fDa112c47d4216448EE4D49Afd072675e", - "WitPriceFeedsV21": "0xA936f7F4909494Ea1F7D898C2759b2324912153d", - "WitOracleRadonRegistryDefault": "0x2D8BCBC4F8c97CC227e770d95d19914324baBF2A", - "WitOracleRequestFactoryDefault": "0x3D551165020a4014A8d5b9E4b73D2b3Dbe401546" - }, - "polygon:amoy": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "polygon:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "polygon:zkevm:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryNoSha256": "0x0C39d07778Fc2FF94efe889b107Deaa074041719", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x2c2C1Cf21c113F1c2D2df35a1E88aa96fc0AE749", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" + "libs": { + "WitOracleDataLib": "0x25d57Cf8a047B14172Ba2a929C1441E1A77c3f9D", + "WitOracleRadonEncodingLib": "0xf321bcD29CFc6134c9Bf42F759f428F3A6010919", + "WitOracleResultErrorsLib": "0x4f2F381Ed2020095F1a1B5a0BDe5AB30da916BC9", + "WitPriceFeedsLib": "0x85aa4A0fDa112c47d4216448EE4D49Afd072675e" + } + }, + "reef": { + "apps": { + "WitPriceFeeds": "0xA9991dCd62a863f0F0aabF95a6a252d132b5c8D4", + "WitRandomness": "0x84CD0bde18f78101064A2c8b8BaE5e1fCe1BCc0d" + }, + "core": { + "WitOracle": "0x604b98893335CEf7Dc40061731F40aC5C6239907", + "WitOracleRadonRegistry": "0xC4b7a5aD8BAF8fea9DbeB18aB6F77cdf54CF297a", + "WitOracleRequestFactory": "0xEBa788A5de67E4B11869558a2414247e8Aa62179" + }, + "WitnetDeployer": "0x94d6e5321039343f5e656aa7591dfbdbe81ff78f" }, "reef:mainnet": { - "WitnetDeployer": "0x94d6e5321039343f5e656aa7591dfbdbe81ff78f", - "WitnetProxy": "0x57a52fbcb26a08425fbe813bb1f21380bff23d47", - "WitOracleResultErrorsLib": "0xE2996CE29D5351E22a01E9dD73ADd8A0264E7318", - "WitOracleRadonEncodingLib": "0x416c6e7ff66868375cFF36bA87B8eCBB2CF2Fb08", - "WitPriceFeedsLib": "0xcaa6dE265EF1545788E9576660Bc6d5ae1Edb0F5", - "WitOracleDataLib": "0x6F65a0110a2D2Af299a73a4C169CC3d2C41Be505", - "WitOracleRadonRegistryDefault": "0x1A80B677A9dd6a6762273593FE2797927c4010A4", - "WitOracleRequestFactoryDefault": "0x71E2e26E5EfF3C05935A497282Fe018963b78F55", - "WitOracleTrustableReef": "0x7950250D3d2ae1636a7Ca2a8A6ba53e46D1cB573", - "WitPriceFeedsV21": "0x8af56567C7F0Deaf8979244d83194816a6ED144F", - "WitOracleRadonRegistry": "0xC4b7a5aD8BAF8fea9DbeB18aB6F77cdf54CF297a", - "WitOracleRequestFactory": "0xEBa788A5de67E4B11869558a2414247e8Aa62179", - "WitOracle": "0x604b98893335CEf7Dc40061731F40aC5C6239907", - "WitPriceFeeds": "0xA9991dCd62a863f0F0aabF95a6a252d132b5c8D4", - "WitnetRandomnessV2": "0x84CD0bde18f78101064A2c8b8BaE5e1fCe1BCc0d" - }, - "reef:testnet": {}, - "scroll:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryNoSha256": "0x0C39d07778Fc2FF94efe889b107Deaa074041719", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x412647Ff1519706C01706c5816E5cC355dd0A06D", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "scroll:sepolia": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryNoSha256": "0xd3a3C178F76D788B4054C3945281F94e7122a8fD", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "syscoin:rollux:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773", - "WitOracleTrustableOvm2": "0x9Bd67787019a6474ddE27f9c9A37260c87Da92B5", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11" - }, - "ten:testnet": { - "WitnetProxy": "0xaC3E870BF8D13Dc39f76936b6AF8279eF5a9211F", - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleTrustableObscuro": "0x2330f492635c2E7476bB2A3162e69129F6FEaB56", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773" - }, - "ultron:mainnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x967C4A627e68770db28803d033eEBCeE615C37EB", - "WitOracleRequestFactoryDefault": "0xE2CA421F5c28a04eb0B22f12512627acA9cF9E04", - "WitOracleTrustableDefault": "0x105EeFc7ad7A057C3BF2D516a0bFbB84E80d66eF", - "WitPriceFeedsV21": "0xd26f5c402D274C1b7c443E2215221D70C0b8DeB0" - }, - "ultron:testnet": { - "WitOracleResultErrorsLib": "0xa57B9dd8420631248c3DFB535f4FC9f7E2f02B4B", - "WitOracleRadonEncodingLib": "0x268631E002eE8c23F4C124AfBb6fE5DBbaa6d58c", - "WitPriceFeedsLib": "0x579b4aD5E67E5B491a33A033A02A70769D7AF837", - "WitOracleDataLib": "0x561A6c8F9C9D6e7EbAEcd4963A8f27Ae13568676", - "WitOracleRadonRegistryDefault": "0x51376b77d9944bb9c5685b9d9289dd08D399B5e1", - "WitOracleRequestFactoryDefault": "0xB06a2fEc3Dc38b6f8Ce6337317Fcd4aAB00FE773", - "WitOracleTrustableDefault": "0x90A31c3f10391bd0f69a436473C96AAEe4DF0A5e", - "WitPriceFeedsV21": "0x8280929b7F6adcE1CfA15b63cbEC1A7FD8cAEf11" - } + "libs": { + "WitOracleDataLib": "0x6F65a0110a2D2Af299a73a4C169CC3d2C41Be505", + "WitOracleRadonEncodingLib": "0x416c6e7ff66868375cFF36bA87B8eCBB2CF2Fb08", + "WitOracleResultErrorsLib": "0xE2996CE29D5351E22a01E9dD73ADd8A0264E7318", + "WitPriceFeedsLib": "0xcaa6dE265EF1545788E9576660Bc6d5ae1Edb0F5" + } + }, + "reef:testnet": {} } \ No newline at end of file diff --git a/migrations/constructorArgs.json b/migrations/constructorArgs.json index c7feca4b..ee9acbcd 100644 --- a/migrations/constructorArgs.json +++ b/migrations/constructorArgs.json @@ -2,190 +2,190 @@ "default": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31322d61653734633030000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitnetRandomnessV2": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000f121b71715e71dded592f1125a06d4ed06f0694d", - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", - "WitOracleRadonRegistryNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000" }, "arbitrum:one": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "avalanche:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "base:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "boba:bnb:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "boba:bnb:testnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d34643165343634000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d34643165343634000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d34643165343634000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d34643165343634000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "boba:eth:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "celo:alfajores": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d64383461343832000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "celo:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "conflux:core:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", - "WitOracleRequestFactoryCfxCore": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db746300000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRequestFactoryUpgradableConfluxCore": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db746300000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "0000000000000000000000008dadc231c8c810cbbe2d555338bda94da648f96400000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitPriceFeedsUpgradable": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitnetRandomnessV2": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000001169bf81ecf738d02fd8d3824dfe02153b334ef7" }, "conflux:core:testnet": { - "WitOracleRequestFactoryCfxCore": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db746300000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitOracleRequestFactoryUpgradableConfluxCore": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db746300000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitOracleTrustableDefault": "0000000000000000000000008dadc231c8c810cbbe2d555338bda94da648f96400000000000000000000000085d3e5577f947bca1a12c00940087129a5f8b2eb0000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitPriceFeedsUpgradable": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitnetRandomnessV2": "0000000000000000000000008346d6ba3b7a04923492007cc3a2ee7135db74630000000000000000000000001169bf81ecf738d02fd8d3824dfe02153b334ef7" }, "conflux:espace:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "conflux:espace:testnet": { - "WitOracleRequestFactoryCfxCore": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000" + "WitOracleRequestFactoryUpgradableConfluxCore": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000" }, "cronos:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "dogechain:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "elastos:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "ethereum:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31352d32623837306334000000000000000000000000000000000000" }, "kava:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "kava:testnet": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d64626234666331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "kcc:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "kcc:testnet": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d64626234666331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "klaytn:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "klaytn:testnet": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d64626234666331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "mantle:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "meter:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", - "WitOracleRequestFactoryCfxCore": "0000000000000000000000001f28e4d955ecce989c00b3871446ab22b3fa9cc8000000000000000000000000ba84d2ffa26c8fc7ef2c5bd4839b4b2e4d56d3300000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRequestFactoryUpgradableConfluxCore": "0000000000000000000000001f28e4d955ecce989c00b3871446ab22b3fa9cc8000000000000000000000000ba84d2ffa26c8fc7ef2c5bd4839b4b2e4d56d3300000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000c5074dde3fea0347d3b2e8c38e58e6a34feef8ef000000000000000000000000ba84d2ffa26c8fc7ef2c5bd4839b4b2e4d56d3300000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "0000000000000000000000001f28e4d955ecce989c00b3871446ab22b3fa9cc80000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitPriceFeedsUpgradable": "0000000000000000000000001f28e4d955ecce989c00b3871446ab22b3fa9cc80000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitnetRandomnessV2": "0000000000000000000000001f28e4d955ecce989c00b3871446ab22b3fa9cc8000000000000000000000000e169bf81ecf738d02fd8d3824dfe02153b334ef7" }, "meter:testnet": { "WitOracleRequestFactoryDefault": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a000000000000000000000000087e25ad751306b21f9345494f163122e057b7b530000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000d0b4512f4c9291de4104a1ad7be0c51956044bbc00000000000000000000000087e25ad751306b21f9345494f163122e057b7b530000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a00000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", + "WitPriceFeedsUpgradable": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a00000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000", "WitnetRandomnessV2": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a0000000000000000000000000e169bf81ecf738d02fd8d3824dfe02153b334ef7", - "WitOracleRequestFactoryCfxCore": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a000000000000000000000000087e25ad751306b21f9345494f163122e057b7b530000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000" + "WitOracleRequestFactoryUpgradableConfluxCore": "00000000000000000000000051e12a16d52de519f7b13bfeda42fb61214d32a000000000000000000000000087e25ad751306b21f9345494f163122e057b7b530000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000" }, "moonbeam:moonbase": { "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31352d64626234666331000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "moonbeam:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "moonbeam:moonriver": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "optimism:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "polygon:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "polygon:zkevm:mainnet": { - "WitOracleRadonRegistryNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "reef:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d34333966396166000000000000000000000000000000000000" + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31352d34333966396166000000000000000000000000000000000000" }, "scroll:mainnet": { - "WitOracleRadonRegistryNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableNoSha256": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" }, "syscoin:rollux:testnet": { "WitOracleTrustableOvm2": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" @@ -194,9 +194,9 @@ "WitOracleTrustableObscuro": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d34386336646436000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" }, "ultron:mainnet": { - "WitOracleRadonRegistryDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", + "WitOracleRadonRegistryUpgradableDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleRequestFactoryDefault": "00000000000000000000000077703ae126b971c9946d562f41dd47071da00777000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000", "WitOracleTrustableDefault": "000000000000000000000000000db36997af1f02209a6f995883b9b699900000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", - "WitPriceFeedsV21": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" + "WitPriceFeedsUpgradable": "00000000000000000000000077703ae126b971c9946d562f41dd47071da007770000000000000000000000000000000000000000000000000000000000000001322e302e31342d64313036336562000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index f83b9eae..53fe9b1f 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -6,48 +6,52 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {} + if (!addresses[network]?.libs) addresses[network].libs = {} - const targets = settings.getArtifacts(network) - const libs = [ - targets.WitPriceFeedsLib, - targets.WitOracleDataLib, - targets.WitOracleRadonEncodingLib, - targets.WitOracleResultErrorsLib, - ] - + const deployer = await WitnetDeployer.deployed() + const networkArtifacts = settings.getArtifacts(network); const selection = utils.getWitnetArtifactsFromArgs() - const deployer = await WitnetDeployer.deployed() - for (const index in libs) { - const key = libs[index] - const artifact = artifacts.require(key) + for (const index in networkArtifacts.libs) { + const base = networkArtifacts.libs[index] + const impl = networkArtifacts.libs[base] + const libImplArtifact = artifacts.require(impl) + const libInitCode = libImplArtifact.toJSON().bytecode + const libTargetAddr = await deployer.determineAddr.call(libInitCode, "0x0", { from }) + const libTargetCode = await web3.eth.getCode(libTargetAddr) + let libNetworkAddr = utils.getNetworkLibsArtifactAddress(network, addresses, impl) if ( - utils.isNullAddress(addresses[network][key]) || - (await web3.eth.getCode(addresses[network][key])).length < 3 || - selection.includes(key) + // lib implementation artifact is listed as --artifacts on CLI + selection.includes(impl) || + // or, no address found in addresses file but code is already deployed into target address + (utils.isNullAddress(libNetworkAddr) && libTargetCode.length > 3) || + // or, address found in addresses file but no code currently deployed in such + (await web3.eth.getCode(libNetworkAddr)).length < 3 ) { - utils.traceHeader(`Deploying '${key}'...`) - const libInitCode = artifact.toJSON().bytecode - const libAddr = await deployer.determineAddr.call(libInitCode, "0x0", { from }) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const tx = await deployer.deploy(libInitCode, "0x0", { from }) - utils.traceTx(tx) - if ((await web3.eth.getCode(libAddr)).length > 3) { - addresses[network][key] = libAddr + if (libTargetCode.length < 3) { + utils.traceHeader(`Deploying '${impl}'...`) + utils.traceTx(await deployer.deploy(libInitCode, "0x0", { from })) + if ((await web3.eth.getCode(libTargetAddr)).length < 3) { + console.info(`Error: Library was not deployed on expected address: ${libTargetAddr}`) + process.exit(1) + } } else { - console.info(`Error: Library was not deployed on expected address: ${libAddr}`) - process.exit(1) + utils.traceHeader(`Recovered '${impl}'`) } - if (!utils.isDryRun(network)) { + addresses[network].libs[impl] = libTargetAddr + libNetworkAddr = libTargetAddr + // if (!utils.isDryRun(network)) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - } + // } + } else { + utils.traceHeader(`Deployed '${impl}'`) + } + libImplArtifact.address = utils.getNetworkLibsArtifactAddress(network, addresses, impl) + if (libTargetAddr !== libNetworkAddr) { + console.info(" ", "> library address: \x1b[96m", libImplArtifact.address, `\x1b[0m!== \x1b[30;43m${libTargetAddr}\x1b[0m`) } else { - utils.traceHeader(`Skipped '${key}'`) + console.info(" ", "> library address: \x1b[96m", libImplArtifact.address, "\x1b[0m") } - artifact.address = addresses[network][key] - console.info(" ", "> library address: ", artifact.address) - console.info(" ", "> library codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) console.info() } } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js deleted file mode 100644 index e28a36bb..00000000 --- a/migrations/scripts/3_core.js +++ /dev/null @@ -1,182 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const settings = require("../../settings") -const utils = require("../../src/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const WitnetDeployer = artifacts.require("WitnetDeployer") - -module.exports = async function (_, network, [, from]) { - const specs = settings.getSpecs(network) - const targets = settings.getArtifacts(network) - - // ========================================================================== - // --- WitOracleRadonRegistry core implementation --------------------------- - - await deploy({ - network, - targets, - from: utils.isDryRun(network) ? from : specs.WitOracleRadonRegistry.from || from, - key: targets.WitOracleRadonRegistry, - libs: specs.WitOracleRadonRegistry.libs, - immutables: specs.WitOracleRadonRegistry.immutables, - intrinsics: { - types: ["bool", "bytes32"], - values: [ - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - - // ========================================================================== - // --- WitOracleRequestFactory core implementation ----------------------------- - - await deploy({ - network, - targets, - from: utils.isDryRun(network) ? from : specs.WitOracleRequestFactory.from || from, - key: targets.WitOracleRequestFactory, - libs: specs.WitOracleRequestFactory.libs, - immutables: specs.WitOracleRequestFactory.immutables, - intrinsics: { - types: ["address", "bool", "bytes32"], - values: [ - /* _witOracle */ await determineProxyAddr(from, specs.WitOracle?.vanity || 3), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - - // ========================================================================== - // --- WitOracle core implementation --------------------------------- - - await deploy({ - network, - targets, - from: utils.isDryRun(network) ? from : specs.WitOracle.from || from, - key: targets.WitOracle, - libs: specs.WitOracle.libs, - immutables: specs.WitOracle.immutables, - intrinsics: { - types: ["address", "address", "bool", "bytes32"], - values: [ - /* _registry */ await determineProxyAddr(from, specs.WitOracleRadonRegistry?.vanity || 1), - /* _factory */ await determineProxyAddr(from, specs.WitOracleRequestFactory?.vanity || 2), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - - // ========================================================================== - // --- WitPriceFeeds core implementation --------------------------------- - - await deploy({ - network, - targets, - from: utils.isDryRun(network) ? from : specs.WitPriceFeeds.from || from, - key: targets.WitPriceFeeds, - libs: specs.WitPriceFeeds.libs, - immutables: specs.WitPriceFeeds.immutables, - intrinsics: { - types: ["address", "bool", "bytes32"], - values: [ - /* _witOracle */ await determineProxyAddr(from, specs.WitOracle?.vanity || 3), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) -} - -async function deploy (specs) { - const { from, key, libs, intrinsics, immutables, network, targets } = specs - - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {} - - const selection = utils.getWitnetArtifactsFromArgs() - - const contract = artifacts.require(key) - if ( - utils.isNullAddress(addresses[network][key]) || - (await web3.eth.getCode(addresses[network][key])).length < 3 || - selection.includes(key) || - (libs && selection.filter(item => libs.includes(item)).length > 0) - ) { - utils.traceHeader(`Deploying '${key}'...`) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const deployer = await WitnetDeployer.deployed() - let { types, values } = intrinsics - if (immutables?.types) types = [...types, ...immutables.types] - if (immutables?.values) values = [...values, ...immutables.values] - const constructorArgs = web3.eth.abi.encodeParameters(types, values) - if (constructorArgs.length > 2) { - console.info(" ", "> constructor types:", JSON.stringify(types)) - console.info(" ", "> constructor args: ", constructorArgs.slice(2)) - } - const coreBytecode = link(contract.toJSON().bytecode, libs, targets) - if (coreBytecode.indexOf("__") > -1) { - console.info(coreBytecode) - console.info("Error: Cannot deploy due to some missing libs") - process.exit(1) - } - const coreInitCode = coreBytecode + constructorArgs.slice(2) - const coreAddr = await deployer.determineAddr.call(coreInitCode, "0x0", { from }) - const tx = await deployer.deploy(coreInitCode, "0x0", { from }) - utils.traceTx(tx) - if ((await web3.eth.getCode(coreAddr)).length > 3) { - addresses[network][key] = coreAddr - } else { - console.info(`Error: Contract was not deployed on expected address: ${coreAddr}`) - process.exit(1) - } - // save addresses file if required - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = await utils.readJsonFromFile("./migrations/constructorArgs.json") - if (!args?.default[key] || constructorArgs.slice(2) !== args.default[key]) { - if (!args[network]) args[network] = {} - args[network][key] = constructorArgs.slice(2) - await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) - } - } - } else { - utils.traceHeader(`Skipped '${key}'`) - } - contract.address = addresses[network][key] - for (const index in libs) { - const libname = libs[index] - const lib = artifacts.require(libname) - contract.link(lib) - console.info(" ", "> external library: ", `${libname}@${lib.address}`) - }; - console.info(" ", "> contract address: ", contract.address) - console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(contract.address))) - console.info() - return contract -} - -async function determineProxyAddr (from, nonce) { - const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" - const deployer = await WitnetDeployer.deployed() - return await deployer.determineProxyAddr.call(salt, { from }) -} - -function link (bytecode, libs, targets) { - if (libs && Array.isArray(libs) && libs.length > 0) { - for (const index in libs) { - const key = targets[libs[index]] - const lib = artifacts.require(key) - bytecode = bytecode.replaceAll(`__${key}${"_".repeat(38 - key.length)}`, lib.address.slice(2)) - console.info(" ", `> linked library: ${key} => ${lib.address}`) - } - } - return bytecode -} diff --git a/migrations/scripts/3_framework.js b/migrations/scripts/3_framework.js new file mode 100644 index 00000000..fe63444e --- /dev/null +++ b/migrations/scripts/3_framework.js @@ -0,0 +1,404 @@ +const ethUtils = require("ethereumjs-util") +const merge = require("lodash.merge") +const settings = require("../../settings") +const utils = require("../../src/utils") +const version = `${ + require("../../package").version +}-${ + require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) +}` + +const selection = utils.getWitnetArtifactsFromArgs(); + +const WitnetDeployer = artifacts.require("WitnetDeployer") +const WitnetProxy = artifacts.require("WitnetProxy") + +module.exports = async function (_, network, [, from, reporter, curator, ]) { + + const addresses = await utils.readJsonFromFile("./migrations/addresses.json"); + const constructorArgs = await utils.readJsonFromFile("./migrations/constructorArgs.json"); + if (!constructorArgs[network]) constructorArgs[network] = {} + + const networkArtifacts = settings.getArtifacts(network) + const networkSpecs = settings.getSpecs(network) + + // Settle the order in which (some of the) framework artifacts must be deployed first + const framework = { + core: merge(Object.keys(networkArtifacts.core), [ "WitOracleRadonRegistry", "WitOracle", ], ), + apps: merge(Object.keys(networkArtifacts.apps), [], ), + }; + + // Settle WitOracle as first dependency on all Wit/oracle appliances + framework.apps.map(appliance => { + networkSpecs[appliance].baseDeps = merge([], networkSpecs[appliance]?.baseDeps, [ "WitOracle", ]) + }); + + // Settle network-specific initialization params, if any... + networkSpecs.WitOracle.mutables = merge(networkSpecs.WitOracle?.mutables, { + types: [ "address[]", ], values: [ [ reporter, ] ], + }); + networkSpecs.WitRandomness.mutables = merge(networkSpecs.WitRandomness?.mutables, { + types: [ "address", ], values: [ curator ], + }); + + // Loop on framework domains ... + for (domain in framework) { + if (!addresses[network][domain]) addresses[network][domain] = {} + + // Loop on domain artifacts ... + for (const index in framework[domain]) { + const base = framework[domain][index] + const impl = networkArtifacts[domain][base] + + if (impl.indexOf(base) < 0) { + console.error(`Mismatching inheriting artifact names on settings/artifacts.js: ${base} 0) { + console.info(" ", "> constructor types: \x1b[90m", targetSpecs.constructorArgs.types, "\x1b[0m") + utils.traceData(" > constructor values: ", encodeCoreTargetConstructorArgs(targetSpecs).slice(2), 64, "\x1b[90m") + } + await deployCoreTarget(impl, targetSpecs, networkArtifacts) + // save constructor args + constructorArgs[network][impl] = encodeCoreTargetConstructorArgs(targetSpecs).slice(2) + await utils.overwriteJsonFile("./migrations/constructorArgs.json", constructorArgs) + } + + if (targetSpecs.isUpgradable) { + + if (!utils.isNullAddress(targetBaseAddr) && (await web3.eth.getCode(targetBaseAddr)).length > 3) { + // a proxy address with deployed code is found in the addresses file... + const proxyImplAddr = await getProxyImplementation(targetSpecs.from, targetBaseAddr) + if ( + proxyImplAddr === targetAddr || + utils.isNullAddress(proxyImplAddr) || selection.includes(base) || process.argv.includes("--upgrade-all") + ) { + implArtifact.address = targetAddr + + } else { + implArtifact.address = proxyImplAddr + } + + } else { + targetBaseAddr = await deployCoreBase(targetSpecs, targetAddr) + implArtifact.address = targetAddr + // save new proxy address in file + addresses[network][domain][base] = targetBaseAddr + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + } + baseArtifact.address = targetBaseAddr + + // link implementation artifact to external libs so it can get eventually verified + for (const index in targetSpecs?.baseLibs) { + const libArtifact = artifacts.require(networkArtifacts.libs[targetSpecs.baseLibs[index]]) + implArtifact.link(libArtifact) + }; + + // determines whether a new implementation is available, and ask the user to upgrade the proxy if so: + let upgradeProxy = targetAddr !== await getProxyImplementation(targetSpecs.from, targetBaseAddr) + if (upgradeProxy) { + const target = await implArtifact.at(targetAddr) + const targetVersion = await target.version.call({ from: targetSpecs.from }) + const targetGithubTag = targetVersion.slice(-7) + const legacy = await implArtifact.at(targetBaseAddr) + const legacyVersion = await target.version.call({ from: targetSpecs.from }) + const legacyGithubTag = legacyVersion.slice(-7) + + if (targetGithubTag === legacyGithubTag && network !== "develop") { + console.info(` > \x1b[41mPlease, commit your latest changes before upgrading.\x1b[0m`) + upgradeProxy = false + + } else if (!selection.includes(base) && !process.argv.includes("--upgrade-all") && network !== "develop") { + const targetClass = await target.class.call({ from: targetSpecs.from}) + const legacyClass = await legacy.class.call({ from: targetSpecs.from}) + if (legacyClass !== targetClass || legacyVersion !== targetVersion) { + upgradeProxy = ["y", "yes", ].includes((await + utils.prompt(` > Upgrade artifact from ${legacyClass}:${legacyVersion} to \x1b[1;39m${targetClass}:${targetVersion}\x1b[0m? (y/N) `) + )) + } else { + const legacyCodeHash = web3.utils.soliditySha3(await web3.eth.getCode(legacy.address)) + const targetCodeHash = web3.utils.soliditySha3(await web3.eth.getCode(target.address)) + if (legacyCodeHash !== targetCodeHash) { + upgradeProxy = ["y", "yes", ].includes((await + utils.prompt(` > Upgrade artifact to \x1b[1;39mlatest compilation of v${targetVersion.slice(0, 6)}\x1b[0m? (y/N) `) + )) + } + } + + } else { + upgradeProxy = selection.includes(base) || process.argv.includes("--upgrade-all") + } + } + if (upgradeProxy) { + utils.traceHeader(`Upgrading '${base}'...`) + await upgradeCoreBase(baseArtifact.address, targetSpecs, targetAddr) + + } else { + utils.traceHeader(`Upgradable '${base}'`) + } + + if (implArtifact.address !== targetAddr) { + console.info(" ", "> contract address: \x1b[96m", baseArtifact.address, "\x1b[0m") + console.info(" ", " \x1b[96m -->\x1b[36m", implArtifact.address, "!==", `\x1b[30;43m${targetAddr}\x1b[0m`) + + } else { + console.info(" ", "> contract address: \x1b[96m", + baseArtifact.address, "-->\x1b[36m", + implArtifact.address, "\x1b[0m" + ); + } + + } else { + utils.traceHeader(`Immutable '${base}'`) + // if (targetCode.length > 3) { + // // if not deployed during this migration, and artifact required constructor args... + // if (targetSpecs?.constructorArgs?.types.length > 0) { + // console.info(" ", "> constructor types: \x1b[90m", targetSpecs.constructorArgs.types, "\x1b[0m") + // utils.traceData(" > constructor values: ", constructorArgs[network][impl], 64, "\x1b[90m") + // } + // } + if (selection.includes(impl) || utils.isNullAddress(targetBaseAddr) || (await web3.eth.getCode(targetBaseAddr)).length < 3) { + baseArtifact.address = targetAddr + implArtifact.address = targetAddr + if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { + console.info(" ", "> contract address: \x1b[36m", targetBaseAddr, "\x1b[0m==>", `\x1b[96m${targetAddr}\x1b[0m`) + } else { + console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") + } + + } else { + baseArtifact.address = targetBaseAddr + implArtifact.address = targetBaseAddr + if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { + console.info(" ", "> contract address: \x1b[96m", targetBaseAddr, "\x1b[0m!==", `\x1b[41m${targetAddr}\x1b[0m`) + } else { + console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") + } + } + addresses[network][domain][base] = baseArtifact.address + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + } + const core = await implArtifact.at(baseArtifact.address) + try { + console.info(" ", "> contract curator: \x1b[95m", await core.owner.call({ from }), "\x1b[0m") + } catch {} + console.info(" ", "> contract class: \x1b[1;39m", await core.class.call({ from }), "\x1b[0m") + if (targetSpecs.isUpgradable) { + const coreVersion = await core.version.call({ from }) + const nextCore = await implArtifact.at(targetAddr) + const nextCoreVersion = await nextCore.version.call({ from }) + if (implArtifact.address !== targetAddr && coreVersion !== nextCoreVersion) { + console.info(" ", "> contract version: \x1b[1;39m", coreVersion, "\x1b[0m!==", `\x1b[33m${nextCoreVersion}\x1b[0m`) + + } else { + console.info(" ", "> contract version: \x1b[1;39m", coreVersion, "\x1b[0m") + } + } + console.info(" ", "> contract specs: ", await core.specs.call({ from }), "\x1b[0m") + console.info() + } + } +} +async function deployCoreBase (targetSpecs, targetAddr) { + const deployer = await WitnetDeployer.deployed() + const proxyInitArgs = targetSpecs.mutables + const proxySalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") + const proxyAddr = await deployer.determineProxyAddr.call(proxySalt, { from: targetSpecs.from }) + if ((await web3.eth.getCode(proxyAddr)).length < 3) { + // if no contract is yet deployed on the expected address + // proxify to last deployed implementation, and initialize it: + utils.traceHeader(`Deploying new 'WitnetProxy'...`) + const initdata = proxyInitArgs ? web3.eth.abi.encodeParameters(proxyInitArgs.types, proxyInitArgs.values) : "0x" + if (initdata.length > 2) { + console.info(" ", "> initdata types: \x1b[90m", proxyInitArgs.types, "\x1b[0m") + utils.traceData(" > initdata values: ", initdata.slice(2), 64, "\x1b[90m") + } + utils.traceTx(await deployer.proxify(proxySalt, targetAddr, initdata, { from: targetSpecs.from })) + } + if ((await web3.eth.getCode(proxyAddr)).length < 3) { + console.error(`Error: WitnetProxy was not deployed on the expected address: ${proxyAddr}`) + process.exit(1) + } + return proxyAddr +} + +async function upgradeCoreBase (proxyAddr, targetSpecs, targetAddr) { + const initdata = targetSpecs.mutables?.types ? web3.eth.abi.encodeParameters(targetSpecs.mutables.types, targetSpecs.mutables.values) : "0x" + if (initdata.length > 2) { + console.info(" ", "> initdata types: \x1b[90m", targetSpecs.mutables.types, "\x1b[0m") + utils.traceData(" > initdata values: ", initdata.slice(2), 64, "\x1b[90m") + } + const proxy = await WitnetProxy.at(proxyAddr) + utils.traceTx(await proxy.upgradeTo(targetAddr, initdata, { from: targetSpecs.from })) + return proxyAddr +} + + +async function deployCoreTarget (target, targetSpecs, networkArtifacts) { + const deployer = await WitnetDeployer.deployed() + console.log(target, targetSpecs) + const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) + const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") + const targetAddr = await deployer.determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) + utils.traceTx(await deployer.deploy(targetInitCode, targetSalt, { from: targetSpecs.from })) + if ((await web3.eth.getCode(targetAddr)).length <= 3) { + console.error(`Error: Contract ${target} was not deployed on the expected address: ${targetAddr}`) + process.exit(1) + } + return targetAddr +} + +async function determineCoreTargetAddr(target, targetSpecs, networkArtifacts) { + const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) + const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") + return (await WitnetDeployer.deployed()).determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) +} + +async function determineProxyAddr (from, nonce) { + const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" + const deployer = await WitnetDeployer.deployed() + return await deployer.determineProxyAddr.call(salt, { from }) +} + +function encodeCoreTargetConstructorArgs(targetSpecs) { + return web3.eth.abi.encodeParameters(targetSpecs.constructorArgs.types, targetSpecs.constructorArgs.values) +} + +function encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) { + // extract bytecode from target's artifact, replacing lib references to actual addresses + const targetCode = linkBaseLibs( + artifacts.require(target).toJSON().bytecode, + targetSpecs.baseLibs, + networkArtifacts + ) + if (targetCode.indexOf("__") > -1) { + console.info(targetCode) + console.error( + `Error: artifact ${target} depends on library`, + targetCode.substring(targetCode.indexOf("__"), 42), + "which is not known or has not been deployed." + ); + process.exit(1) + } + const targetConstructorArgsEncoded = encodeCoreTargetConstructorArgs(targetSpecs) + return targetCode + targetConstructorArgsEncoded.slice(2) +} + +async function getProxyImplementation (from, proxyAddr) { + const proxy = await WitnetProxy.at(proxyAddr) + return await proxy.implementation.call({ from }) +} + +function linkBaseLibs (bytecode, baseLibs, networkArtifacts) { + if (baseLibs && Array.isArray(baseLibs)) { + for (const index in baseLibs) { + const base = baseLibs[index] + const impl = networkArtifacts.libs[base] + const lib = artifacts.require(impl) + bytecode = bytecode.replaceAll(`__${impl}${"_".repeat(38 - impl.length)}`, lib.address.slice(2)) + } + } + return bytecode +} + +async function unfoldCoreTargetSpecs(domain, target, targetBase, from, network, networkArtifacts, networkSpecs, ancestors) { + if (!ancestors) ancestors = []; + else if (ancestors.includes(targetBase)) { + console.error(`Core dependencies loop detected: '${targetBase}' in ${ancestors}`, ) + process.exit(1) + } + const specs = { + baseDeps: [], + baseLibs: [], + from, + mutables: { types: [], values: [], }, + immutables: { types: [], values: [], }, + intrinsics: { types: [], values: [], }, + isUpgradable: utils.isUpgradableArtifact(target), + vanity: networkSpecs[targetBase]?.vanity || 0, + }; + // Iterate inheritance tree from `base` to `impl` as to settle deployment specs + target.split(/(?=[A-Z])/).reduce((split, part) => { + split = split + part + if (split.indexOf(targetBase) > -1) { + specs.baseDeps = merge(specs.baseDeps, networkSpecs[split]?.baseDeps); + specs.baseLibs = merge(specs.baseLibs, networkSpecs[split]?.baseLibs); + if (networkSpecs[split]?.from && !utils.isDryRun(network)) { + specs.from = networkSpecs[split].from + } + if (networkSpecs[split]?.vanity && !utils.isUpgradableArtifact(target)) { + specs.vanity = networkSpecs[split].vanity + } + if (networkSpecs[split]?.immutables) { + specs.immutables.types.push(...networkSpecs[split]?.immutables.types); + specs.immutables.values.push(...networkSpecs[split]?.immutables.values); + } + if (networkSpecs[split]?.mutables) { + specs.mutables.types.push(...networkSpecs[split]?.mutables.types); + specs.mutables.values.push(...networkSpecs[split]?.mutables.values); + } + } + return split + }) + if (specs.baseDeps.length > 0) { + // Iterate specs.baseDeps as to add deterministic addresses as first intrinsical constructor args + specs.intrinsics.types.push(...new Array(specs.baseDeps.length).fill("address")); + for (const index in specs.baseDeps) { + const depsBase = specs.baseDeps[index] + const depsImpl = networkArtifacts.core[depsBase] + if (utils.isUpgradableArtifact(depsImpl)) { + const depsVanity = networkSpecs[depsBase]?.vanity || Object.keys(networkArtifacts[domain]).indexOf(depsBase); + const depsProxySalt = depsVanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(depsVanity), 32).toString("hex") : "0x0" + specs.intrinsics.values.push(await determineProxyAddr(specs.from, depsProxySalt)); + + } else { + const depsImplSpecs = await unfoldCoreTargetSpecs(domain, depsImpl, depsBase, specs.from, network, networkArtifacts, networkSpecs, [...ancestors, targetBase]) + const depsImplAddr = await determineCoreTargetAddr(depsImpl, depsImplSpecs, networkArtifacts) + specs.intrinsics.values.push(depsImplAddr); + } + } + } + if (specs.isUpgradable) { + // Add version tag to intrinsical constructor args if target artifact is expected to be upgradable + specs.intrinsics.types.push("bytes32"); + specs.intrinsics.values.push(utils.fromAscii(version)); + if (target.indexOf("Trustable") < 0) { + // Add _upgradable constructor args on non-trustable (ergo trustless) but yet upgradable targets + specs.intrinsics.types.push("bool"); + specs.intrinsics.values.push(true); + } + } + specs.constructorArgs = { + types: specs?.immutables?.types || [], + values: specs?.immutables?.values || [], + } + if (specs?.intrinsics) { + specs.constructorArgs.types.push(...specs.intrinsics.types); + specs.constructorArgs.values.push(...specs.intrinsics.values); + } + if (specs?.mutables && !specs.isUpgradable) { + specs.constructorArgs.types.push(...specs.mutables.types); + specs.constructorArgs.values.push(...specs.mutables.values); + } + return specs +} diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js deleted file mode 100644 index 96ff0e0c..00000000 --- a/migrations/scripts/4_proxies.js +++ /dev/null @@ -1,151 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const merge = require("lodash.merge") -const settings = require("../../settings") -const utils = require("../../src/utils") - -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const WitnetDeployer = artifacts.require("WitnetDeployer") -const WitnetProxy = artifacts.require("WitnetProxy") - -module.exports = async function (_, network, [, from, reporter]) { - const targets = settings.getArtifacts(network) - const specs = settings.getSpecs(network) - - const singletons = [ - "WitOracleRadonRegistry", - "WitOracle", - "WitOracleRequestFactory", - "WitPriceFeeds", - ] - - // inject `reporter` within array of addresses as first initialization args - specs.WitOracle.mutables = merge({ - types: ["address[]"], - values: [[reporter]], - }, specs.WitOracle.mutables - ) - - // Deploy/upgrade singleton proxies, if required - for (const index in singletons) { - const key = singletons[index] - await deploy({ - network, - specs, - targets, - key, - from: utils.isDryRun(network) ? from : specs[key].from || from, - }) - } -} - -async function deploy (target) { - const { from, key, network, specs, targets } = target - - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {} - - const mutables = specs[key].mutables - const proxy = artifacts.require(key) - const proxySalt = specs[key].vanity - ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") - : "0x0" - - let proxyAddr = addresses[network][key] || addresses?.default[key] || "" - if (utils.isNullAddress(proxyAddr) || (await web3.eth.getCode(proxyAddr)).length < 3) { - utils.traceHeader(`Deploying '${key}'...`) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const deployer = await WitnetDeployer.deployed() - const impl = await artifacts.require(targets[key]).deployed() - proxyAddr = await deployer.determineProxyAddr.call(proxySalt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length < 3) { - const initdata = mutables ? web3.eth.abi.encodeParameters(mutables.types, mutables.values) : "0x" - if (initdata.length > 2) { - console.info(" ", "> initialize types: ", mutables.types) - console.info(" ", "> initialize params:", mutables.values) - } - const tx = await deployer.proxify(proxySalt, impl.address, initdata, { from }) - utils.traceTx(tx) - } else { - try { - const oldImplAddr = await getProxyImplementation(from, proxyAddr) - const oldImpl = await artifacts.require(targets[key]).at(oldImplAddr) - const oldClass = await oldImpl.class.call({ from }) - const newClass = await impl.class.call({ from }) - if (oldClass !== newClass) { - console.info(`Error: proxy address already taken ("${oldClass}" != "${newClass}")`) - process.exit(1) - } else { - console.info(" ", `> recovered proxy address on class "${oldClass}" ;-)`) - } - } catch (ex) { - console.info("Error: cannot check proxy recoverability:", ex) - } - } - if ((await web3.eth.getCode(proxyAddr)).length > 3) { - if (proxyAddr !== addresses?.default[key]) { - addresses[network][key] = proxyAddr - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - } - } - } else { - console.info(`Error: Contract was not deployed on expected address: ${proxyAddr}`) - process.exit(1) - } - } else { - const oldAddr = await getProxyImplementation(from, proxyAddr) - const newImpl = await artifacts.require(targets[key]).deployed() - if (oldAddr !== newImpl.address) { - utils.traceHeader(`Upgrading '${key}'...`) - const newVersion = await newImpl.version.call({ from }) - const color = newVersion === version ? "\x1b[1;97m" : "\x1b[93m" - if ( - (process.argv.length >= 3 && process.argv[2].includes("--upgrade-all")) || ( - ["y", "yes"].includes((await - utils.prompt(` > Upgrade to ${color}${targets[key]} v${newVersion}\x1b[0m? (y/N) `) - ).toLowerCase().trim()) - ) - ) { - const initdata = mutables ? web3.eth.abi.encodeParameters(mutables.types, mutables.values) : "0x" - if (initdata.length > 2) { - console.info(" ", "> initialize types: ", mutables.types) - console.info(" ", "> initialize params:", mutables.values) - } - try { - const tx = await upgradeProxyTo(from, proxyAddr, newImpl.address, initdata) - utils.traceTx(tx) - } catch (ex) { - console.error(" ", "> Exception:\n", ex) - } - } - } else { - utils.traceHeader(`Skipped '${key}'`) - } - } - proxy.address = proxyAddr - const impl = await artifacts.require(targets[key]).at(proxy.address) - console.info(" ", "> proxy address: ", impl.address) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(impl.address))) - console.info(" ", "> proxy operator: ", await impl.owner.call({ from })) - console.info(" ", "> impl. address: ", await getProxyImplementation(from, proxy.address)) - console.info(" ", "> impl. class: ", await impl.class.call({ from })) - console.info(" ", "> impl. version: ", await impl.version.call({ from })) - console.info() - return proxy -} - -async function getProxyImplementation (from, proxyAddr) { - const proxy = await WitnetProxy.at(proxyAddr) - return await proxy.implementation.call({ from }) -} - -async function upgradeProxyTo (from, proxyAddr, implAddr, initData) { - const proxyContract = await WitnetProxy.at(proxyAddr) - return await proxyContract.upgradeTo(implAddr, initData, { from }) -} diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js deleted file mode 100644 index 17202997..00000000 --- a/migrations/scripts/5_apps.js +++ /dev/null @@ -1,131 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const settings = require("../../settings") -const utils = require("../../src/utils") - -const WitnetDeployer = artifacts.require("WitnetDeployer") - -module.exports = async function (_, network, [, from]) { - const specs = settings.getSpecs(network) - const targets = settings.getArtifacts(network) - - // Community appliances built on top of the Witnet Oracle are meant to be immutable, - // and therefore not upgradable. Appliances can only be deployed - // once all core Witnet Oracle artifacts get deployed and initialized. - - // ========================================================================== - // --- WitRandomnessV21 -------------------------------------------------- - - if (!process.argv.includes("--no-randomness")) { - await deploy({ - network, - targets, - from: utils.isDryRun(network) ? from : specs.WitRandomness.from || from, - key: "WitRandomness", - specs: specs.WitRandomness, - intrinsics: { - types: ["address", "address"], - values: [ - /* _witOracle */ await determineProxyAddr(from, specs.WitOracle?.vanity || 3), - /* _witOracleOperator */ utils.isDryRun(network) ? from : specs?.WitRandomness?.from || from, - ], - }, - }) - } -} - -async function deploy (target) { - const { from, key, intrinsics, network, specs, targets } = target - const { libs, immutables, vanity } = specs - const salt = vanity ? "0x" + utils.padLeft(vanity.toString(16), "0", 64) : "0x0" - - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {} - - const selection = utils.getWitnetArtifactsFromArgs() - const artifact = artifacts.require(key) - const contract = artifacts.require(targets[key]) - if ( - (!utils.isNullAddress(addresses[network][targets[key]] || addresses?.default[targets[key]]) && - (await web3.eth.getCode(addresses[network][targets[key]] || addresses?.default[targets[key]])).length < 3) || - addresses[network][targets[key]] === "" || - selection.includes(targets[key]) - ) { - utils.traceHeader(`Deploying '${key}'...`) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const deployer = await WitnetDeployer.deployed() - let { types, values } = intrinsics - if (immutables?.types) types = [...types, ...immutables.types] - if (immutables?.values) values = [...values, ...immutables.values] - const constructorArgs = web3.eth.abi.encodeParameters(types, values) - if (constructorArgs.length > 2) { - console.info(" ", "> constructor types:", JSON.stringify(types)) - console.info(" ", "> constructor args: ", constructorArgs.slice(2)) - } - const bytecode = link(contract.toJSON().bytecode, libs, targets) - if (bytecode.indexOf("__") > -1) { - console.info(bytecode) - console.info("Error: Cannot deploy due to some missing libs") - process.exit(1) - } - const initCode = bytecode + constructorArgs.slice(2) - const addr = await deployer.determineAddr.call(initCode, salt, { from }) - const tx = await deployer.deploy(initCode, salt || "0x0", { from }) - utils.traceTx(tx) - if ((await web3.eth.getCode(addr)).length > 3) { - if (addr !== addresses?.default[targets[key]]) { - addresses[network][targets[key]] = addr - // save addresses file if required - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = await utils.readJsonFromFile("./migrations/constructorArgs.json") - if (!args?.default[targets[key]] || constructorArgs.slice(2) !== args.default[targets[key]]) { - if (!args[network]) args[network] = {} - args[network][targets[key]] = constructorArgs.slice(2) - await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) - } - } - } - } else { - console.info(`Error: Contract was not deployed on expected address: ${addr}`) - process.exit(1) - } - } else { - utils.traceHeader(`Skipped '${key}'`) - } - if (!utils.isNullAddress(addresses[network][targets[key]]) || addresses?.default[targets[key]]) { - artifact.address = addresses[network][targets[key]] || addresses?.default[targets[key]] - contract.address = addresses[network][targets[key]] || addresses?.default[targets[key]] - for (const index in libs) { - const libname = libs[index] - const lib = artifacts.require(libname) - contract.link(lib) - console.info(" ", "> external library: ", `${libname}@${lib.address}`) - }; - const appliance = await artifact.deployed() - console.info(" ", "> appliance address: ", appliance.address) - console.info(" ", "> appliance class: ", await appliance.class({ from })) - console.info(" ", "> appliance codehash:", web3.utils.soliditySha3(await web3.eth.getCode(appliance.address))) - console.info(" ", "> appliance specs: ", await appliance.specs({ from })) - console.info() - } - return contract -} - -async function determineProxyAddr (from, nonce) { - const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" - const deployer = await WitnetDeployer.deployed() - return await deployer.determineProxyAddr.call(salt, { from }) -} - -function link (bytecode, libs, targets) { - if (libs && Array.isArray(libs) && libs.length > 0) { - for (const index in libs) { - const key = targets[libs[index]] - const lib = artifacts.require(key) - bytecode = bytecode.replaceAll(`__${key}${"_".repeat(38 - key.length)}`, lib.address.slice(2)) - console.info(" ", `> linked library: ${key} => ${lib.address}`) - } - } - return bytecode -} diff --git a/settings/artifacts.js b/settings/artifacts.js index a8f84e28..084def56 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -1,65 +1,65 @@ module.exports = { default: { WitnetDeployer: "WitnetDeployer", - WitOracle: "WitOracleTrustableDefault", - WitPriceFeeds: "WitPriceFeedsV21", - WitRandomness: "WitRandomnessV21", - WitOracleRadonRegistry: "WitOracleRadonRegistryDefault", - WitOracleRequestFactory: "WitOracleRequestFactoryDefault", - WitOracleRadonEncodingLib: "WitOracleRadonEncodingLib", - WitOracleResultErrorsLib: "WitOracleResultErrorsLib", - WitPriceFeedsLib: "WitPriceFeedsLib", - WitOracleDataLib: "WitOracleDataLib", + apps: { + WitPriceFeeds: "WitPriceFeedsUpgradable", + WitRandomness: "WitRandomnessV21", + }, + core: { + WitOracle: "WitOracleTrustableDefault", + WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableDefault", + WitOracleRequestFactory: "WitOracleRequestFactorUpgradableDefault", + }, + libs: { + WitOracleDataLib: "WitOracleDataLib", + WitOracleRadonEncodingLib: "WitOracleRadonEncodingLib", + WitOracleResultErrorsLib: "WitOracleResultErrorsLib", + WitPriceFeedsLib: "WitPriceFeedsLib", + }, + }, + "polygon:amoy": { + core: { + WitOracleRequestFactory: "WitOracleRequestFactoryDefaultV21" + } }, base: { - WitOracle: "WitOracleTrustableOvm2", + core: { WitOracle: "WitOracleTrustableOvm2", }, }, boba: { - WitOracle: "WitOracleTrustableOvm2", + core: { WitOracle: "WitOracleTrustableOvm2", }, }, - "conflux:core:testnet": { - WitnetDeployer: "WitnetDeployerCfxCore", - WitOracleRequestFactory: "WitOracleRequestFactoryCfxCore", - }, - "conflux:core:mainnet": { - WitnetDeployer: "WitnetDeployerCfxCore", - WitOracleRequestFactory: "WitOracleRequestFactoryCfxCore", + "conflux:core": { + WitnetDeployer: "WitnetDeployerConfluxCore", + core: { + WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore", + }, }, mantle: { - WitOracle: "WitOracleTrustableOvm2", + core: { WitOracle: "WitOracleTrustableOvm2", }, }, meter: { WitnetDeployer: "WitnetDeployerMeter", - WitOracleRequestFactory: "WitOracleRequestFactoryCfxCore", + core: { WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore", }, }, optimism: { - WitOracle: "WitOracleTrustableOvm2", - }, - "okx:x1:mainnet": { - WitOracleRadonRegistry: "WitOracleRadonRegistryNoSha256", + core: { WitOracle: "WitOracleTrustableOvm2", }, }, - "okx:x1:sepolia": { - WitOracleRadonRegistry: "WitOracleRadonRegistryNoSha256", + "okx:x1": { + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, }, - "polygon:zkevm:goerli": { - WitOracleRadonRegistry: "WitOracleRadonRegistryNoSha256", - }, - "polygon:zkevm:mainnet": { - WitOracleRadonRegistry: "WitOracleRadonRegistryNoSha256", + "polygon:zkevm": { + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, }, reef: { - WitOracle: "WitOracleTrustableReef", + core: { WitOracle: "WitOracleTrustableReef", }, }, scroll: { - WitOracleRadonRegistry: "WitOracleRadonRegistryNoSha256", - }, - "syscoin:rollux:testnet": { - WitOracle: "WitOracleTrustableOvm2", + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, }, - "syscoin:rollux:mainnet": { - WitOracle: "WitOracleTrustableOvm2", + "syscoin:rollux": { + core: { WitOracle: "WitOracleTrustableOvm2", }, }, ten: { - WitOracle: "WitOracleTrustableObscuro", + core: { WitOracle: "WitOracleTrustableObscuro", }, }, } diff --git a/settings/index.js b/settings/index.js index c6dfc08e..6d1920c1 100644 --- a/settings/index.js +++ b/settings/index.js @@ -7,20 +7,18 @@ const utils = require("../src/utils") module.exports = { getArtifacts: (network) => { - const [eco, net] = utils.getRealmNetworkFromString(network) - return merge( - artifacts.default, - artifacts[eco], - artifacts[net] - ) + let res = artifacts.default; + utils.getNetworkTagsFromString(network).forEach(net => { + res = merge(res, artifacts[net]) + }); + return res; }, getCompilers: (network) => { - const [eco, net] = utils.getRealmNetworkFromString(network) - return merge( - solidity.default, - solidity[eco], - solidity[net], - ) + let res = solidity.default; + utils.getNetworkTagsFromString(network).forEach(net => { + res = merge(res, solidity[net]) + }); + return res; }, getNetworks: () => { return Object.fromEntries(Object.entries(networks) @@ -38,12 +36,11 @@ module.exports = { ) }, getSpecs: (network) => { - const [eco, net] = utils.getRealmNetworkFromString(network) - return merge( - specs.default, - specs[eco], - specs[net] - ) + let res = specs.default; + utils.getNetworkTagsFromString(network).forEach(net => { + res = merge(res, specs[net]) + }); + return res; }, artifacts, solidity, diff --git a/settings/specs.js b/settings/specs.js index 2f7d865e..1e3225db 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -1,97 +1,59 @@ module.exports = { default: { WitOracle: { + baseDeps: [ + "WitOracleRadonRegistry", + ], + baseLibs: [ + "WitOracleDataLib", + "WitOracleResultErrorsLib", + ], immutables: { - types: ["uint256", "uint256", "uint256", "uint256"], + types: [ "(uint32, uint32, uint32, uint32)", ], values: [ - /* _reportResultGasBase */ 58282, - /* _reportResultWithCallbackGasBase */ 65273, - /* _reportResultWithCallbackRevertGasBase */ 69546, - /* _sstoreFromZeroGas */ 20000, + [ + /* _reportResultGasBase */ 58282, + /* _reportResultWithCallbackGasBase */ 65273, + /* _reportResultWithCallbackRevertGasBase */ 69546, + /* _sstoreFromZeroGas */ 20000, + ] ], }, - libs: ["WitOracleResultErrorsLib", "WitOracleDataLib"], vanity: 13710368043, // 0x77703aE126B971c9946d562F41Dd47071dA00777 }, - WitPriceFeeds: { - from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", - libs: ["WitPriceFeedsLib"], - vanity: 1865150170, // 0x1111AbA2164AcdC6D291b08DfB374280035E1111 - }, - WitRandomness: { - from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", - vanity: 1060132513, // 0xC0FFEE98AD1434aCbDB894BbB752e138c1006fAB + WitOracleTrustless: { + immutables: { + types: ["uint256", "uint256", ], + values: [ + /* _evmQueryAwaitingBlocks */ 16, + /* _evmQueryReportingStake */ "1000000000000000000", + ], + }, }, WitOracleRadonRegistry: { - libs: ["WitOracleRadonEncodingLib"], + baseLibs: [ + "WitOracleRadonEncodingLib", + ], vanity: 6765579443, // 0x000B61Fe075F545fd37767f40391658275900000 }, WitOracleRequestFactory: { + baseDeps: [ + "WitOracle", + ], vanity: 1240014136, // 0x000DB36997AF1F02209A6F995883B9B699900000 }, - }, - "conflux:core:mainnet": { - WitnetDeployer: { - from: "0x1169bf81ecf738d02fd8d3824dfe02153b334ef7", - }, - WitOracle: { - vanity: 3, - }, - WitPriceFeeds: { - from: "0x1169bf81ecf738d02fd8d3824dfe02153b334ef7", - vanity: 4, - }, - WitRandomness: { - from: "0x1169bf81ecf738d02fd8d3824dfe02153b334ef7", - vanity: 5, - }, - WitOracleRadonRegistry: { - vanity: 1, - }, - WitOracleRequestFactory: { - vanity: 2, - }, - }, - "conflux:core:testnet": { - WitnetDeployer: { - from: "0x1169Bf81ecf738d02fd8d3824dfe02153B334eF7", - }, - WitOracle: { - vanity: 3, - }, WitPriceFeeds: { - from: "0x1169Bf81ecf738d02fd8d3824dfe02153B334eF7", - vanity: 4, - }, - WitRandomness: { - from: "0x1169Bf81ecf738d02fd8d3824dfe02153B334eF7", - vanity: 5, - }, - WitOracleRadonRegistry: { - vanity: 1, - }, - WitOracleRequestFactory: { - vanity: 2, - }, - }, - meter: { - WitnetDeployer: { - from: "0xE169Bf81Ecf738d02fD8d3824DFe02153b334eF7", - }, - WitPriceFeeds: { - from: "0xE169Bf81Ecf738d02fD8d3824DFe02153b334eF7", + baseLibs: [ + "WitPriceFeedsLib", + ], + vanity: 1865150170, // 0x1111AbA2164AcdC6D291b08DfB374280035E1111 }, WitRandomness: { - from: "0xE169Bf81Ecf738d02fD8d3824DFe02153b334eF7", + vanity: 1060132513, // 0xC0FFEE98AD1434aCbDB894BbB752e138c1006fAB }, }, + reef: { - WitnetDeployer: { - from: "0xB309D64D6535E95eDBA9A899A8a8D11f1BEC9357", - }, - WitPriceFeeds: { - from: "0xB309D64D6535E95eDBA9A899A8a8D11f1BEC9357", - }, WitOracle: { immutables: { values: [ @@ -99,8 +61,5 @@ module.exports = { ], }, }, - WitRandomness: { - from: "0xB309D64D6535E95eDBA9A899A8a8D11f1BEC9357", - }, }, } diff --git a/src/utils.js b/src/utils.js index 90f8fb57..e7b366c5 100644 --- a/src/utils.js +++ b/src/utils.js @@ -6,16 +6,24 @@ const readline = require("readline") module.exports = { fromAscii, + getNetworkAppsArtifactAddress, + getNetworkArtifactAddress, + getNetworkBaseArtifactAddress, + getNetworkCoreArtifactAddress, + getNetworkLibsArtifactAddress, + getNetworkTagsFromString, getRealmNetworkFromArgs, getRealmNetworkFromString, getWitnetArtifactsFromArgs, getWitnetRequestMethodString, isDryRun, isNullAddress, + isUpgradableArtifact, padLeft, prompt, readJsonFromFile, overwriteJsonFile, + traceData, traceHeader, traceTx, traceVerify, @@ -30,6 +38,71 @@ function fromAscii (str) { return "0x" + arr1.join("") } +function getNetworkAppsArtifactAddress(network, addresses, artifact) { + const tags = getNetworkTagsFromString(network) + for (const index in tags) { + const network = tags[index] + if (addresses[network] && addresses[network]?.apps && addresses[network].apps[artifact]) { + return addresses[network].apps[artifact] + } + } + return addresses?.default?.apps[artifact] ?? "" +} + +function getNetworkBaseArtifactAddress(network, addresses, artifact) { + const tags = getNetworkTagsFromString(network) + for (const index in tags) { + const network = tags[index] + if (addresses[network] && addresses[network][artifact]) { + return addresses[network][artifact] + } + } + return addresses?.default[artifact] ?? "" +} + +function getNetworkArtifactAddress(network, domain, addresses, artifact) { + const tags = getNetworkTagsFromString(network) + for (const index in tags) { + const network = tags[index] + if (addresses[network] && addresses[network][domain] && addresses[network][domain][artifact]) { + return addresses[network][domain][artifact] + } + } + return addresses?.default?.core[artifact] ?? "" +} + +function getNetworkCoreArtifactAddress(network, addresses, artifact) { + const tags = getNetworkTagsFromString(network) + for (const index in tags) { + const network = tags[index] + if (addresses[network] && addresses[network]?.core && addresses[network].core[artifact]) { + return addresses[network].core[artifact] + } + } + return addresses?.default?.core[artifact] ?? "" +} + +function getNetworkLibsArtifactAddress(network, addresses, artifact) { + const tags = getNetworkTagsFromString(network) + for (const index in tags) { + const network = tags[index] + if (addresses[network] && addresses[network]?.libs && addresses[network].libs[artifact]) { + return addresses[network].libs[artifact] + } + } + return addresses?.default?.libs?.[artifact] ?? "" +} + +function getNetworkTagsFromString (network) { + network = network ? network.toLowerCase() : "development" + const tags = [] + const parts = network.split(":") + for (ix = 0; ix < parts.length; ix ++) { + tags.push(parts.slice(0, ix + 1).join(":")) + } + return tags +} + function getRealmNetworkFromArgs () { let networkString = process.env.WSB_DEFAULT_CHAIN || process.argv.includes("test") ? "test" : "development" // If a `--network` argument is provided, use that instead @@ -73,6 +146,14 @@ function getWitnetArtifactsFromArgs () { } return argv }) + if (selection.length == 0) { + process.argv[2]?.split(" ").map((argv, index, args) => { + if (argv === "--artifacts") { + selection = args[index + 1].split(",") + } + return argv + }) + } return selection }; @@ -86,6 +167,12 @@ function isNullAddress (addr) { addr === "0x0000000000000000000000000000000000000000" } +function isUpgradableArtifact(impl) { + return ( + impl.indexOf("Upgradable") > -1 || impl.indexOf("Trustable") > -1 + ); +} + function padLeft (str, char, size) { if (str.length < size) { return char.repeat((size - str.length) / char.length) + str @@ -128,6 +215,17 @@ async function overwriteJsonFile (filename, extra) { lockfile.unlockSync(filename) } +function traceData(header, data, width, color) { + process.stdout.write(header) + if (color) process.stdout.write(color); + for (let ix = 0; ix < data.length / width; ix ++) { + if (ix > 0) process.stdout.write(" ".repeat(header.length)) + process.stdout.write(data.slice(width * ix, width * (ix + 1))) + process.stdout.write("\n") + } + if (color) process.stdout.write("\x1b[0m") +} + function traceHeader (header) { console.log("") console.log(" ", header) @@ -135,16 +233,16 @@ function traceHeader (header) { } function traceTx (tx) { - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> EVM tx sender: \x1b[93m", tx.receipt.from, "\x1b[0m") + console.info(" ", "> EVM tx hash: \x1b[33m", tx.receipt.transactionHash.slice(2), "\x1b[0m") + console.info(" ", "> EVM tx gas used: ", `\x1b[33m${tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}\x1b[0m`) if (tx.receipt?.effectiveGasPrice) { - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", parseFloat( - BigInt(tx.receipt.gasUsed) * - BigInt(tx.receipt.effectiveGasPrice) / - BigInt(10 ** 18) - ).toString(), - "ETH" + console.info(" ", "> EVM tx gas price: ", `\x1b[33m${tx.receipt.effectiveGasPrice / 10 ** 9}`, "gwei\x1b[0m") + console.info(" ", "> EVM tx total cost: ", `\x1b[33m${parseFloat( + (BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice)) + / BigInt(10 ** 18) + ).toString()}`, + "ETH\x1b[0m" ) } } From 0d73169f8f0c09c3c63ea78b5c8bb1755a2c8820 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 09:10:00 +0200 Subject: [PATCH 16/24] fix(test): latest refactorings --- test/mocks/WitMockedPriceFeeds.sol | 6 +++--- test/mocks/WitMockedRadonRegistry.sol | 6 +++--- test/witOracleRadonRegistry.spec.js | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/test/mocks/WitMockedPriceFeeds.sol b/test/mocks/WitMockedPriceFeeds.sol index 416feb13..02ec2bef 100644 --- a/test/mocks/WitMockedPriceFeeds.sol +++ b/test/mocks/WitMockedPriceFeeds.sol @@ -4,16 +4,16 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitMockedOracle.sol"; -import "../../contracts/apps/WitPriceFeedsV21.sol"; +import "../../contracts/apps/WitPriceFeedsUpgradable.sol"; /// @title Mocked implementation of `WitPriceFeeds`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE /// @dev THE `WitPriceFeeds` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. -contract WitMockedPriceFeeds is WitPriceFeedsV21 { +contract WitMockedPriceFeeds is WitPriceFeedsUpgradable { constructor(WitMockedOracle _witOracle) - WitPriceFeedsV21( + WitPriceFeedsUpgradable( _witOracle, false, bytes32("mocked") diff --git a/test/mocks/WitMockedRadonRegistry.sol b/test/mocks/WitMockedRadonRegistry.sol index d1876651..b829094b 100644 --- a/test/mocks/WitMockedRadonRegistry.sol +++ b/test/mocks/WitMockedRadonRegistry.sol @@ -3,16 +3,16 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../../contracts/core/trustless/WitOracleRadonRegistryDefault.sol"; +import "../../contracts/core/trustless/WitOracleRadonRegistryBaseUpgradableDefault.sol"; /// @title Mocked implementation of `WitOracleRadonRegistry`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE /// @dev THE `WitOracleRadonRegistry` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. -contract WitMockedRadonRegistry is WitOracleRadonRegistryDefault { +contract WitMockedRadonRegistry is WitOracleRadonRegistryBaseUpgradableDefault { constructor() - WitOracleRadonRegistryDefault( + WitOracleRadonRegistryBaseUpgradableDefault( false, bytes32("mocked") ) diff --git a/test/witOracleRadonRegistry.spec.js b/test/witOracleRadonRegistry.spec.js index b2231163..9d808812 100644 --- a/test/witOracleRadonRegistry.spec.js +++ b/test/witOracleRadonRegistry.spec.js @@ -3,7 +3,7 @@ import("chai") const utils = require("../src/utils") const { expectEvent, expectRevert } = require("@openzeppelin/test-helpers") -const WitOracleRadonRegistry = artifacts.require("WitOracleRadonRegistryDefault") +const WitOracleRadonRegistry = artifacts.require("WitOracleRadonRegistryUpgradableDefault") const WitOracleRadonEncodingLib = artifacts.require("WitOracleRadonEncodingLib") contract("WitOracleRadonRegistry", (accounts) => { From af672fb89e7a6b187f1f7e321a05aa3dc82d2c31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 09:11:59 +0200 Subject: [PATCH 17/24] chore: revisit pnpm package deps lock --- pnpm-lock.yaml | 3482 ++++++++++++++++++++++++------------------------ 1 file changed, 1721 insertions(+), 1761 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3eb7ba20..79acdc95 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,73 +1,102 @@ -lockfileVersion: 5.4 - -specifiers: - '@nomicfoundation/hardhat-verify': ^2.0.4 - '@openzeppelin/contracts': ^5.0.1 - '@openzeppelin/contracts-upgradeable': ^5.0.1 - '@openzeppelin/test-helpers': ~0.5.16 - ado-contracts: 1.0.0 - bn.js: ^4.11.0 - chai: ^5.1.0 - custom-error-test-helper: ^1.0.6 - dotenv: ^16.4.4 - eslint: ^8.56.0 - eslint-config-standard: ^17.1.0 - eslint-plugin-import: ^2.29.1 - eslint-plugin-n: ^16.6.2 - eslint-plugin-promise: ^6.1.1 - eth-gas-reporter: ^0.2.27 - eth-helpers: ^1.3.0 - hardhat: ^2.19.5 - lodash.merge: ^4.6.2 - nanoassert: ^2.0.0 - proper-lockfile: ^4.1.2 - sha3-wasm: ^1.0.0 - solhint: ^4.1.1 - truffle: ^5.11.5 - truffle-assertions: ^0.9.2 - truffle-flattener: ^1.6.0 - truffle-plugin-verify: ^0.6.7 - witnet-toolkit: ^2.0.1 +lockfileVersion: '6.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false dependencies: - dotenv: 16.4.4 - lodash.merge: 4.6.2 - proper-lockfile: 4.1.2 + dotenv: + specifier: ^16.4.4 + version: 16.4.4 + lodash.merge: + specifier: ^4.6.2 + version: 4.6.2 + proper-lockfile: + specifier: ^4.1.2 + version: 4.1.2 devDependencies: - '@nomicfoundation/hardhat-verify': 2.0.4_hardhat@2.19.5 - '@openzeppelin/contracts': 5.0.1 - '@openzeppelin/contracts-upgradeable': 5.0.1_qffjc7vved4cgcgrp7e6uufd2e - '@openzeppelin/test-helpers': 0.5.16_bn.js@4.12.0 - ado-contracts: 1.0.0 - bn.js: 4.12.0 - chai: 5.1.0 - custom-error-test-helper: 1.0.6 - eslint: 8.56.0 - eslint-config-standard: 17.1.0_ot4howdeavqht6h5s42eunnfxi - eslint-plugin-import: 2.29.1_eslint@8.56.0 - eslint-plugin-n: 16.6.2_eslint@8.56.0 - eslint-plugin-promise: 6.1.1_eslint@8.56.0 - eth-gas-reporter: 0.2.27 - eth-helpers: 1.3.1 - hardhat: 2.19.5 - nanoassert: 2.0.0 - sha3-wasm: 1.0.0 - solhint: 4.1.1 - truffle: 5.11.5 - truffle-assertions: 0.9.2 - truffle-flattener: 1.6.0 - truffle-plugin-verify: 0.6.7 - witnet-toolkit: 2.0.1 + '@nomicfoundation/hardhat-verify': + specifier: ^2.0.4 + version: 2.0.4(hardhat@2.22.13) + '@openzeppelin/contracts': + specifier: ^5.0.1 + version: 5.1.0 + '@openzeppelin/contracts-upgradeable': + specifier: ^5.0.1 + version: 5.1.0(@openzeppelin/contracts@5.1.0) + '@openzeppelin/test-helpers': + specifier: ~0.5.16 + version: 0.5.16(bn.js@4.12.0) + ado-contracts: + specifier: 1.0.0 + version: 1.0.0 + bn.js: + specifier: ^4.11.0 + version: 4.12.0 + chai: + specifier: ^5.1.0 + version: 5.1.0 + custom-error-test-helper: + specifier: ^1.0.6 + version: 1.0.6 + eslint: + specifier: ^8.56.0 + version: 8.56.0 + eslint-config-standard: + specifier: ^17.1.0 + version: 17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0) + eslint-plugin-import: + specifier: ^2.29.1 + version: 2.29.1(eslint@8.56.0) + eslint-plugin-n: + specifier: ^16.6.2 + version: 16.6.2(eslint@8.56.0) + eslint-plugin-promise: + specifier: ^6.1.1 + version: 6.1.1(eslint@8.56.0) + eth-gas-reporter: + specifier: ^0.2.27 + version: 0.2.27 + eth-helpers: + specifier: ^1.3.0 + version: 1.3.1 + hardhat: + specifier: ^2.22.2 + version: 2.22.13 + nanoassert: + specifier: ^2.0.0 + version: 2.0.0 + sha3-wasm: + specifier: ^1.0.0 + version: 1.0.0 + solhint: + specifier: ^4.1.1 + version: 4.1.1 + truffle: + specifier: ^5.11.5 + version: 5.11.5 + truffle-assertions: + specifier: ^0.9.2 + version: 0.9.2 + truffle-flattener: + specifier: ^1.6.0 + version: 1.6.0 + truffle-plugin-verify: + specifier: ^0.6.7 + version: 0.6.7 + witnet-toolkit: + specifier: ^2.0.1 + version: 2.0.1 packages: - /@aashutoshrathi/word-wrap/1.2.6: + /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} dev: true - /@apollo/protobufjs/1.2.6: + /@apollo/protobufjs@1.2.6: resolution: {integrity: sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==} hasBin: true requiresBuild: true @@ -88,7 +117,7 @@ packages: dev: true optional: true - /@apollo/protobufjs/1.2.7: + /@apollo/protobufjs@1.2.7: resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} hasBin: true requiresBuild: true @@ -108,16 +137,18 @@ packages: dev: true optional: true - /@apollo/usage-reporting-protobuf/4.1.1: + /@apollo/usage-reporting-protobuf@4.1.1: resolution: {integrity: sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==} + requiresBuild: true dependencies: '@apollo/protobufjs': 1.2.7 dev: true optional: true - /@apollo/utils.dropunuseddefinitions/1.1.0_graphql@15.8.0: + /@apollo/utils.dropunuseddefinitions@1.1.0(graphql@15.8.0): resolution: {integrity: sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: @@ -125,22 +156,25 @@ packages: dev: true optional: true - /@apollo/utils.keyvaluecache/1.0.2: + /@apollo/utils.keyvaluecache@1.0.2: resolution: {integrity: sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==} + requiresBuild: true dependencies: '@apollo/utils.logger': 1.0.1 lru-cache: 7.13.1 dev: true optional: true - /@apollo/utils.logger/1.0.1: + /@apollo/utils.logger@1.0.1: resolution: {integrity: sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==} + requiresBuild: true dev: true optional: true - /@apollo/utils.printwithreducedwhitespace/1.1.0_graphql@15.8.0: + /@apollo/utils.printwithreducedwhitespace@1.1.0(graphql@15.8.0): resolution: {integrity: sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: @@ -148,9 +182,10 @@ packages: dev: true optional: true - /@apollo/utils.removealiases/1.0.0_graphql@15.8.0: + /@apollo/utils.removealiases@1.0.0(graphql@15.8.0): resolution: {integrity: sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: @@ -158,9 +193,10 @@ packages: dev: true optional: true - /@apollo/utils.sortast/1.1.0_graphql@15.8.0: + /@apollo/utils.sortast@1.1.0(graphql@15.8.0): resolution: {integrity: sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: @@ -169,9 +205,10 @@ packages: dev: true optional: true - /@apollo/utils.stripsensitiveliterals/1.2.0_graphql@15.8.0: + /@apollo/utils.stripsensitiveliterals@1.2.0(graphql@15.8.0): resolution: {integrity: sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: @@ -179,25 +216,27 @@ packages: dev: true optional: true - /@apollo/utils.usagereporting/1.0.1_graphql@15.8.0: + /@apollo/utils.usagereporting@1.0.1(graphql@15.8.0): resolution: {integrity: sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ==} engines: {node: '>=12.13.0'} + requiresBuild: true peerDependencies: graphql: 14.x || 15.x || 16.x dependencies: '@apollo/usage-reporting-protobuf': 4.1.1 - '@apollo/utils.dropunuseddefinitions': 1.1.0_graphql@15.8.0 - '@apollo/utils.printwithreducedwhitespace': 1.1.0_graphql@15.8.0 - '@apollo/utils.removealiases': 1.0.0_graphql@15.8.0 - '@apollo/utils.sortast': 1.1.0_graphql@15.8.0 - '@apollo/utils.stripsensitiveliterals': 1.2.0_graphql@15.8.0 + '@apollo/utils.dropunuseddefinitions': 1.1.0(graphql@15.8.0) + '@apollo/utils.printwithreducedwhitespace': 1.1.0(graphql@15.8.0) + '@apollo/utils.removealiases': 1.0.0(graphql@15.8.0) + '@apollo/utils.sortast': 1.1.0(graphql@15.8.0) + '@apollo/utils.stripsensitiveliterals': 1.2.0(graphql@15.8.0) graphql: 15.8.0 dev: true optional: true - /@apollographql/apollo-tools/0.5.4_graphql@15.8.0: + /@apollographql/apollo-tools@0.5.4(graphql@15.8.0): resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} engines: {node: '>=8', npm: '>=6'} + requiresBuild: true peerDependencies: graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 dependencies: @@ -205,14 +244,15 @@ packages: dev: true optional: true - /@apollographql/graphql-playground-html/1.6.29: + /@apollographql/graphql-playground-html@1.6.29: resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} + requiresBuild: true dependencies: xss: 1.0.14 dev: true optional: true - /@babel/code-frame/7.23.5: + /@babel/code-frame@7.23.5: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: @@ -220,12 +260,12 @@ packages: chalk: 2.4.2 dev: true - /@babel/helper-validator-identifier/7.22.20: + /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} dev: true - /@babel/highlight/7.23.4: + /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: @@ -234,50 +274,19 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/runtime/7.23.9: + /@babel/runtime@7.23.9: resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.1 dev: true - /@chainsafe/as-sha256/0.3.1: - resolution: {integrity: sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg==} - dev: true - - /@chainsafe/persistent-merkle-tree/0.4.2: - resolution: {integrity: sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ==} - dependencies: - '@chainsafe/as-sha256': 0.3.1 - dev: true - - /@chainsafe/persistent-merkle-tree/0.5.0: - resolution: {integrity: sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw==} - dependencies: - '@chainsafe/as-sha256': 0.3.1 - dev: true - - /@chainsafe/ssz/0.10.2: - resolution: {integrity: sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg==} - dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.5.0 - dev: true - - /@chainsafe/ssz/0.9.4: - resolution: {integrity: sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ==} - dependencies: - '@chainsafe/as-sha256': 0.3.1 - '@chainsafe/persistent-merkle-tree': 0.4.2 - case: 1.6.3 - dev: true - - /@colors/colors/1.6.0: + /@colors/colors@1.6.0: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} dev: true - /@dabh/diagnostics/2.0.3: + /@dabh/diagnostics@2.0.3: resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} dependencies: colorspace: 1.1.4 @@ -285,7 +294,7 @@ packages: kuler: 2.0.0 dev: true - /@ensdomains/address-encoder/0.1.9: + /@ensdomains/address-encoder@0.1.9: resolution: {integrity: sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==} dependencies: bech32: 1.1.4 @@ -297,7 +306,7 @@ packages: ripemd160: 2.0.2 dev: true - /@ensdomains/ens/0.4.5: + /@ensdomains/ens@0.4.5: resolution: {integrity: sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==} deprecated: Please use @ensdomains/ens-contracts dependencies: @@ -308,7 +317,7 @@ packages: web3-utils: 1.10.4 dev: true - /@ensdomains/ensjs/2.1.0: + /@ensdomains/ensjs@2.1.0: resolution: {integrity: sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==} dependencies: '@babel/runtime': 7.23.9 @@ -324,12 +333,12 @@ packages: - utf-8-validate dev: true - /@ensdomains/resolver/0.2.4: + /@ensdomains/resolver@0.2.4: resolution: {integrity: sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==} deprecated: Please use @ensdomains/ens-contracts dev: true - /@eslint-community/eslint-utils/4.4.0_eslint@8.56.0: + /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -339,17 +348,17 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp/4.10.0: + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc/2.1.4: + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.1 @@ -361,46 +370,46 @@ packages: - supports-color dev: true - /@eslint/js/8.56.0: + /@eslint/js@8.56.0: resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@ethereumjs/common/2.5.0: + /@ethereumjs/common@2.5.0: resolution: {integrity: sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg==} dependencies: crc-32: 1.2.2 ethereumjs-util: 7.1.5 dev: true - /@ethereumjs/common/2.6.5: + /@ethereumjs/common@2.6.5: resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} dependencies: crc-32: 1.2.2 ethereumjs-util: 7.1.5 dev: true - /@ethereumjs/rlp/4.0.1: + /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} engines: {node: '>=14'} hasBin: true dev: true - /@ethereumjs/tx/3.3.2: + /@ethereumjs/tx@3.3.2: resolution: {integrity: sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog==} dependencies: '@ethereumjs/common': 2.5.0 ethereumjs-util: 7.1.5 dev: true - /@ethereumjs/tx/3.5.2: + /@ethereumjs/tx@3.5.2: resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} dependencies: '@ethereumjs/common': 2.6.5 ethereumjs-util: 7.1.5 dev: true - /@ethereumjs/util/8.0.2: + /@ethereumjs/util@8.0.2: resolution: {integrity: sha512-b1Fcxmq+ckCdoLPhVIBkTcH8szigMapPuEmD8EDakvtI5Na5rzmX1sBW73YQqaPc7iUxGCAzZP1LrFQ7aEMugA==} engines: {node: '>=14'} dependencies: @@ -409,7 +418,7 @@ packages: ethereum-cryptography: 1.2.0 dev: true - /@ethereumjs/util/8.1.0: + /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} dependencies: @@ -418,7 +427,7 @@ packages: micro-ftch: 0.3.1 dev: true - /@ethersproject/abi/5.2.0: + /@ethersproject/abi@5.2.0: resolution: {integrity: sha512-24ExfHa0VbIOUHbB36b6lCVmWkaIVmrd9/m8MICtmSsRKzlugWqUD0B8g0zrRylXNxAOc3V6T4xKJ8jEDSvp3w==} dependencies: '@ethersproject/address': 5.7.0 @@ -432,7 +441,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/abi/5.7.0: + /@ethersproject/abi@5.7.0: resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} dependencies: '@ethersproject/address': 5.7.0 @@ -446,7 +455,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/abstract-provider/5.2.0: + /@ethersproject/abstract-provider@5.2.0: resolution: {integrity: sha512-Xi7Pt+CulRijc/vskBGIaYMEhafKjoNx8y4RNj/dnSpXHXScOJUSTtypqGBUngZddRbcwZGbHwEr6DZoKZwIZA==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -458,7 +467,7 @@ packages: '@ethersproject/web': 5.7.1 dev: true - /@ethersproject/abstract-provider/5.7.0: + /@ethersproject/abstract-provider@5.7.0: resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -470,7 +479,7 @@ packages: '@ethersproject/web': 5.7.1 dev: true - /@ethersproject/abstract-signer/5.2.0: + /@ethersproject/abstract-signer@5.2.0: resolution: {integrity: sha512-JTXzLUrtoxpOEq1ecH86U7tstkEa9POKAGbGBb+gicbjGgzYYkLR4/LD83SX2/JNWvtYyY8t5errt5ehiy1gxQ==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -480,7 +489,7 @@ packages: '@ethersproject/properties': 5.7.0 dev: true - /@ethersproject/abstract-signer/5.7.0: + /@ethersproject/abstract-signer@5.7.0: resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -490,7 +499,7 @@ packages: '@ethersproject/properties': 5.7.0 dev: true - /@ethersproject/address/5.2.0: + /@ethersproject/address@5.2.0: resolution: {integrity: sha512-2YfZlalWefOEfnr/CdqKRrgMgbKidYc+zG4/ilxSdcryZSux3eBU5/5btAT/hSiaHipUjd8UrWK8esCBHU6QNQ==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -500,7 +509,7 @@ packages: '@ethersproject/rlp': 5.7.0 dev: true - /@ethersproject/address/5.7.0: + /@ethersproject/address@5.7.0: resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -510,33 +519,33 @@ packages: '@ethersproject/rlp': 5.7.0 dev: true - /@ethersproject/base64/5.2.0: + /@ethersproject/base64@5.2.0: resolution: {integrity: sha512-D9wOvRE90QBI+yFsKMv0hnANiMzf40Xicq9JZbV9XYzh7srImmwmMcReU2wHjOs9FtEgSJo51Tt+sI1dKPYKDg==} dependencies: '@ethersproject/bytes': 5.7.0 dev: true - /@ethersproject/base64/5.7.0: + /@ethersproject/base64@5.7.0: resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} dependencies: '@ethersproject/bytes': 5.7.0 dev: true - /@ethersproject/basex/5.2.0: + /@ethersproject/basex@5.2.0: resolution: {integrity: sha512-Oo7oX7BmaHLY/8ZsOLI5W0mrSwPBb1iboosN17jfK/4vGAtKjAInDai9I72CzN4NRJaMN5FkFLoPYywGqgGHlg==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/properties': 5.7.0 dev: true - /@ethersproject/basex/5.7.0: + /@ethersproject/basex@5.7.0: resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/properties': 5.7.0 dev: true - /@ethersproject/bignumber/5.2.0: + /@ethersproject/bignumber@5.2.0: resolution: {integrity: sha512-+MNQTxwV7GEiA4NH/i51UqQ+lY36O0rxPdV+0qzjFSySiyBlJpLk6aaa4UTvKmYWlI7YKZm6vuyCENeYn7qAOw==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -544,7 +553,7 @@ packages: bn.js: 4.12.0 dev: true - /@ethersproject/bignumber/5.7.0: + /@ethersproject/bignumber@5.7.0: resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -552,31 +561,31 @@ packages: bn.js: 5.2.1 dev: true - /@ethersproject/bytes/5.2.0: + /@ethersproject/bytes@5.2.0: resolution: {integrity: sha512-O1CRpvJDnRTB47vvW8vyqojUZxVookb4LJv/s06TotriU3Xje5WFvlvXJu1yTchtxTz9BbvJw0lFXKpyO6Dn7w==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/bytes/5.7.0: + /@ethersproject/bytes@5.7.0: resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/constants/5.2.0: + /@ethersproject/constants@5.2.0: resolution: {integrity: sha512-p+34YG0KbHS20NGdE+Ic0M6egzd7cDvcfoO9RpaAgyAYm3V5gJVqL7UynS87yCt6O6Nlx6wRFboPiM5ctAr+jA==} dependencies: '@ethersproject/bignumber': 5.7.0 dev: true - /@ethersproject/constants/5.7.0: + /@ethersproject/constants@5.7.0: resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} dependencies: '@ethersproject/bignumber': 5.7.0 dev: true - /@ethersproject/contracts/5.2.0: + /@ethersproject/contracts@5.2.0: resolution: {integrity: sha512-/2fg5tWPG6Z4pciEWpwGji3ggGA5j0ChVNF7NTmkOhvFrrJuWnRpzbvYA00nz8tBDNCOV3cwub5zfWRpgwYEJQ==} dependencies: '@ethersproject/abi': 5.7.0 @@ -591,7 +600,7 @@ packages: '@ethersproject/transactions': 5.7.0 dev: true - /@ethersproject/contracts/5.7.0: + /@ethersproject/contracts@5.7.0: resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} dependencies: '@ethersproject/abi': 5.7.0 @@ -606,7 +615,7 @@ packages: '@ethersproject/transactions': 5.7.0 dev: true - /@ethersproject/hash/5.2.0: + /@ethersproject/hash@5.2.0: resolution: {integrity: sha512-wEGry2HFFSssFiNEkFWMzj1vpdFv4rQlkBp41UfL6J58zKGNycoAWimokITDMk8p7548MKr27h48QfERnNKkRw==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -619,7 +628,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/hash/5.7.0: + /@ethersproject/hash@5.7.0: resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -633,7 +642,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/hdnode/5.2.0: + /@ethersproject/hdnode@5.2.0: resolution: {integrity: sha512-ffq2JrW5AftCmfWZ8DxpdWdw/x06Yn+e9wrWHLpj8If1+w87W4LbTMRUaUmO1DUSN8H8g/6kMUKCTJPVuxsuOw==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -650,7 +659,7 @@ packages: '@ethersproject/wordlists': 5.7.0 dev: true - /@ethersproject/hdnode/5.7.0: + /@ethersproject/hdnode@5.7.0: resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -667,7 +676,7 @@ packages: '@ethersproject/wordlists': 5.7.0 dev: true - /@ethersproject/json-wallets/5.2.0: + /@ethersproject/json-wallets@5.2.0: resolution: {integrity: sha512-iWxSm9XiugEtaehYD6w1ImmXeatjcGcrQvffZVJHH1UqV4FckDzrOYnZBRHPQRYlnhNVrGTld1+S0Cu4MB8gdw==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -685,7 +694,7 @@ packages: scrypt-js: 3.0.1 dev: true - /@ethersproject/json-wallets/5.7.0: + /@ethersproject/json-wallets@5.7.0: resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} dependencies: '@ethersproject/abstract-signer': 5.7.0 @@ -703,67 +712,67 @@ packages: scrypt-js: 3.0.1 dev: true - /@ethersproject/keccak256/5.2.0: + /@ethersproject/keccak256@5.2.0: resolution: {integrity: sha512-LqyxTwVANga5Y3L1yo184czW6b3PibabN8xyE/eOulQLLfXNrHHhwrOTpOhoVRWCICVCD/5SjQfwqTrczjS7jQ==} dependencies: '@ethersproject/bytes': 5.7.0 js-sha3: 0.5.7 dev: true - /@ethersproject/keccak256/5.7.0: + /@ethersproject/keccak256@5.7.0: resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} dependencies: '@ethersproject/bytes': 5.7.0 js-sha3: 0.8.0 dev: true - /@ethersproject/logger/5.2.0: + /@ethersproject/logger@5.2.0: resolution: {integrity: sha512-dPZ6/E3YiArgG8dI/spGkaRDry7YZpCntf4gm/c6SI8Mbqiihd7q3nuLN5VvDap/0K3xm3RE1AIUOcUwwh2ezQ==} dev: true - /@ethersproject/logger/5.7.0: + /@ethersproject/logger@5.7.0: resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} dev: true - /@ethersproject/networks/5.2.0: + /@ethersproject/networks@5.2.0: resolution: {integrity: sha512-q+htMgq7wQoEnjlkdHM6t1sktKxNbEB/F6DQBPNwru7KpQ1R0n0UTIXJB8Rb7lSnvjqcAQ40X3iVqm94NJfYDw==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/networks/5.7.1: + /@ethersproject/networks@5.7.1: resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/pbkdf2/5.2.0: + /@ethersproject/pbkdf2@5.2.0: resolution: {integrity: sha512-qKOoO6yir/qnAgg6OP3U4gRuZ6jl9P7xwggRu/spVfnuaR+wa490AatWLqB1WOXKf6JFjm5yOaT/T5fCICQVdQ==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/sha2': 5.7.0 dev: true - /@ethersproject/pbkdf2/5.7.0: + /@ethersproject/pbkdf2@5.7.0: resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/sha2': 5.7.0 dev: true - /@ethersproject/properties/5.2.0: + /@ethersproject/properties@5.2.0: resolution: {integrity: sha512-oNFkzcoGwXXV+/Yp/MLcDLrL/2i360XIy2YN9yRZJPnIbLwjroFNLiRzLs6PyPw1D09Xs8OcPR1/nHv6xDKE2A==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/properties/5.7.0: + /@ethersproject/properties@5.7.0: resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} dependencies: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/providers/5.2.0: + /@ethersproject/providers@5.2.0: resolution: {integrity: sha512-Yf/ZUqCrVr+jR0SHA9GuNZs4R1xnV9Ibnh1TlOa0ZzI6o+Qf8bEyE550k9bYI4zk2f9x9baX2RRs6BJY7Jz/WA==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -790,7 +799,7 @@ packages: - utf-8-validate dev: true - /@ethersproject/providers/5.7.2: + /@ethersproject/providers@5.7.2: resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -818,35 +827,35 @@ packages: - utf-8-validate dev: true - /@ethersproject/random/5.2.0: + /@ethersproject/random@5.2.0: resolution: {integrity: sha512-7Nd3qjivBGlDCGDuGYjPi8CXdtVhRZ7NeyBXoJgtnJBwn1S01ahrbMeOUVmRVWrFM0YiSEPEGo7i4xEu2gRPcg==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/random/5.7.0: + /@ethersproject/random@5.7.0: resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/rlp/5.2.0: + /@ethersproject/rlp@5.2.0: resolution: {integrity: sha512-RqGsELtPWxcFhOOhSr0lQ2hBNT9tBE08WK0tb6VQbCk97EpqkbgP8yXED9PZlWMiRGchJTw6S+ExzK62XMX/fw==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/rlp/5.7.0: + /@ethersproject/rlp@5.7.0: resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/sha2/5.2.0: + /@ethersproject/sha2@5.2.0: resolution: {integrity: sha512-Wqqptfn0PRO2mvmpktPW1HOLrrCyGtxhVQxO1ZyePoGrcEOurhICOlIvkTogoX4Q928D3Z9XtSSCUbdOJUF2kg==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -854,7 +863,7 @@ packages: hash.js: 1.1.3 dev: true - /@ethersproject/sha2/5.7.0: + /@ethersproject/sha2@5.7.0: resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -862,7 +871,7 @@ packages: hash.js: 1.1.7 dev: true - /@ethersproject/signing-key/5.2.0: + /@ethersproject/signing-key@5.2.0: resolution: {integrity: sha512-9A+dVSkrVAPuhJnWqLWV/NkKi/KB4iagTKEuojfuApUfeIHEhpwQ0Jx3cBimk7qWISSSKdgiAmIqpvVtZ5FEkg==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -872,7 +881,7 @@ packages: elliptic: 6.5.4 dev: true - /@ethersproject/signing-key/5.7.0: + /@ethersproject/signing-key@5.7.0: resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -883,7 +892,7 @@ packages: hash.js: 1.1.7 dev: true - /@ethersproject/solidity/5.2.0: + /@ethersproject/solidity@5.2.0: resolution: {integrity: sha512-EEFlNyEnONW3CWF8UGWPcqxJUHiaIoofO7itGwO/2gvGpnwlL+WUV+GmQoHNxmn+QJeOHspnZuh6NOVrJL6H1g==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -893,7 +902,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/solidity/5.7.0: + /@ethersproject/solidity@5.7.0: resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -904,7 +913,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/strings/5.2.0: + /@ethersproject/strings@5.2.0: resolution: {integrity: sha512-RmjX800wRYKgrzo2ZCSlA8OCQYyq4+M46VgjSVDVyYkLZctBXC3epqlppDA24R7eo856KNbXqezZsMnHT+sSuA==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -912,7 +921,7 @@ packages: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/strings/5.7.0: + /@ethersproject/strings@5.7.0: resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -920,7 +929,7 @@ packages: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/transactions/5.2.0: + /@ethersproject/transactions@5.2.0: resolution: {integrity: sha512-QrGbhGYsouNNclUp3tWMbckMsuXJTOsA56kT3BuRrLlXJcUH7myIihajXdSfKcyJsvHJPrGZP+U3TKh+sLzZtg==} dependencies: '@ethersproject/address': 5.7.0 @@ -934,7 +943,7 @@ packages: '@ethersproject/signing-key': 5.7.0 dev: true - /@ethersproject/transactions/5.7.0: + /@ethersproject/transactions@5.7.0: resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} dependencies: '@ethersproject/address': 5.7.0 @@ -948,7 +957,7 @@ packages: '@ethersproject/signing-key': 5.7.0 dev: true - /@ethersproject/units/5.2.0: + /@ethersproject/units@5.2.0: resolution: {integrity: sha512-yrwlyomXcBBHp5oSrLxlLkyHN7dVu3PO7hMbQXc00h388zU4TF3o/PAIUhh+x695wgJ19Fa8YgUWCab3a1RDwA==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -956,7 +965,7 @@ packages: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/units/5.7.0: + /@ethersproject/units@5.7.0: resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} dependencies: '@ethersproject/bignumber': 5.7.0 @@ -964,7 +973,7 @@ packages: '@ethersproject/logger': 5.7.0 dev: true - /@ethersproject/wallet/5.2.0: + /@ethersproject/wallet@5.2.0: resolution: {integrity: sha512-uPdjZwUmAJLo1+ybR/G/rL9pv/NEcCqOsjn6RJFvG7RmwP2kS1v5C+F+ysgx2W/PxBIVT+2IEsfXLbBz8s/6Rg==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -984,7 +993,7 @@ packages: '@ethersproject/wordlists': 5.7.0 dev: true - /@ethersproject/wallet/5.7.0: + /@ethersproject/wallet@5.7.0: resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} dependencies: '@ethersproject/abstract-provider': 5.7.0 @@ -1004,7 +1013,7 @@ packages: '@ethersproject/wordlists': 5.7.0 dev: true - /@ethersproject/web/5.2.0: + /@ethersproject/web@5.2.0: resolution: {integrity: sha512-mYb9qxGlOBFR2pR6t1CZczuqqX6r8RQGn7MtwrBciMex3cvA/qs+wbmcDgl+/OZY0Pco/ih6WHQRnVi+4sBeCQ==} dependencies: '@ethersproject/base64': 5.7.0 @@ -1014,7 +1023,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/web/5.7.1: + /@ethersproject/web@5.7.1: resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} dependencies: '@ethersproject/base64': 5.7.0 @@ -1024,7 +1033,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/wordlists/5.2.0: + /@ethersproject/wordlists@5.2.0: resolution: {integrity: sha512-/7TG5r/Zm8Wd9WhoqQ4QnntgMkIfIZ8QVrpU81muiChLD26XLOgmyiqKPL7K058uYt7UZ0wzbXjxyCYadU3xFQ==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -1034,7 +1043,7 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@ethersproject/wordlists/5.7.0: + /@ethersproject/wordlists@5.7.0: resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} dependencies: '@ethersproject/bytes': 5.7.0 @@ -1044,19 +1053,19 @@ packages: '@ethersproject/strings': 5.7.0 dev: true - /@fastify/busboy/2.1.0: + /@fastify/busboy@2.1.0: resolution: {integrity: sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==} engines: {node: '>=14'} dev: true - /@ganache/console.log/0.3.0: + /@ganache/console.log@0.3.0: resolution: {integrity: sha512-cRkjY3gn1zxPxy+PKK/xl12p3KbGwXeS7oGTkXFeey4bhQgd5QBa/+HNMVPflT2BcWLZ91Ir+CRRiRekeyHUWQ==} dependencies: '@ethereumjs/util': 8.0.2 '@ganache/utils': 0.3.0 dev: true - /@ganache/utils/0.3.0: + /@ganache/utils@0.3.0: resolution: {integrity: sha512-cxoG8KQxkYPl71BPdKZihjVKqN2AE7WLXjU65BVOQ5jEYrUH3CWSxA9v7CCUJj4e0HoXFpVFIZ+1HRkiBKKiKg==} dependencies: emittery: 0.10.0 @@ -1066,12 +1075,13 @@ packages: '@trufflesuite/bigint-buffer': 1.1.9 dev: true - /@graphql-tools/batch-execute/8.5.1_graphql@15.8.0: + /@graphql-tools/batch-execute@8.5.1(graphql@15.8.0): resolution: {integrity: sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 8.9.0_graphql@15.8.0 + '@graphql-tools/utils': 8.9.0(graphql@15.8.0) dataloader: 2.1.0 graphql: 15.8.0 tslib: 2.4.1 @@ -1079,14 +1089,15 @@ packages: dev: true optional: true - /@graphql-tools/delegate/8.8.1_graphql@15.8.0: + /@graphql-tools/delegate@8.8.1(graphql@15.8.0): resolution: {integrity: sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/batch-execute': 8.5.1_graphql@15.8.0 - '@graphql-tools/schema': 8.5.1_graphql@15.8.0 - '@graphql-tools/utils': 8.9.0_graphql@15.8.0 + '@graphql-tools/batch-execute': 8.5.1(graphql@15.8.0) + '@graphql-tools/schema': 8.5.1(graphql@15.8.0) + '@graphql-tools/utils': 8.9.0(graphql@15.8.0) dataloader: 2.1.0 graphql: 15.8.0 tslib: 2.4.1 @@ -1094,69 +1105,75 @@ packages: dev: true optional: true - /@graphql-tools/merge/8.3.1_graphql@15.8.0: + /@graphql-tools/merge@8.3.1(graphql@15.8.0): resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 8.9.0_graphql@15.8.0 + '@graphql-tools/utils': 8.9.0(graphql@15.8.0) graphql: 15.8.0 tslib: 2.6.2 dev: true optional: true - /@graphql-tools/merge/8.4.2_graphql@15.8.0: + /@graphql-tools/merge@8.4.2(graphql@15.8.0): resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/utils': 9.2.1_graphql@15.8.0 + '@graphql-tools/utils': 9.2.1(graphql@15.8.0) graphql: 15.8.0 tslib: 2.6.2 dev: true optional: true - /@graphql-tools/mock/8.7.20_graphql@15.8.0: + /@graphql-tools/mock@8.7.20(graphql@15.8.0): resolution: {integrity: sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/schema': 9.0.19_graphql@15.8.0 - '@graphql-tools/utils': 9.2.1_graphql@15.8.0 + '@graphql-tools/schema': 9.0.19(graphql@15.8.0) + '@graphql-tools/utils': 9.2.1(graphql@15.8.0) fast-json-stable-stringify: 2.1.0 graphql: 15.8.0 tslib: 2.6.2 dev: true optional: true - /@graphql-tools/schema/8.5.1_graphql@15.8.0: + /@graphql-tools/schema@8.5.1(graphql@15.8.0): resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 8.3.1_graphql@15.8.0 - '@graphql-tools/utils': 8.9.0_graphql@15.8.0 + '@graphql-tools/merge': 8.3.1(graphql@15.8.0) + '@graphql-tools/utils': 8.9.0(graphql@15.8.0) graphql: 15.8.0 tslib: 2.6.2 value-or-promise: 1.0.11 dev: true optional: true - /@graphql-tools/schema/9.0.19_graphql@15.8.0: + /@graphql-tools/schema@9.0.19(graphql@15.8.0): resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-tools/merge': 8.4.2_graphql@15.8.0 - '@graphql-tools/utils': 9.2.1_graphql@15.8.0 + '@graphql-tools/merge': 8.4.2(graphql@15.8.0) + '@graphql-tools/utils': 9.2.1(graphql@15.8.0) graphql: 15.8.0 tslib: 2.6.2 value-or-promise: 1.0.12 dev: true optional: true - /@graphql-tools/utils/8.9.0_graphql@15.8.0: + /@graphql-tools/utils@8.9.0(graphql@15.8.0): resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: @@ -1165,18 +1182,19 @@ packages: dev: true optional: true - /@graphql-tools/utils/9.2.1_graphql@15.8.0: + /@graphql-tools/utils@9.2.1(graphql@15.8.0): resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + requiresBuild: true peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 dependencies: - '@graphql-typed-document-node/core': 3.2.0_graphql@15.8.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@15.8.0) graphql: 15.8.0 tslib: 2.6.2 dev: true optional: true - /@graphql-typed-document-node/core/3.2.0_graphql@14.7.0: + /@graphql-typed-document-node/core@3.2.0(graphql@14.7.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1184,7 +1202,7 @@ packages: graphql: 14.7.0 dev: true - /@graphql-typed-document-node/core/3.2.0_graphql@15.8.0: + /@graphql-typed-document-node/core@3.2.0(graphql@15.8.0): resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 @@ -1193,32 +1211,33 @@ packages: dev: true optional: true - /@humanwhocodes/config-array/0.11.14: + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color dev: true - /@humanwhocodes/module-importer/1.0.1: + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema/2.0.2: + /@humanwhocodes/object-schema@2.0.2: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} dev: true - /@josephg/resolvable/1.0.1: + /@josephg/resolvable@1.0.1: resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} + requiresBuild: true dev: true optional: true - /@metamask/eth-sig-util/4.0.1: + /@metamask/eth-sig-util@4.0.1: resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} engines: {node: '>=12.0.0'} dependencies: @@ -1229,26 +1248,26 @@ packages: tweetnacl-util: 0.15.1 dev: true - /@noble/curves/1.3.0: + /@noble/curves@1.3.0: resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} dependencies: '@noble/hashes': 1.3.3 dev: true - /@noble/hashes/1.2.0: + /@noble/hashes@1.2.0: resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} dev: true - /@noble/hashes/1.3.3: + /@noble/hashes@1.3.3: resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} engines: {node: '>= 16'} dev: true - /@noble/secp256k1/1.7.1: + /@noble/secp256k1@1.7.1: resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} dev: true - /@nodelib/fs.scandir/2.1.5: + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} dependencies: @@ -1256,12 +1275,12 @@ packages: run-parallel: 1.2.0 dev: true - /@nodelib/fs.stat/2.0.5: + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} dev: true - /@nodelib/fs.walk/1.2.8: + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} dependencies: @@ -1269,165 +1288,97 @@ packages: fastq: 1.17.1 dev: true - /@nomicfoundation/ethereumjs-block/5.0.2: - resolution: {integrity: sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q==} - engines: {node: '>=14'} - dependencies: - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-trie': 6.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - ethereum-cryptography: 0.1.3 - ethers: 5.7.2 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + /@nomicfoundation/edr-darwin-arm64@0.6.4: + resolution: {integrity: sha512-QNQErISLgssV9+qia8sIjRANqtbW8snSDvjspixT/kSQ5ZSGxxctTg7x72wPSrcu8+EBEveIe5uqENIp5GH8HQ==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-blockchain/7.0.2: - resolution: {integrity: sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w==} - engines: {node: '>=14'} - dependencies: - '@nomicfoundation/ethereumjs-block': 5.0.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-ethash': 3.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-trie': 6.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - abstract-level: 1.0.4 - debug: 4.3.4 - ethereum-cryptography: 0.1.3 - level: 8.0.1 - lru-cache: 5.1.1 - memory-level: 1.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + /@nomicfoundation/edr-darwin-x64@0.6.4: + resolution: {integrity: sha512-cjVmREiwByyc9+oGfvAh49IAw+oVJHF9WWYRD+Tm/ZlSpnEVWxrGNBak2bd/JSYjn+mZE7gmWS4SMRi4nKaLUg==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-common/4.0.2: - resolution: {integrity: sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg==} - dependencies: - '@nomicfoundation/ethereumjs-util': 9.0.2 - crc-32: 1.2.2 + /@nomicfoundation/edr-linux-arm64-gnu@0.6.4: + resolution: {integrity: sha512-96o9kRIVD6W5VkgKvUOGpWyUGInVQ5BRlME2Fa36YoNsRQMaKtmYJEU0ACosYES6ZTpYC8U5sjMulvPtVoEfOA==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-ethash/3.0.2: - resolution: {integrity: sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg==} - engines: {node: '>=14'} - dependencies: - '@nomicfoundation/ethereumjs-block': 5.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - abstract-level: 1.0.4 - bigint-crypto-utils: 3.3.0 - ethereum-cryptography: 0.1.3 - transitivePeerDependencies: - - bufferutil - - utf-8-validate + /@nomicfoundation/edr-linux-arm64-musl@0.6.4: + resolution: {integrity: sha512-+JVEW9e5plHrUfQlSgkEj/UONrIU6rADTEk+Yp9pbe+mzNkJdfJYhs5JYiLQRP4OjxH4QOrXI97bKU6FcEbt5Q==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-evm/2.0.2: - resolution: {integrity: sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ==} - engines: {node: '>=14'} - dependencies: - '@ethersproject/providers': 5.7.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - debug: 4.3.4 - ethereum-cryptography: 0.1.3 - mcl-wasm: 0.7.9 - rustbn.js: 0.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + /@nomicfoundation/edr-linux-x64-gnu@0.6.4: + resolution: {integrity: sha512-nzYWW+fO3EZItOeP4CrdMgDXfaGBIBkKg0Y/7ySpUxLqzut40O4Mb0/+quqLAFkacUSWMlFp8nsmypJfOH5zoA==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-rlp/5.0.2: - resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} - engines: {node: '>=14'} - hasBin: true + /@nomicfoundation/edr-linux-x64-musl@0.6.4: + resolution: {integrity: sha512-QFRoE9qSQ2boRrVeQ1HdzU+XN7NUgwZ1SIy5DQt4d7jCP+5qTNsq8LBNcqhRBOATgO63nsweNUhxX/Suj5r1Sw==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-statemanager/2.0.2: - resolution: {integrity: sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA==} - dependencies: - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - debug: 4.3.4 - ethereum-cryptography: 0.1.3 - ethers: 5.7.2 - js-sdsl: 4.4.2 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate + /@nomicfoundation/edr-win32-x64-msvc@0.6.4: + resolution: {integrity: sha512-2yopjelNkkCvIjUgBGhrn153IBPLwnsDeNiq6oA0WkeM8tGmQi4td+PGi9jAriUDAkc59Yoi2q9hYA6efiY7Zw==} + engines: {node: '>= 18'} dev: true - /@nomicfoundation/ethereumjs-trie/6.0.2: - resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} - engines: {node: '>=14'} + /@nomicfoundation/edr@0.6.4: + resolution: {integrity: sha512-YgrSuT3yo5ZQkbvBGqQ7hG+RDvz3YygSkddg4tb1Z0Y6pLXFzwrcEwWaJCFAVeeZxdxGfCgGMUYgRVneK+WXkw==} + engines: {node: '>= 18'} dependencies: - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - '@types/readable-stream': 2.3.15 - ethereum-cryptography: 0.1.3 - readable-stream: 3.6.2 + '@nomicfoundation/edr-darwin-arm64': 0.6.4 + '@nomicfoundation/edr-darwin-x64': 0.6.4 + '@nomicfoundation/edr-linux-arm64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-arm64-musl': 0.6.4 + '@nomicfoundation/edr-linux-x64-gnu': 0.6.4 + '@nomicfoundation/edr-linux-x64-musl': 0.6.4 + '@nomicfoundation/edr-win32-x64-msvc': 0.6.4 dev: true - /@nomicfoundation/ethereumjs-tx/5.0.2: - resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} - engines: {node: '>=14'} + /@nomicfoundation/ethereumjs-common@4.0.4: + resolution: {integrity: sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg==} dependencies: - '@chainsafe/ssz': 0.9.4 - '@ethersproject/providers': 5.7.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - ethereum-cryptography: 0.1.3 + '@nomicfoundation/ethereumjs-util': 9.0.4 transitivePeerDependencies: - - bufferutil - - utf-8-validate + - c-kzg dev: true - /@nomicfoundation/ethereumjs-util/9.0.2: - resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} - engines: {node: '>=14'} + /@nomicfoundation/ethereumjs-rlp@5.0.4: + resolution: {integrity: sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw==} + engines: {node: '>=18'} + hasBin: true + dev: true + + /@nomicfoundation/ethereumjs-tx@5.0.4: + resolution: {integrity: sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true dependencies: - '@chainsafe/ssz': 0.10.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 ethereum-cryptography: 0.1.3 dev: true - /@nomicfoundation/ethereumjs-vm/7.0.2: - resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} - engines: {node: '>=14'} + /@nomicfoundation/ethereumjs-util@9.0.4: + resolution: {integrity: sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q==} + engines: {node: '>=18'} + peerDependencies: + c-kzg: ^2.1.2 + peerDependenciesMeta: + c-kzg: + optional: true dependencies: - '@nomicfoundation/ethereumjs-block': 5.0.2 - '@nomicfoundation/ethereumjs-blockchain': 7.0.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-evm': 2.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-statemanager': 2.0.2 - '@nomicfoundation/ethereumjs-trie': 6.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - debug: 4.3.4 + '@nomicfoundation/ethereumjs-rlp': 5.0.4 ethereum-cryptography: 0.1.3 - mcl-wasm: 0.7.9 - rustbn.js: 0.2.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate dev: true - /@nomicfoundation/hardhat-verify/2.0.4_hardhat@2.19.5: + /@nomicfoundation/hardhat-verify@2.0.4(hardhat@2.22.13): resolution: {integrity: sha512-B8ZjhOrmbbRWqJi65jvQblzjsfYktjqj2vmOm+oc2Vu8drZbT2cjeSCRHZKbS7lOtfW78aJZSFvw+zRLCiABJA==} peerDependencies: hardhat: ^2.0.4 @@ -1436,8 +1387,8 @@ packages: '@ethersproject/address': 5.7.0 cbor: 8.1.0 chalk: 2.4.2 - debug: 4.3.4 - hardhat: 2.19.5 + debug: 4.3.4(supports-color@8.1.1) + hardhat: 2.22.13 lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.1 @@ -1446,7 +1397,7 @@ packages: - supports-color dev: true - /@nomicfoundation/solidity-analyzer-darwin-arm64/0.1.1: + /@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1: resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} engines: {node: '>= 10'} cpu: [arm64] @@ -1455,7 +1406,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-darwin-x64/0.1.1: + /@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1: resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} engines: {node: '>= 10'} cpu: [x64] @@ -1464,7 +1415,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-freebsd-x64/0.1.1: + /@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1: resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} engines: {node: '>= 10'} cpu: [x64] @@ -1473,7 +1424,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-linux-arm64-gnu/0.1.1: + /@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1: resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} engines: {node: '>= 10'} cpu: [arm64] @@ -1482,7 +1433,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-linux-arm64-musl/0.1.1: + /@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1: resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} engines: {node: '>= 10'} cpu: [arm64] @@ -1491,7 +1442,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-linux-x64-gnu/0.1.1: + /@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1: resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} engines: {node: '>= 10'} cpu: [x64] @@ -1500,7 +1451,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-linux-x64-musl/0.1.1: + /@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1: resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} engines: {node: '>= 10'} cpu: [x64] @@ -1509,7 +1460,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-win32-arm64-msvc/0.1.1: + /@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1: resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} engines: {node: '>= 10'} cpu: [arm64] @@ -1518,7 +1469,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-win32-ia32-msvc/0.1.1: + /@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1: resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} engines: {node: '>= 10'} cpu: [ia32] @@ -1527,7 +1478,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer-win32-x64-msvc/0.1.1: + /@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1: resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} engines: {node: '>= 10'} cpu: [x64] @@ -1536,7 +1487,7 @@ packages: dev: true optional: true - /@nomicfoundation/solidity-analyzer/0.1.1: + /@nomicfoundation/solidity-analyzer@0.1.1: resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} engines: {node: '>= 12'} optionalDependencies: @@ -1552,37 +1503,37 @@ packages: '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true - /@openzeppelin/contract-loader/0.6.3: + /@openzeppelin/contract-loader@0.6.3: resolution: {integrity: sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg==} dependencies: find-up: 4.1.0 fs-extra: 8.1.0 dev: true - /@openzeppelin/contracts-upgradeable/5.0.1_qffjc7vved4cgcgrp7e6uufd2e: - resolution: {integrity: sha512-MvaLoPnVcoZr/qqZP+4cl9piuR4gg0iIGgxVSZ/AL1iId3M6IdEHzz9Naw5Lirl4KKBI6ciTVnX07yL4dOMIJg==} + /@openzeppelin/contracts-upgradeable@5.1.0(@openzeppelin/contracts@5.1.0): + resolution: {integrity: sha512-AIElwP5Ck+cslNE+Hkemf5SxjJoF4wBvvjxc27Rp+9jaPs/CLIaUBMYe1FNzhdiN0cYuwGRmYaRHmmntuiju4Q==} peerDependencies: - '@openzeppelin/contracts': 5.0.1 + '@openzeppelin/contracts': 5.1.0 dependencies: - '@openzeppelin/contracts': 5.0.1 + '@openzeppelin/contracts': 5.1.0 dev: true - /@openzeppelin/contracts/4.9.5: - resolution: {integrity: sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==} + /@openzeppelin/contracts@4.8.0: + resolution: {integrity: sha512-AGuwhRRL+NaKx73WKRNzeCxOCOCxpaqF+kp8TJ89QzAipSwZy/NoflkWaL9bywXFRhIzXt8j38sfF7KBKCPWLw==} dev: true - /@openzeppelin/contracts/5.0.1: - resolution: {integrity: sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==} + /@openzeppelin/contracts@5.1.0: + resolution: {integrity: sha512-p1ULhl7BXzjjbha5aqst+QMLY+4/LCWADXOCsmLHRM77AqiPjnd9vvUN9sosUfhL9JGKpZ0TjEGxgvnizmWGSA==} dev: true - /@openzeppelin/test-helpers/0.5.16_bn.js@4.12.0: + /@openzeppelin/test-helpers@0.5.16(bn.js@4.12.0): resolution: {integrity: sha512-T1EvspSfH1qQO/sgGlskLfYVBbqzJR23SZzYl/6B2JnT4EhThcI85UpvDk0BkLWKaDScQTabGHt4GzHW+3SfZg==} dependencies: '@openzeppelin/contract-loader': 0.6.3 '@truffle/contract': 4.6.31 ansi-colors: 3.2.4 chai: 4.4.1 - chai-bn: 0.2.2_bn.js@4.12.0+chai@4.4.1 + chai-bn: 0.2.2(bn.js@4.12.0)(chai@4.4.1) ethjs-abi: 0.2.1 lodash.flatten: 4.4.0 semver: 5.7.2 @@ -1596,19 +1547,19 @@ packages: - utf-8-validate dev: true - /@pnpm/config.env-replace/1.1.0: + /@pnpm/config.env-replace@1.1.0: resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} dev: true - /@pnpm/network.ca-file/1.0.2: + /@pnpm/network.ca-file@1.0.2: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} dependencies: graceful-fs: 4.2.10 dev: true - /@pnpm/npm-conf/2.2.2: + /@pnpm/npm-conf@2.2.2: resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} engines: {node: '>=12'} dependencies: @@ -1617,60 +1568,70 @@ packages: config-chain: 1.1.13 dev: true - /@protobufjs/aspromise/1.1.2: + /@protobufjs/aspromise@1.1.2: resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + requiresBuild: true dev: true optional: true - /@protobufjs/base64/1.1.2: + /@protobufjs/base64@1.1.2: resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + requiresBuild: true dev: true optional: true - /@protobufjs/codegen/2.0.4: + /@protobufjs/codegen@2.0.4: resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + requiresBuild: true dev: true optional: true - /@protobufjs/eventemitter/1.1.0: + /@protobufjs/eventemitter@1.1.0: resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + requiresBuild: true dev: true optional: true - /@protobufjs/fetch/1.1.0: + /@protobufjs/fetch@1.1.0: resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + requiresBuild: true dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 dev: true optional: true - /@protobufjs/float/1.0.2: + /@protobufjs/float@1.0.2: resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + requiresBuild: true dev: true optional: true - /@protobufjs/inquire/1.1.0: + /@protobufjs/inquire@1.1.0: resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + requiresBuild: true dev: true optional: true - /@protobufjs/path/1.1.2: + /@protobufjs/path@1.1.2: resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + requiresBuild: true dev: true optional: true - /@protobufjs/pool/1.1.0: + /@protobufjs/pool@1.1.0: resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + requiresBuild: true dev: true optional: true - /@protobufjs/utf8/1.1.0: + /@protobufjs/utf8@1.1.0: resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + requiresBuild: true dev: true optional: true - /@redux-saga/core/1.3.0: + /@redux-saga/core@1.3.0: resolution: {integrity: sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA==} dependencies: '@babel/runtime': 7.23.9 @@ -1682,32 +1643,32 @@ packages: typescript-tuple: 2.2.1 dev: true - /@redux-saga/deferred/1.2.1: + /@redux-saga/deferred@1.2.1: resolution: {integrity: sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g==} dev: true - /@redux-saga/delay-p/1.2.1: + /@redux-saga/delay-p@1.2.1: resolution: {integrity: sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w==} dependencies: '@redux-saga/symbols': 1.1.3 dev: true - /@redux-saga/is/1.1.3: + /@redux-saga/is@1.1.3: resolution: {integrity: sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q==} dependencies: '@redux-saga/symbols': 1.1.3 '@redux-saga/types': 1.2.1 dev: true - /@redux-saga/symbols/1.1.3: + /@redux-saga/symbols@1.1.3: resolution: {integrity: sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg==} dev: true - /@redux-saga/types/1.2.1: + /@redux-saga/types@1.2.1: resolution: {integrity: sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==} dev: true - /@resolver-engine/core/0.2.1: + /@resolver-engine/core@0.2.1: resolution: {integrity: sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==} dependencies: debug: 3.2.7 @@ -1716,7 +1677,7 @@ packages: - supports-color dev: true - /@resolver-engine/fs/0.2.1: + /@resolver-engine/fs@0.2.1: resolution: {integrity: sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==} dependencies: '@resolver-engine/core': 0.2.1 @@ -1725,7 +1686,7 @@ packages: - supports-color dev: true - /@resolver-engine/imports-fs/0.2.2: + /@resolver-engine/imports-fs@0.2.2: resolution: {integrity: sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==} dependencies: '@resolver-engine/fs': 0.2.1 @@ -1735,7 +1696,7 @@ packages: - supports-color dev: true - /@resolver-engine/imports/0.2.2: + /@resolver-engine/imports@0.2.2: resolution: {integrity: sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==} dependencies: '@resolver-engine/core': 0.2.1 @@ -1745,11 +1706,11 @@ packages: - supports-color dev: true - /@scure/base/1.1.5: + /@scure/base@1.1.5: resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} dev: true - /@scure/bip32/1.1.5: + /@scure/bip32@1.1.5: resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} dependencies: '@noble/hashes': 1.2.0 @@ -1757,7 +1718,7 @@ packages: '@scure/base': 1.1.5 dev: true - /@scure/bip32/1.3.3: + /@scure/bip32@1.3.3: resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} dependencies: '@noble/curves': 1.3.0 @@ -1765,21 +1726,21 @@ packages: '@scure/base': 1.1.5 dev: true - /@scure/bip39/1.1.1: + /@scure/bip39@1.1.1: resolution: {integrity: sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==} dependencies: '@noble/hashes': 1.2.0 '@scure/base': 1.1.5 dev: true - /@scure/bip39/1.2.2: + /@scure/bip39@1.2.2: resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} dependencies: '@noble/hashes': 1.3.3 '@scure/base': 1.1.5 dev: true - /@sentry/core/5.30.0: + /@sentry/core@5.30.0: resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} engines: {node: '>=6'} dependencies: @@ -1790,7 +1751,7 @@ packages: tslib: 1.14.1 dev: true - /@sentry/hub/5.30.0: + /@sentry/hub@5.30.0: resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} engines: {node: '>=6'} dependencies: @@ -1799,7 +1760,7 @@ packages: tslib: 1.14.1 dev: true - /@sentry/minimal/5.30.0: + /@sentry/minimal@5.30.0: resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} engines: {node: '>=6'} dependencies: @@ -1808,7 +1769,7 @@ packages: tslib: 1.14.1 dev: true - /@sentry/node/5.30.0: + /@sentry/node@5.30.0: resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} engines: {node: '>=6'} dependencies: @@ -1825,7 +1786,7 @@ packages: - supports-color dev: true - /@sentry/tracing/5.30.0: + /@sentry/tracing@5.30.0: resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} engines: {node: '>=6'} dependencies: @@ -1836,12 +1797,12 @@ packages: tslib: 1.14.1 dev: true - /@sentry/types/5.30.0: + /@sentry/types@5.30.0: resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} engines: {node: '>=6'} dev: true - /@sentry/utils/5.30.0: + /@sentry/utils@5.30.0: resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} engines: {node: '>=6'} dependencies: @@ -1849,48 +1810,49 @@ packages: tslib: 1.14.1 dev: true - /@sindresorhus/is/4.6.0: + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} dev: true - /@sindresorhus/is/5.6.0: + /@sindresorhus/is@5.6.0: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} dev: true - /@solidity-parser/parser/0.14.5: + /@solidity-parser/parser@0.14.5: resolution: {integrity: sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg==} dependencies: antlr4ts: 0.5.0-alpha.4 dev: true - /@solidity-parser/parser/0.16.2: + /@solidity-parser/parser@0.16.2: resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} dependencies: antlr4ts: 0.5.0-alpha.4 dev: true - /@solidity-parser/parser/0.17.0: + /@solidity-parser/parser@0.17.0: resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==} + requiresBuild: true dev: true optional: true - /@szmarczak/http-timer/4.0.6: + /@szmarczak/http-timer@4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} dependencies: defer-to-connect: 2.0.1 dev: true - /@szmarczak/http-timer/5.0.1: + /@szmarczak/http-timer@5.0.1: resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} dependencies: defer-to-connect: 2.0.1 dev: true - /@truffle/abi-utils/1.0.3: + /@truffle/abi-utils@1.0.3: resolution: {integrity: sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -1899,19 +1861,19 @@ packages: web3-utils: 1.10.0 dev: true - /@truffle/blockchain-utils/0.1.9: + /@truffle/blockchain-utils@0.1.9: resolution: {integrity: sha512-RHfumgbIVo68Rv9ofDYfynjnYZIfP/f1vZy4RoqkfYAO+fqfc58PDRzB1WAGq2U6GPuOnipOJxQhnqNnffORZg==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - /@truffle/code-utils/3.0.4: + /@truffle/code-utils@3.0.4: resolution: {integrity: sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: cbor: 5.2.0 dev: true - /@truffle/codec/0.17.3: + /@truffle/codec@0.17.3: resolution: {integrity: sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -1920,7 +1882,7 @@ packages: big.js: 6.2.1 bn.js: 5.2.1 cbor: 5.2.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) lodash: 4.17.21 semver: 7.6.0 utf8: 3.0.0 @@ -1929,7 +1891,7 @@ packages: - supports-color dev: true - /@truffle/compile-common/0.9.8: + /@truffle/compile-common@0.9.8: resolution: {integrity: sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -1937,7 +1899,7 @@ packages: colors: 1.4.0 dev: true - /@truffle/compile-solidity/6.0.79: + /@truffle/compile-solidity@6.0.79: resolution: {integrity: sha512-sdKYTrXwNr70p17MOzkV277ayNA7evECPFRGTvi6qDea697EXTqq694coH1ffmSjArhrqpinMMenF1v421A/AA==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -1946,9 +1908,9 @@ packages: '@truffle/contract-sources': 0.2.1 '@truffle/expect': 0.1.7 '@truffle/profiler': 0.1.53 - axios: 1.5.0_debug@4.3.4 + axios: 1.5.0(debug@4.3.4) axios-retry: 3.9.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 iter-tools: 7.5.3 lodash: 4.17.21 @@ -1956,7 +1918,7 @@ packages: original-require: 1.0.1 require-from-string: 2.0.2 semver: 7.6.0 - solc: 0.8.21_debug@4.3.4 + solc: 0.8.21(debug@4.3.4) transitivePeerDependencies: - bufferutil - encoding @@ -1964,7 +1926,7 @@ packages: - utf-8-validate dev: true - /@truffle/config/1.3.61: + /@truffle/config@1.3.61: resolution: {integrity: sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -1972,7 +1934,7 @@ packages: '@truffle/events': 0.1.25 '@truffle/provider': 0.3.13 conf: 10.2.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) find-up: 2.1.0 lodash: 4.17.21 original-require: 1.0.1 @@ -1983,27 +1945,27 @@ packages: - utf-8-validate dev: true - /@truffle/contract-schema/3.4.16: + /@truffle/contract-schema@3.4.16: resolution: {integrity: sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: ajv: 6.12.6 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /@truffle/contract-sources/0.2.1: + /@truffle/contract-sources@0.2.1: resolution: {integrity: sha512-C7l+lySN2V327s0CAX52mN4h3ag1WpIn6l45hsB92GKhY1t5h5txPUXvuKamQpalQWCTLfMS4+YbtN0AxPxCug==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) glob: 7.2.3 transitivePeerDependencies: - supports-color dev: true - /@truffle/contract/4.6.31: + /@truffle/contract@4.6.31: resolution: {integrity: sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2014,7 +1976,7 @@ packages: '@truffle/error': 0.2.2 '@truffle/interface-adapter': 0.5.37 bignumber.js: 7.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) ethers: 4.0.49 web3: 1.10.0 web3-core-helpers: 1.10.0 @@ -2028,16 +1990,16 @@ packages: - utf-8-validate dev: true - /@truffle/dashboard-message-bus-client/0.1.12: + /@truffle/dashboard-message-bus-client@0.1.12: resolution: {integrity: sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@truffle/dashboard-message-bus-common': 0.1.7 '@truffle/promise-tracker': 0.1.7 - axios: 1.5.0_debug@4.3.4 - debug: 4.3.4 + axios: 1.5.0(debug@4.3.4) + debug: 4.3.4(supports-color@8.1.1) delay: 5.0.0 - isomorphic-ws: 4.0.1_ws@7.5.9 + isomorphic-ws: 4.0.1(ws@7.5.9) node-abort-controller: 3.1.1 tiny-typed-emitter: 2.1.0 ws: 7.5.9 @@ -2047,12 +2009,12 @@ packages: - utf-8-validate dev: true - /@truffle/dashboard-message-bus-common/0.1.7: + /@truffle/dashboard-message-bus-common@0.1.7: resolution: {integrity: sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - /@truffle/db-loader/0.2.36: + /@truffle/db-loader@0.2.36: resolution: {integrity: sha512-Cm8uVc2eoihquMOSZm8UOuGGUvBo+/GHkxRoPAZ5pftOpSlRAug0okVOp6ETj1BujgLJ02izU/qdrwSGWwGR9A==} engines: {node: ^16.20 || ^18.16 || >=20} optionalDependencies: @@ -2064,23 +2026,23 @@ packages: - utf-8-validate dev: true - /@truffle/db/2.0.36: + /@truffle/db@2.0.36: resolution: {integrity: sha512-PpUjOXZgf9Gy8RlP8bJhl5pjJRkghZUcCiGOsS0YbCCI//PGDDoKmS+3QUjXWhiMwTeld3gfUV2ip4p2hMbyVA==} engines: {node: ^16.20 || ^18.16 || >=20} deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. requiresBuild: true dependencies: - '@graphql-tools/delegate': 8.8.1_graphql@15.8.0 - '@graphql-tools/schema': 8.5.1_graphql@15.8.0 + '@graphql-tools/delegate': 8.8.1(graphql@15.8.0) + '@graphql-tools/schema': 8.5.1(graphql@15.8.0) '@truffle/abi-utils': 1.0.3 '@truffle/code-utils': 3.0.4 '@truffle/config': 1.3.61 abstract-leveldown: 7.2.0 - apollo-server: 3.13.0_graphql@15.8.0 - debug: 4.3.4 + apollo-server: 3.13.0(graphql@15.8.0) + debug: 4.3.4(supports-color@8.1.1) fs-extra: 9.1.0 graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) json-stable-stringify: 1.1.1 pascal-case: 2.0.1 pluralize: 8.0.0 @@ -2097,7 +2059,7 @@ packages: dev: true optional: true - /@truffle/debug-utils/6.0.57: + /@truffle/debug-utils@6.0.57: resolution: {integrity: sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2105,13 +2067,13 @@ packages: '@trufflesuite/chromafi': 3.0.0 bn.js: 5.2.1 chalk: 2.4.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) highlightjs-solidity: 2.0.6 transitivePeerDependencies: - supports-color dev: true - /@truffle/debugger/12.1.5: + /@truffle/debugger@12.1.5: resolution: {integrity: sha512-m6FQoddmptcXZkO+OABcz4Ka7YDLAPW9/GhnTSqYonlaOeV7g5dMzybhHq6whaQet34rhNteomep7JpskKW9Mw==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2120,7 +2082,7 @@ packages: '@truffle/codec': 0.17.3 '@truffle/source-map-utils': 1.3.119 bn.js: 5.2.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) json-pointer: 0.6.2 json-stable-stringify: 1.1.1 lodash: 4.17.21 @@ -2137,18 +2099,18 @@ packages: - utf-8-validate dev: true - /@truffle/error/0.2.2: + /@truffle/error@0.2.2: resolution: {integrity: sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - /@truffle/events/0.1.25: + /@truffle/events@0.1.25: resolution: {integrity: sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@truffle/dashboard-message-bus-client': 0.1.12 '@truffle/spinners': 0.2.5 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) emittery: 0.4.1 web3-utils: 1.10.0 transitivePeerDependencies: @@ -2157,12 +2119,12 @@ packages: - utf-8-validate dev: true - /@truffle/expect/0.1.7: + /@truffle/expect@0.1.7: resolution: {integrity: sha512-YWLdtIDA2Xl7RdkmurQw2KCV/b59KJJ2Csm4GYNPAsnngvVOH6qvHjqm1JNyDzBN7AzqT+Tb3s8RdD+EZC3HJw==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - /@truffle/interface-adapter/0.5.37: + /@truffle/interface-adapter@0.5.37: resolution: {integrity: sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2176,29 +2138,29 @@ packages: - utf-8-validate dev: true - /@truffle/profiler/0.1.53: + /@truffle/profiler@0.1.53: resolution: {integrity: sha512-3+wfDaa0JdHlZpjJaNjgsi6vJfeq4osPz146uNYhDH5ilnDGAG1OMrjnuCbkpG3/oXycKsUZFMnVtkbCbbaISw==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@truffle/contract-sources': 0.2.1 '@truffle/expect': 0.1.7 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /@truffle/promise-tracker/0.1.7: + /@truffle/promise-tracker@0.1.7: resolution: {integrity: sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - /@truffle/provider/0.3.13: + /@truffle/provider@0.3.13: resolution: {integrity: sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@truffle/error': 0.2.2 '@truffle/interface-adapter': 0.5.37 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) web3: 1.10.0 transitivePeerDependencies: - bufferutil @@ -2207,7 +2169,7 @@ packages: - utf-8-validate dev: true - /@truffle/provisioner/0.2.84: + /@truffle/provisioner@0.2.84: resolution: {integrity: sha512-zgDeSq+ZAcgtKSDlShtn1bsJWTRgeOdTTVzthjXMJisKnRQChkOAp7ehIr0RoIp5o2T1IVxYILAk7IPYDHNzuQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2219,7 +2181,7 @@ packages: - utf-8-validate dev: true - /@truffle/resolver/9.0.53: + /@truffle/resolver@9.0.53: resolution: {integrity: sha512-jYqHIucs6yMCOpKFwnvcW6cfpn/WEWJQ8FN0EUhf0r0HMz9TjG9HnabBZSvfMBFPAmKklGR/GI0GESWf3alpXQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: @@ -2230,7 +2192,7 @@ packages: '@truffle/expect': 0.1.7 '@truffle/provisioner': 0.2.84 abi-to-sol: 0.7.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) detect-installed: 2.0.4 fs-extra: 9.1.0 get-installed-path: 4.0.8 @@ -2243,13 +2205,13 @@ packages: - utf-8-validate dev: true - /@truffle/source-map-utils/1.3.119: + /@truffle/source-map-utils@1.3.119: resolution: {integrity: sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@truffle/code-utils': 3.0.4 '@truffle/codec': 0.17.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) json-pointer: 0.6.2 node-interval-tree: 1.3.3 web3-utils: 1.10.0 @@ -2257,14 +2219,14 @@ packages: - supports-color dev: true - /@truffle/spinners/0.2.5: + /@truffle/spinners@0.2.5: resolution: {integrity: sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ==} engines: {node: ^16.20 || ^18.16 || >=20} dependencies: '@trufflesuite/spinnies': 0.1.1 dev: true - /@trufflesuite/bigint-buffer/1.1.10: + /@trufflesuite/bigint-buffer@1.1.10: resolution: {integrity: sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==} engines: {node: '>= 14.0.0'} requiresBuild: true @@ -2272,7 +2234,7 @@ packages: node-gyp-build: 4.4.0 dev: true - /@trufflesuite/bigint-buffer/1.1.9: + /@trufflesuite/bigint-buffer@1.1.9: resolution: {integrity: sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==} engines: {node: '>= 10.0.0'} requiresBuild: true @@ -2281,7 +2243,7 @@ packages: dev: true optional: true - /@trufflesuite/chromafi/3.0.0: + /@trufflesuite/chromafi@3.0.0: resolution: {integrity: sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==} dependencies: camelcase: 4.1.0 @@ -2294,7 +2256,7 @@ packages: strip-indent: 2.0.0 dev: true - /@trufflesuite/spinnies/0.1.1: + /@trufflesuite/spinnies@0.1.1: resolution: {integrity: sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA==} dependencies: chalk: 4.1.2 @@ -2302,51 +2264,54 @@ packages: strip-ansi: 6.0.1 dev: true - /@trufflesuite/uws-js-unofficial/20.30.0-unofficial.0: + /@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0: resolution: {integrity: sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==} dependencies: - ws: 8.13.0_2adebc2xdjqbcvbjxkodkhadp4 + ws: 8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3) optionalDependencies: bufferutil: 4.0.7 utf-8-validate: 6.0.3 dev: true - /@types/accepts/1.3.7: + /@types/accepts@1.3.7: resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + requiresBuild: true dependencies: '@types/node': 20.11.17 dev: true optional: true - /@types/bn.js/4.11.6: + /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: '@types/node': 20.11.17 dev: true - /@types/bn.js/5.1.5: + /@types/bn.js@5.1.5: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: '@types/node': 20.11.17 dev: true - /@types/body-parser/1.19.2: + /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + requiresBuild: true dependencies: '@types/connect': 3.4.38 '@types/node': 20.11.17 dev: true optional: true - /@types/body-parser/1.19.5: + /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + requiresBuild: true dependencies: '@types/connect': 3.4.38 '@types/node': 20.11.17 dev: true optional: true - /@types/cacheable-request/6.0.3: + /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.4 @@ -2355,26 +2320,29 @@ packages: '@types/responselike': 1.0.3 dev: true - /@types/concat-stream/1.6.1: + /@types/concat-stream@1.6.1: resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} dependencies: '@types/node': 20.11.17 dev: true - /@types/connect/3.4.38: + /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + requiresBuild: true dependencies: '@types/node': 20.11.17 dev: true optional: true - /@types/cors/2.8.12: + /@types/cors@2.8.12: resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} + requiresBuild: true dev: true optional: true - /@types/express-serve-static-core/4.17.31: + /@types/express-serve-static-core@4.17.31: resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} + requiresBuild: true dependencies: '@types/node': 20.11.17 '@types/qs': 6.9.11 @@ -2382,8 +2350,9 @@ packages: dev: true optional: true - /@types/express-serve-static-core/4.17.43: + /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + requiresBuild: true dependencies: '@types/node': 20.11.17 '@types/qs': 6.9.11 @@ -2392,8 +2361,9 @@ packages: dev: true optional: true - /@types/express/4.17.14: + /@types/express@4.17.14: resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} + requiresBuild: true dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.17.43 @@ -2402,116 +2372,116 @@ packages: dev: true optional: true - /@types/form-data/0.0.33: + /@types/form-data@0.0.33: resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} dependencies: '@types/node': 20.11.17 dev: true - /@types/http-cache-semantics/4.0.4: + /@types/http-cache-semantics@4.0.4: resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} dev: true - /@types/http-errors/2.0.4: + /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + requiresBuild: true dev: true optional: true - /@types/json5/0.0.29: + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/keyv/3.1.4: + /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: '@types/node': 20.11.17 dev: true - /@types/long/4.0.2: + /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + requiresBuild: true dev: true optional: true - /@types/lru-cache/5.1.1: + /@types/lru-cache@5.1.1: resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} dev: true - /@types/mime/1.3.5: + /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + requiresBuild: true dev: true optional: true - /@types/mime/3.0.4: + /@types/mime@3.0.4: resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + requiresBuild: true dev: true optional: true - /@types/node/10.17.60: + /@types/node@10.17.60: resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} dev: true - /@types/node/12.20.55: + /@types/node@12.20.55: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node/20.11.17: + /@types/node@20.11.17: resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} dependencies: undici-types: 5.26.5 dev: true - /@types/node/8.10.66: + /@types/node@8.10.66: resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} dev: true - /@types/pbkdf2/3.1.2: + /@types/pbkdf2@3.1.2: resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: '@types/node': 20.11.17 dev: true - /@types/qs/6.9.11: + /@types/qs@6.9.11: resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} dev: true - /@types/range-parser/1.2.7: + /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + requiresBuild: true dev: true optional: true - /@types/readable-stream/2.3.15: - resolution: {integrity: sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==} - dependencies: - '@types/node': 20.11.17 - safe-buffer: 5.1.2 - dev: true - - /@types/responselike/1.0.3: + /@types/responselike@1.0.3: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: '@types/node': 20.11.17 dev: true - /@types/secp256k1/4.0.6: + /@types/secp256k1@4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: '@types/node': 20.11.17 dev: true - /@types/seedrandom/3.0.1: + /@types/seedrandom@3.0.1: resolution: {integrity: sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==} dev: true - /@types/send/0.17.4: + /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + requiresBuild: true dependencies: '@types/mime': 1.3.5 '@types/node': 20.11.17 dev: true optional: true - /@types/serve-static/1.15.5: + /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + requiresBuild: true dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 @@ -2519,45 +2489,46 @@ packages: dev: true optional: true - /@types/triple-beam/1.3.5: + /@types/triple-beam@1.3.5: resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} dev: true - /@ungap/structured-clone/1.2.0: + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /abi-to-sol/0.7.1: + /abi-to-sol@0.7.1: resolution: {integrity: sha512-GcpyiHA+sTbmSEAbBWsXS5iO3WBGuqhsiBo3WH9VHthNFF/k438mXFJtS/SUxtm8HmbCMv/BnxokUX6w4y2eFg==} hasBin: true dependencies: '@truffle/abi-utils': 1.0.3 '@truffle/contract-schema': 3.4.16 ajv: 6.12.6 - better-ajv-errors: 0.8.2_ajv@6.12.6 + better-ajv-errors: 0.8.2(ajv@6.12.6) neodoc: 2.0.2 semver: 7.6.0 source-map-support: 0.5.21 optionalDependencies: prettier: 2.8.8 - prettier-plugin-solidity: 1.3.1_prettier@2.8.8 + prettier-plugin-solidity: 1.3.1(prettier@2.8.8) transitivePeerDependencies: - supports-color dev: true - /abort-controller/3.0.0: + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + requiresBuild: true dependencies: event-target-shim: 5.0.1 dev: true optional: true - /abortcontroller-polyfill/1.7.5: + /abortcontroller-polyfill@1.7.5: resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} dev: true - /abstract-level/1.0.3: + /abstract-level@1.0.3: resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} engines: {node: '>=12'} dependencies: @@ -2570,29 +2541,18 @@ packages: queue-microtask: 1.2.3 dev: true - /abstract-level/1.0.4: - resolution: {integrity: sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg==} - engines: {node: '>=12'} - dependencies: - buffer: 6.0.3 - catering: 2.1.1 - is-buffer: 2.0.5 - level-supports: 4.0.1 - level-transcoder: 1.0.1 - module-error: 1.0.2 - queue-microtask: 1.2.3 - dev: true - - /abstract-leveldown/2.7.2: + /abstract-leveldown@2.7.2: resolution: {integrity: sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==} + requiresBuild: true dependencies: xtend: 4.0.2 dev: true optional: true - /abstract-leveldown/6.2.3: + /abstract-leveldown@6.2.3: resolution: {integrity: sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==} engines: {node: '>=6'} + requiresBuild: true dependencies: buffer: 5.7.1 immediate: 3.3.0 @@ -2602,7 +2562,7 @@ packages: dev: true optional: true - /abstract-leveldown/7.2.0: + /abstract-leveldown@7.2.0: resolution: {integrity: sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==} engines: {node: '>=10'} dependencies: @@ -2614,7 +2574,7 @@ packages: queue-microtask: 1.2.3 dev: true - /accepts/1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} dependencies: @@ -2622,7 +2582,7 @@ packages: negotiator: 0.6.3 dev: true - /acorn-jsx/5.3.2_acorn@8.11.3: + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -2630,37 +2590,37 @@ packages: acorn: 8.11.3 dev: true - /acorn/8.11.3: + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true - /adm-zip/0.4.16: + /adm-zip@0.4.16: resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} engines: {node: '>=0.3.0'} dev: true - /ado-contracts/1.0.0: + /ado-contracts@1.0.0: resolution: {integrity: sha512-tLJdlGed3Fcwih4m9yNaI3+PqfxKarbLBR2OavM8RiPX8zo5TrLUZ6akrqkK+BFBInhaxONnMKsWiHj4QNPdCw==} dependencies: - '@openzeppelin/contracts': 4.9.5 + '@openzeppelin/contracts': 4.8.0 dev: true - /aes-js/3.0.0: + /aes-js@3.0.0: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} dev: true - /agent-base/6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /aggregate-error/3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} dependencies: @@ -2668,8 +2628,10 @@ packages: indent-string: 4.0.0 dev: true - /ajv-formats/2.1.1: + /ajv-formats@2.1.1(ajv@8.12.0): resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 peerDependenciesMeta: ajv: optional: true @@ -2677,7 +2639,7 @@ packages: ajv: 8.12.0 dev: true - /ajv/6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 @@ -2686,7 +2648,7 @@ packages: uri-js: 4.4.1 dev: true - /ajv/8.12.0: + /ajv@8.12.0: resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} dependencies: fast-deep-equal: 3.1.3 @@ -2695,73 +2657,73 @@ packages: uri-js: 4.4.1 dev: true - /ansi-align/3.0.1: + /ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 dev: true - /ansi-colors/3.2.4: + /ansi-colors@3.2.4: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} dev: true - /ansi-colors/4.1.1: + /ansi-colors@4.1.1: resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} engines: {node: '>=6'} dev: true - /ansi-colors/4.1.3: + /ansi-colors@4.1.3: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} dev: true - /ansi-escapes/4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} dependencies: type-fest: 0.21.3 dev: true - /ansi-regex/2.1.1: + /ansi-regex@2.1.1: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} dev: true - /ansi-regex/3.0.1: + /ansi-regex@3.0.1: resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} engines: {node: '>=4'} dev: true - /ansi-regex/5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} dev: true - /ansi-styles/3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} dependencies: color-convert: 1.9.3 dev: true - /ansi-styles/4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} dependencies: color-convert: 2.0.1 dev: true - /antlr4/4.13.1: + /antlr4@4.13.1: resolution: {integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==} engines: {node: '>=16'} dev: true - /antlr4ts/0.5.0-alpha.4: + /antlr4ts@0.5.0-alpha.4: resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} dev: true - /anymatch/3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: @@ -2769,10 +2731,11 @@ packages: picomatch: 2.3.1 dev: true - /apollo-datasource/3.3.2: + /apollo-datasource@3.3.2: resolution: {integrity: sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg==} engines: {node: '>=12.0'} deprecated: The `apollo-datasource` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true dependencies: '@apollo/utils.keyvaluecache': 1.0.2 apollo-server-env: 4.2.1 @@ -2781,38 +2744,40 @@ packages: dev: true optional: true - /apollo-reporting-protobuf/3.4.0: + /apollo-reporting-protobuf@3.4.0: resolution: {integrity: sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog==} deprecated: The `apollo-reporting-protobuf` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/usage-reporting-protobuf` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true dependencies: '@apollo/protobufjs': 1.2.6 dev: true optional: true - /apollo-server-core/3.13.0_graphql@15.8.0: + /apollo-server-core@3.13.0(graphql@15.8.0): resolution: {integrity: sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==} engines: {node: '>=12.0'} + requiresBuild: true peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: '@apollo/utils.keyvaluecache': 1.0.2 '@apollo/utils.logger': 1.0.1 - '@apollo/utils.usagereporting': 1.0.1_graphql@15.8.0 - '@apollographql/apollo-tools': 0.5.4_graphql@15.8.0 + '@apollo/utils.usagereporting': 1.0.1(graphql@15.8.0) + '@apollographql/apollo-tools': 0.5.4(graphql@15.8.0) '@apollographql/graphql-playground-html': 1.6.29 - '@graphql-tools/mock': 8.7.20_graphql@15.8.0 - '@graphql-tools/schema': 8.5.1_graphql@15.8.0 + '@graphql-tools/mock': 8.7.20(graphql@15.8.0) + '@graphql-tools/schema': 8.5.1(graphql@15.8.0) '@josephg/resolvable': 1.0.1 apollo-datasource: 3.3.2 apollo-reporting-protobuf: 3.4.0 apollo-server-env: 4.2.1 - apollo-server-errors: 3.3.1_graphql@15.8.0 - apollo-server-plugin-base: 3.7.2_graphql@15.8.0 - apollo-server-types: 3.8.0_graphql@15.8.0 + apollo-server-errors: 3.3.1(graphql@15.8.0) + apollo-server-plugin-base: 3.7.2(graphql@15.8.0) + apollo-server-types: 3.8.0(graphql@15.8.0) async-retry: 1.3.3 fast-json-stable-stringify: 2.1.0 graphql: 15.8.0 - graphql-tag: 2.12.6_graphql@15.8.0 + graphql-tag: 2.12.6(graphql@15.8.0) loglevel: 1.9.1 lru-cache: 6.0.0 node-abort-controller: 3.1.1 @@ -2824,10 +2789,11 @@ packages: dev: true optional: true - /apollo-server-env/4.2.1: + /apollo-server-env@4.2.1: resolution: {integrity: sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g==} engines: {node: '>=12.0'} deprecated: The `apollo-server-env` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/utils.fetcher` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true dependencies: node-fetch: 2.7.0 transitivePeerDependencies: @@ -2835,10 +2801,11 @@ packages: dev: true optional: true - /apollo-server-errors/3.3.1_graphql@15.8.0: + /apollo-server-errors@3.3.1(graphql@15.8.0): resolution: {integrity: sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA==} engines: {node: '>=12.0'} deprecated: The `apollo-server-errors` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: @@ -2846,9 +2813,10 @@ packages: dev: true optional: true - /apollo-server-express/3.13.0_4mq2c443wwzwcb6dpxnwkfvrzm: + /apollo-server-express@3.13.0(express@4.18.2)(graphql@15.8.0): resolution: {integrity: sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==} engines: {node: '>=12.0'} + requiresBuild: true peerDependencies: express: ^4.17.1 graphql: ^15.3.0 || ^16.0.0 @@ -2859,8 +2827,8 @@ packages: '@types/express': 4.17.14 '@types/express-serve-static-core': 4.17.31 accepts: 1.3.8 - apollo-server-core: 3.13.0_graphql@15.8.0 - apollo-server-types: 3.8.0_graphql@15.8.0 + apollo-server-core: 3.13.0(graphql@15.8.0) + apollo-server-types: 3.8.0(graphql@15.8.0) body-parser: 1.20.2 cors: 2.8.5 express: 4.18.2 @@ -2872,24 +2840,26 @@ packages: dev: true optional: true - /apollo-server-plugin-base/3.7.2_graphql@15.8.0: + /apollo-server-plugin-base@3.7.2(graphql@15.8.0): resolution: {integrity: sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw==} engines: {node: '>=12.0'} deprecated: The `apollo-server-plugin-base` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: - apollo-server-types: 3.8.0_graphql@15.8.0 + apollo-server-types: 3.8.0(graphql@15.8.0) graphql: 15.8.0 transitivePeerDependencies: - encoding dev: true optional: true - /apollo-server-types/3.8.0_graphql@15.8.0: + /apollo-server-types@3.8.0(graphql@15.8.0): resolution: {integrity: sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A==} engines: {node: '>=12.0'} deprecated: The `apollo-server-types` package is part of Apollo Server v2 and v3, which are now deprecated (end-of-life October 22nd 2023 and October 22nd 2024, respectively). This package's functionality is now found in the `@apollo/server` package. See https://www.apollographql.com/docs/apollo-server/previous-versions/ for more details. + requiresBuild: true peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: @@ -2903,14 +2873,15 @@ packages: dev: true optional: true - /apollo-server/3.13.0_graphql@15.8.0: + /apollo-server@3.13.0(graphql@15.8.0): resolution: {integrity: sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg==} + requiresBuild: true peerDependencies: graphql: ^15.3.0 || ^16.0.0 dependencies: '@types/express': 4.17.14 - apollo-server-core: 3.13.0_graphql@15.8.0 - apollo-server-express: 3.13.0_4mq2c443wwzwcb6dpxnwkfvrzm + apollo-server-core: 3.13.0(graphql@15.8.0) + apollo-server-express: 3.13.0(express@4.18.2)(graphql@15.8.0) express: 4.18.2 graphql: 15.8.0 transitivePeerDependencies: @@ -2919,20 +2890,21 @@ packages: dev: true optional: true - /app-module-path/2.2.0: + /app-module-path@2.2.0: resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} dev: true - /argparse/2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /argsarray/0.0.1: + /argsarray@0.0.1: resolution: {integrity: sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==} + requiresBuild: true dev: true optional: true - /array-buffer-byte-length/1.0.1: + /array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: @@ -2940,11 +2912,11 @@ packages: is-array-buffer: 3.0.4 dev: true - /array-flatten/1.1.1: + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-includes/3.1.7: + /array-includes@3.1.7: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: @@ -2955,7 +2927,7 @@ packages: is-string: 1.0.7 dev: true - /array.prototype.filter/1.0.3: + /array.prototype.filter@1.0.3: resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} engines: {node: '>= 0.4'} dependencies: @@ -2966,7 +2938,7 @@ packages: is-string: 1.0.7 dev: true - /array.prototype.findlastindex/1.2.4: + /array.prototype.findlastindex@1.2.4: resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} engines: {node: '>= 0.4'} dependencies: @@ -2977,7 +2949,7 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /array.prototype.flat/1.3.2: + /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: @@ -2987,7 +2959,7 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /array.prototype.flatmap/1.3.2: + /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: @@ -2997,7 +2969,7 @@ packages: es-shim-unscopables: 1.0.2 dev: true - /arraybuffer.prototype.slice/1.0.3: + /arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: @@ -3011,153 +2983,154 @@ packages: is-shared-array-buffer: 1.0.2 dev: true - /asap/2.0.6: + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true - /asn1/0.2.6: + /asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} dependencies: safer-buffer: 2.1.2 dev: true - /assert-plus/1.0.0: + /assert-plus@1.0.0: resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} engines: {node: '>=0.8'} dev: true - /assertion-error/1.1.0: + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true - /assertion-error/2.0.1: + /assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} dev: true - /ast-parents/0.0.1: + /ast-parents@0.0.1: resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} dev: true - /astral-regex/2.0.0: + /astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} engines: {node: '>=8'} dev: true - /async-eventemitter/0.2.4: + /async-eventemitter@0.2.4: resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==} dependencies: async: 2.6.4 dev: true - /async-limiter/1.0.1: + /async-limiter@1.0.1: resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} dev: true - /async-retry/1.3.3: + /async-retry@1.3.3: resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + requiresBuild: true dependencies: retry: 0.13.1 dev: true optional: true - /async/2.6.4: + /async@2.6.4: resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} dependencies: lodash: 4.17.21 dev: true - /async/3.2.5: + /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true - /asynckit/0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true - /at-least-node/1.0.0: + /at-least-node@1.0.0: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - /atomically/1.7.0: + /atomically@1.7.0: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} dev: true - /available-typed-arrays/1.0.6: + /available-typed-arrays@1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} dev: true - /aws-sign2/0.7.0: + /aws-sign2@0.7.0: resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} dev: true - /aws4/1.12.0: + /aws4@1.12.0: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true - /axios-retry/3.9.1: + /axios-retry@3.9.1: resolution: {integrity: sha512-8PJDLJv7qTTMMwdnbMvrLYuvB47M81wRtxQmEdV5w4rgbTXTt+vtPkXwajOfOdSyv/wZICJOC+/UhXH4aQ/R+w==} dependencies: '@babel/runtime': 7.23.9 is-retry-allowed: 2.2.0 dev: true - /axios/0.26.1: + /axios@0.26.1: resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.5(debug@4.3.4) transitivePeerDependencies: - debug dev: true - /axios/1.5.0_debug@4.3.4: + /axios@1.5.0(debug@4.3.4): resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.5(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: true - /axios/1.6.7: + /axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: - follow-redirects: 1.15.5 + follow-redirects: 1.15.5(debug@4.3.4) form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: true - /balanced-match/1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true - /base-x/3.0.9: + /base-x@3.0.9: resolution: {integrity: sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==} dependencies: safe-buffer: 5.2.1 dev: true - /base64-js/1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} dev: true - /bcrypt-pbkdf/1.0.2: + /bcrypt-pbkdf@1.0.2: resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} dependencies: tweetnacl: 0.14.5 dev: true - /bech32/1.1.4: + /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true - /better-ajv-errors/0.8.2_ajv@6.12.6: + /better-ajv-errors@0.8.2(ajv@6.12.6): resolution: {integrity: sha512-FnODTBJSQSHmJXDLPiC7ca0dC4S1HSTPv1+Hg2sm/C71i3Dj0l1jcUEaq/3OQ6MmnUveshTsUvUj65pDSr3Qow==} peerDependencies: ajv: 4.11.8 - 8 @@ -3172,54 +3145,49 @@ packages: leven: 3.1.0 dev: true - /big-integer/1.6.36: + /big-integer@1.6.36: resolution: {integrity: sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==} engines: {node: '>=0.6'} dev: true - /big.js/6.2.1: + /big.js@6.2.1: resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} dev: true - /bigint-crypto-utils/3.3.0: - resolution: {integrity: sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg==} - engines: {node: '>=14.0.0'} - dev: true - - /bignumber.js/7.2.1: + /bignumber.js@7.2.1: resolution: {integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==} dev: true - /bignumber.js/9.1.2: + /bignumber.js@9.1.2: resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} dev: true - /binary-extensions/2.2.0: + /binary-extensions@2.2.0: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} dev: true - /blakejs/1.2.1: + /blakejs@1.2.1: resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} dev: true - /bluebird/3.7.2: + /bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} dev: true - /bn.js/4.11.6: + /bn.js@4.11.6: resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} dev: true - /bn.js/4.12.0: + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: true - /bn.js/5.2.1: + /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} dev: true - /body-parser/1.19.2: + /body-parser@1.19.2: resolution: {integrity: sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==} engines: {node: '>= 0.8'} dependencies: @@ -3237,7 +3205,7 @@ packages: - supports-color dev: true - /body-parser/1.20.1: + /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: @@ -3257,7 +3225,7 @@ packages: - supports-color dev: true - /body-parser/1.20.2: + /body-parser@1.20.2: resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: @@ -3277,11 +3245,11 @@ packages: - supports-color dev: true - /boolbase/1.0.0: + /boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true - /boxen/5.1.2: + /boxen@5.1.2: resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} engines: {node: '>=10'} dependencies: @@ -3295,44 +3263,35 @@ packages: wrap-ansi: 7.0.0 dev: true - /brace-expansion/1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 dev: true - /brace-expansion/2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 dev: true - /braces/3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} dependencies: fill-range: 7.0.1 dev: true - /brorand/1.1.0: + /brorand@1.1.0: resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} dev: true - /browser-level/1.0.1: - resolution: {integrity: sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==} - dependencies: - abstract-level: 1.0.4 - catering: 2.1.1 - module-error: 1.0.2 - run-parallel-limit: 1.1.0 - dev: true - - /browser-stdout/1.3.1: + /browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserify-aes/1.2.0: + /browserify-aes@1.2.0: resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} dependencies: buffer-xor: 1.0.3 @@ -3343,13 +3302,13 @@ packages: safe-buffer: 5.2.1 dev: true - /bs58/4.0.1: + /bs58@4.0.1: resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} dependencies: base-x: 3.0.9 dev: true - /bs58check/2.1.2: + /bs58check@2.1.2: resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} dependencies: bs58: 4.0.1 @@ -3357,33 +3316,33 @@ packages: safe-buffer: 5.2.1 dev: true - /buffer-from/1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} dev: true - /buffer-to-arraybuffer/0.0.5: + /buffer-to-arraybuffer@0.0.5: resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} dev: true - /buffer-xor/1.0.3: + /buffer-xor@1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} dev: true - /buffer/5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /buffer/6.0.3: + /buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 dev: true - /bufferutil/4.0.5: + /bufferutil@4.0.5: resolution: {integrity: sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -3392,7 +3351,7 @@ packages: dev: true optional: true - /bufferutil/4.0.7: + /bufferutil@4.0.7: resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -3400,7 +3359,7 @@ packages: node-gyp-build: 4.8.0 dev: true - /bufferutil/4.0.8: + /bufferutil@4.0.8: resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -3408,38 +3367,38 @@ packages: node-gyp-build: 4.8.0 dev: true - /builtin-modules/3.3.0: + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} dev: true - /builtins/5.0.1: + /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: semver: 7.6.0 dev: true - /bytes/3.1.2: + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} dev: true - /cacheable-lookup/5.0.4: + /cacheable-lookup@5.0.4: resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} engines: {node: '>=10.6.0'} dev: true - /cacheable-lookup/6.1.0: + /cacheable-lookup@6.1.0: resolution: {integrity: sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww==} engines: {node: '>=10.6.0'} dev: true - /cacheable-lookup/7.0.0: + /cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} dev: true - /cacheable-request/10.2.14: + /cacheable-request@10.2.14: resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} dependencies: @@ -3452,7 +3411,7 @@ packages: responselike: 3.0.0 dev: true - /cacheable-request/7.0.4: + /cacheable-request@7.0.4: resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} engines: {node: '>=8'} dependencies: @@ -3465,7 +3424,7 @@ packages: responselike: 2.0.1 dev: true - /call-bind/1.0.7: + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} dependencies: @@ -3476,48 +3435,43 @@ packages: set-function-length: 1.2.1 dev: true - /callsites/3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} dev: true - /camel-case/3.0.0: + /camel-case@3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 dev: true - /camelcase/3.0.0: + /camelcase@3.0.0: resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==} engines: {node: '>=0.10.0'} dev: true - /camelcase/4.1.0: + /camelcase@4.1.0: resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} engines: {node: '>=4'} dev: true - /camelcase/6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} dev: true - /case/1.6.3: - resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} - engines: {node: '>= 0.8.0'} - dev: true - - /caseless/0.12.0: + /caseless@0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true - /catering/2.1.1: + /catering@2.1.1: resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} engines: {node: '>=6'} dev: true - /cbor/5.2.0: + /cbor@5.2.0: resolution: {integrity: sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==} engines: {node: '>=6.0.0'} dependencies: @@ -3525,21 +3479,21 @@ packages: nofilter: 1.0.4 dev: true - /cbor/8.1.0: + /cbor@8.1.0: resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} engines: {node: '>=12.19'} dependencies: nofilter: 3.1.0 dev: true - /cbor/9.0.2: + /cbor@9.0.2: resolution: {integrity: sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ==} engines: {node: '>=16'} dependencies: nofilter: 3.1.0 dev: true - /chai-bn/0.2.2_bn.js@4.12.0+chai@4.4.1: + /chai-bn@0.2.2(bn.js@4.12.0)(chai@4.4.1): resolution: {integrity: sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg==} peerDependencies: bn.js: ^4.11.0 @@ -3549,7 +3503,7 @@ packages: chai: 4.4.1 dev: true - /chai/4.4.1: + /chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} dependencies: @@ -3562,7 +3516,7 @@ packages: type-detect: 4.0.8 dev: true - /chai/5.1.0: + /chai@5.1.0: resolution: {integrity: sha512-kDZ7MZyM6Q1DhR9jy7dalKohXQ2yrlXkk59CR52aRKxJrobmlBNqnFQxX9xOX8w+4mz8SYlKJa/7D7ddltFXCw==} engines: {node: '>=12'} dependencies: @@ -3573,7 +3527,7 @@ packages: pathval: 2.0.0 dev: true - /chalk/2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} dependencies: @@ -3582,7 +3536,7 @@ packages: supports-color: 5.5.0 dev: true - /chalk/4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} dependencies: @@ -3590,7 +3544,7 @@ packages: supports-color: 7.2.0 dev: true - /change-case/3.0.2: + /change-case@3.0.2: resolution: {integrity: sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==} dependencies: camel-case: 3.0.0 @@ -3613,22 +3567,22 @@ packages: upper-case-first: 1.1.2 dev: true - /charenc/0.0.2: + /charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} dev: true - /check-error/1.0.3: + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: get-func-name: 2.0.2 dev: true - /check-error/2.0.0: + /check-error@2.0.0: resolution: {integrity: sha512-tjLAOBHKVxtPoHe/SA7kNOMvhCRdCJ3vETdeY0RuAc9popf+hyaSV6ZEg9hr4cpWF7jmo/JSWEnLDrnijS9Tog==} engines: {node: '>= 16'} dev: true - /cheerio-select/2.1.0: + /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: boolbase: 1.0.0 @@ -3639,7 +3593,7 @@ packages: domutils: 3.1.0 dev: true - /cheerio/1.0.0-rc.12: + /cheerio@1.0.0-rc.12: resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} dependencies: @@ -3652,7 +3606,7 @@ packages: parse5-htmlparser2-tree-adapter: 7.0.0 dev: true - /chokidar/3.5.3: + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: @@ -3667,30 +3621,22 @@ packages: fsevents: 2.3.3 dev: true - /chokidar/3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + /chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + readdirp: 4.0.2 dev: true - /chownr/1.1.4: + /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true - /ci-info/2.0.0: + /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: true - /cids/0.7.5: + /cids@0.7.5: resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} deprecated: This module has been superseded by the multiformats module @@ -3702,62 +3648,50 @@ packages: multihashes: 0.4.21 dev: true - /cipher-base/1.0.4: + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: inherits: 2.0.4 safe-buffer: 5.2.1 dev: true - /circular/1.0.5: + /circular@1.0.5: resolution: {integrity: sha512-n4Sspha+wxUl5zeA3JYp1zFCjsLz2VfXIe2gRKNQBrIX+7iPdGcCGZOF8W8IULtllZ/aejXtySfdFFt1wy/3JQ==} dev: true - /class-is/1.1.0: + /class-is@1.1.0: resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} dev: true - /classic-level/1.4.1: - resolution: {integrity: sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ==} - engines: {node: '>=12'} - requiresBuild: true - dependencies: - abstract-level: 1.0.4 - catering: 2.1.1 - module-error: 1.0.2 - napi-macros: 2.2.2 - node-gyp-build: 4.8.0 - dev: true - - /clean-stack/2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} dev: true - /cli-boxes/2.2.1: + /cli-boxes@2.2.1: resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} engines: {node: '>=6'} dev: true - /cli-cursor/3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 dev: true - /cli-logger/0.5.40: + /cli-logger@0.5.40: resolution: {integrity: sha512-piXVCa0TLm/+A7xdVEhw7t4OSrsmJaZIekWcoGrVMY1bHtLJTXgiNzgHlKT0EVHQ14sCKWorQJazU7UWgZhXOQ==} dependencies: circular: 1.0.5 cli-util: 1.1.27 dev: true - /cli-regexp/0.1.2: + /cli-regexp@0.1.2: resolution: {integrity: sha512-L++cAQ5g0Nu6aV56B3uaR+c7jEGSAa4WApY1ZN7XiD8niJ5jRfXE/qvMwgz3uZBG0rft4hJS75Vpz2F3mSm4Mg==} dev: true - /cli-table3/0.5.1: + /cli-table3@0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} engines: {node: '>=6'} dependencies: @@ -3767,13 +3701,13 @@ packages: colors: 1.4.0 dev: true - /cli-util/1.1.27: + /cli-util@1.1.27: resolution: {integrity: sha512-Z6+zI0kIrqf9Oi+PmUm8J9AELp8bTf2vCLYseudYtdOPNJvzpNiExO95aHIm477IbPdu/8SE9Wvc/M1kJl4Anw==} dependencies: cli-regexp: 0.1.2 dev: true - /cliui/3.2.0: + /cliui@3.2.0: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} dependencies: string-width: 1.0.2 @@ -3781,7 +3715,7 @@ packages: wrap-ansi: 2.1.0 dev: true - /cliui/7.0.4: + /cliui@7.0.4: resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} dependencies: string-width: 4.2.3 @@ -3789,110 +3723,108 @@ packages: wrap-ansi: 7.0.0 dev: true - /clone-buffer/1.0.0: + /clone-buffer@1.0.0: resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} engines: {node: '>= 0.10'} + requiresBuild: true dev: true optional: true - /clone-response/1.0.3: + /clone-response@1.0.3: resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} dependencies: mimic-response: 1.0.1 dev: true - /code-error-fragment/0.0.230: + /code-error-fragment@0.0.230: resolution: {integrity: sha512-cadkfKp6932H8UkhzE/gcUqhRMNf8jHzkAN7+5Myabswaghu4xABTgPHDCjW+dBAJxj/SpkTYokpzDqY4pCzQw==} engines: {node: '>= 4'} dev: true - /code-point-at/1.1.0: + /code-point-at@1.1.0: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} dev: true - /color-convert/1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 dev: true - /color-convert/2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 dev: true - /color-name/1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} dev: true - /color-name/1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} dev: true - /color-string/1.9.1: + /color-string@1.9.1: resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} dependencies: color-name: 1.1.4 simple-swizzle: 0.2.2 dev: true - /color/3.2.1: + /color@3.2.1: resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} dependencies: color-convert: 1.9.3 color-string: 1.9.1 dev: true - /colors/1.4.0: + /colors@1.4.0: resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} engines: {node: '>=0.1.90'} dev: true - /colorspace/1.1.4: + /colorspace@1.1.4: resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} dependencies: color: 3.2.1 text-hex: 1.0.0 dev: true - /combined-stream/1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 dev: true - /command-exists/1.2.9: + /command-exists@1.2.9: resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} dev: true - /commander/10.0.1: + /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} dev: true - /commander/2.20.3: + /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + requiresBuild: true dev: true optional: true - /commander/3.0.2: - resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} - dev: true - - /commander/8.3.0: + /commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} dev: true - /concat-map/0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concat-stream/1.6.2: + /concat-stream@1.6.2: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} dependencies: @@ -3902,12 +3834,12 @@ packages: typedarray: 0.0.6 dev: true - /conf/10.2.0: + /conf@10.2.0: resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} engines: {node: '>=12'} dependencies: ajv: 8.12.0 - ajv-formats: 2.1.1 + ajv-formats: 2.1.1(ajv@8.12.0) atomically: 1.7.0 debounce-fn: 4.0.0 dot-prop: 6.0.1 @@ -3918,28 +3850,28 @@ packages: semver: 7.6.0 dev: true - /config-chain/1.1.13: + /config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: ini: 1.3.8 proto-list: 1.2.4 dev: true - /constant-case/2.0.0: + /constant-case@2.0.0: resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} dependencies: snake-case: 2.1.0 upper-case: 1.1.3 dev: true - /content-disposition/0.5.4: + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 dev: true - /content-hash/2.5.2: + /content-hash@2.5.2: resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} dependencies: cids: 0.7.5 @@ -3947,39 +3879,39 @@ packages: multihashes: 0.4.21 dev: true - /content-type/1.0.5: + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} dev: true - /cookie-signature/1.0.6: + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true - /cookie/0.4.2: + /cookie@0.4.2: resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} engines: {node: '>= 0.6'} dev: true - /cookie/0.5.0: + /cookie@0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} dev: true - /core-js/3.36.0: + /core-js@3.36.0: resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} requiresBuild: true dev: true - /core-util-is/1.0.2: + /core-util-is@1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true - /core-util-is/1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: true - /cors/2.8.5: + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} dependencies: @@ -3987,7 +3919,7 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig/8.3.6: + /cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -4002,13 +3934,13 @@ packages: path-type: 4.0.0 dev: true - /crc-32/1.2.2: + /crc-32@1.2.2: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} hasBin: true dev: true - /create-hash/1.2.0: + /create-hash@1.2.0: resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} dependencies: cipher-base: 1.0.4 @@ -4018,7 +3950,7 @@ packages: sha.js: 2.4.11 dev: true - /create-hmac/1.1.7: + /create-hmac@1.1.7: resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} dependencies: cipher-base: 1.0.4 @@ -4029,7 +3961,7 @@ packages: sha.js: 2.4.11 dev: true - /cross-env/7.0.3: + /cross-env@7.0.3: resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} hasBin: true @@ -4037,7 +3969,7 @@ packages: cross-spawn: 7.0.3 dev: true - /cross-fetch/3.1.8: + /cross-fetch@3.1.8: resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} dependencies: node-fetch: 2.7.0 @@ -4045,7 +3977,7 @@ packages: - encoding dev: true - /cross-fetch/4.0.0: + /cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} dependencies: node-fetch: 2.7.0 @@ -4053,7 +3985,7 @@ packages: - encoding dev: true - /cross-spawn/7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} dependencies: @@ -4062,11 +3994,11 @@ packages: which: 2.0.2 dev: true - /crypt/0.0.2: + /crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} dev: true - /crypto-addr-codec/0.1.8: + /crypto-addr-codec@0.1.8: resolution: {integrity: sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g==} dependencies: base-x: 3.0.9 @@ -4078,7 +4010,7 @@ packages: sha3: 2.1.4 dev: true - /css-select/5.1.0: + /css-select@5.1.0: resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: boolbase: 1.0.0 @@ -4088,17 +4020,18 @@ packages: nth-check: 2.1.1 dev: true - /css-what/6.1.0: + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} dev: true - /cssfilter/0.0.10: + /cssfilter@0.0.10: resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + requiresBuild: true dev: true optional: true - /custom-error-test-helper/1.0.6: + /custom-error-test-helper@1.0.6: resolution: {integrity: sha512-mtSur97B5c2Nxx0HS7VQtVl9FMNl/Xf13RxTWwfMLIKnNVror/e43ll6VWjs+J5gP2E6AZn5+Z0AqTNF5UXIcw==} dependencies: '@ethersproject/abi': 5.7.0 @@ -4107,33 +4040,34 @@ packages: chai: 4.4.1 dev: true - /d/1.0.1: + /d@1.0.1: resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} dependencies: es5-ext: 0.10.62 type: 1.2.0 dev: true - /dashdash/1.14.1: + /dashdash@1.14.1: resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} engines: {node: '>=0.10'} dependencies: assert-plus: 1.0.0 dev: true - /dataloader/2.1.0: + /dataloader@2.1.0: resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} + requiresBuild: true dev: true optional: true - /debounce-fn/4.0.0: + /debounce-fn@4.0.0: resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} engines: {node: '>=10'} dependencies: mimic-fn: 3.1.0 dev: true - /debug/2.6.9: + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' @@ -4144,8 +4078,9 @@ packages: ms: 2.0.0 dev: true - /debug/3.1.0: + /debug@3.1.0: resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + requiresBuild: true peerDependencies: supports-color: '*' peerDependenciesMeta: @@ -4156,7 +4091,7 @@ packages: dev: true optional: true - /debug/3.2.7: + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' @@ -4167,19 +4102,7 @@ packages: ms: 2.1.3 dev: true - /debug/4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.2 - dev: true - - /debug/4.3.4_supports-color@8.1.1: + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -4192,71 +4115,72 @@ packages: supports-color: 8.1.1 dev: true - /decamelize/1.2.0: + /decamelize@1.2.0: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} dev: true - /decamelize/4.0.0: + /decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} dev: true - /decode-uri-component/0.2.2: + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} dev: true - /decompress-response/3.3.0: + /decompress-response@3.3.0: resolution: {integrity: sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==} engines: {node: '>=4'} dependencies: mimic-response: 1.0.1 dev: true - /decompress-response/6.0.0: + /decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 dev: true - /deep-eql/4.1.3: + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} dependencies: type-detect: 4.0.8 dev: true - /deep-eql/5.0.1: + /deep-eql@5.0.1: resolution: {integrity: sha512-nwQCf6ne2gez3o1MxWifqkciwt0zhl0LO1/UwVu4uMBuPmflWM4oQ70XMqHqnBJA+nhzncaqL9HVL6KkHJ28lw==} engines: {node: '>=6'} dev: true - /deep-extend/0.6.0: + /deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} dev: true - /deep-is/0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} dev: true - /defer-to-connect/2.0.1: + /defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} dev: true - /deferred-leveldown/5.3.0: + /deferred-leveldown@5.3.0: resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==} engines: {node: '>=6'} + requiresBuild: true dependencies: abstract-leveldown: 6.2.3 inherits: 2.0.4 dev: true optional: true - /define-data-property/1.1.4: + /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: @@ -4265,7 +4189,7 @@ packages: gopd: 1.0.1 dev: true - /define-properties/1.2.1: + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: @@ -4274,71 +4198,71 @@ packages: object-keys: 1.1.1 dev: true - /delay/5.0.0: + /delay@5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} dev: true - /delayed-stream/1.0.0: + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} dev: true - /depd/1.1.2: + /depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} dev: true - /depd/2.0.0: + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} dev: true - /destroy/1.0.4: + /destroy@1.0.4: resolution: {integrity: sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==} dev: true - /destroy/1.2.0: + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: true - /detect-indent/5.0.0: + /detect-indent@5.0.0: resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} engines: {node: '>=4'} dev: true - /detect-installed/2.0.4: + /detect-installed@2.0.4: resolution: {integrity: sha512-IpGo06Ff/rMGTKjFvVPbY9aE4mRT2XP3eYHC/ZS25LKDr2h8Gbv74Ez2q/qd7IYDqD9ZjI/VGedHNXsbKZ/Eig==} engines: {node: '>=4', npm: '>=2'} dependencies: get-installed-path: 2.1.1 dev: true - /diff/5.0.0: + /diff@5.0.0: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} dev: true - /dlv/1.1.3: + /dlv@1.1.3: resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} dev: true - /doctrine/2.1.0: + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 dev: true - /doctrine/3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 dev: true - /dom-serializer/2.0.0: + /dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 @@ -4346,22 +4270,22 @@ packages: entities: 4.5.0 dev: true - /dom-walk/0.1.2: + /dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} dev: true - /domelementtype/2.3.0: + /domelementtype@2.3.0: resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} dev: true - /domhandler/5.0.3: + /domhandler@5.0.3: resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 dev: true - /domutils/3.1.0: + /domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: dom-serializer: 2.0.0 @@ -4369,46 +4293,47 @@ packages: domhandler: 5.0.3 dev: true - /dot-case/2.1.1: + /dot-case@2.1.1: resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} dependencies: no-case: 2.3.2 dev: true - /dot-prop/6.0.1: + /dot-prop@6.0.1: resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} engines: {node: '>=10'} dependencies: is-obj: 2.0.0 dev: true - /dotenv/10.0.0: + /dotenv@10.0.0: resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} engines: {node: '>=10'} dev: true - /dotenv/16.4.4: + /dotenv@16.4.4: resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==} engines: {node: '>=12'} dev: false - /double-ended-queue/2.1.0-0: + /double-ended-queue@2.1.0-0: resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} + requiresBuild: true dev: true optional: true - /ecc-jsbn/0.1.2: + /ecc-jsbn@0.1.2: resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 dev: true - /ee-first/1.1.1: + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: true - /elliptic/6.5.4: + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: bn.js: 4.12.0 @@ -4420,32 +4345,33 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /emittery/0.10.0: + /emittery@0.10.0: resolution: {integrity: sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==} engines: {node: '>=12'} dev: true - /emittery/0.4.1: + /emittery@0.4.1: resolution: {integrity: sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==} engines: {node: '>=6'} dev: true - /emoji-regex/8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: true - /enabled/2.0.0: + /enabled@2.0.0: resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} dev: true - /encodeurl/1.0.2: + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: true - /encoding-down/6.3.0: + /encoding-down@6.3.0: resolution: {integrity: sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==} engines: {node: '>=6'} + requiresBuild: true dependencies: abstract-leveldown: 6.2.3 inherits: 2.0.4 @@ -4454,20 +4380,21 @@ packages: dev: true optional: true - /end-of-stream/1.4.4: + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} dependencies: once: 1.4.0 dev: true - /end-stream/0.1.0: + /end-stream@0.1.0: resolution: {integrity: sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==} + requiresBuild: true dependencies: write-stream: 0.4.3 dev: true optional: true - /enquirer/2.4.1: + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} dependencies: @@ -4475,31 +4402,32 @@ packages: strip-ansi: 6.0.1 dev: true - /entities/4.5.0: + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} dev: true - /env-paths/2.2.1: + /env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} dev: true - /errno/0.1.8: + /errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true + requiresBuild: true dependencies: prr: 1.0.1 dev: true optional: true - /error-ex/1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 dev: true - /es-abstract/1.22.4: + /es-abstract@1.22.4: resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} engines: {node: '>= 0.4'} dependencies: @@ -4546,23 +4474,23 @@ packages: which-typed-array: 1.1.14 dev: true - /es-array-method-boxes-properly/1.0.0: + /es-array-method-boxes-properly@1.0.0: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true - /es-define-property/1.0.0: + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} dependencies: get-intrinsic: 1.2.4 dev: true - /es-errors/1.3.0: + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} dev: true - /es-set-tostringtag/2.0.2: + /es-set-tostringtag@2.0.2: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: @@ -4571,13 +4499,13 @@ packages: hasown: 2.0.1 dev: true - /es-shim-unscopables/1.0.2: + /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: hasown: 2.0.1 dev: true - /es-to-primitive/1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: @@ -4586,7 +4514,7 @@ packages: is-symbol: 1.0.4 dev: true - /es5-ext/0.10.62: + /es5-ext@0.10.62: resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} engines: {node: '>=0.10'} requiresBuild: true @@ -4596,7 +4524,7 @@ packages: next-tick: 1.1.0 dev: true - /es6-iterator/2.0.3: + /es6-iterator@2.0.3: resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} dependencies: d: 1.0.1 @@ -4604,37 +4532,37 @@ packages: es6-symbol: 3.1.3 dev: true - /es6-promise/4.2.8: + /es6-promise@4.2.8: resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} dev: true - /es6-symbol/3.1.3: + /es6-symbol@3.1.3: resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} dependencies: d: 1.0.1 ext: 1.7.0 dev: true - /escalade/3.1.2: + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true - /escape-html/1.0.3: + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: true - /escape-string-regexp/1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} dev: true - /escape-string-regexp/4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} dev: true - /eslint-compat-utils/0.1.2_eslint@8.56.0: + /eslint-compat-utils@0.1.2(eslint@8.56.0): resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} engines: {node: '>=12'} peerDependencies: @@ -4643,7 +4571,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-config-standard/17.1.0_ot4howdeavqht6h5s42eunnfxi: + /eslint-config-standard@17.1.0(eslint-plugin-import@2.29.1)(eslint-plugin-n@16.6.2)(eslint-plugin-promise@6.1.1)(eslint@8.56.0): resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4653,12 +4581,12 @@ packages: eslint-plugin-promise: ^6.0.0 dependencies: eslint: 8.56.0 - eslint-plugin-import: 2.29.1_eslint@8.56.0 - eslint-plugin-n: 16.6.2_eslint@8.56.0 - eslint-plugin-promise: 6.1.1_eslint@8.56.0 + eslint-plugin-import: 2.29.1(eslint@8.56.0) + eslint-plugin-n: 16.6.2(eslint@8.56.0) + eslint-plugin-promise: 6.1.1(eslint@8.56.0) dev: true - /eslint-import-resolver-node/0.3.9: + /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 @@ -4668,7 +4596,7 @@ packages: - supports-color dev: true - /eslint-module-utils/2.8.0_rzg3ygvhoewmy7caurhnki56y4: + /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -4696,19 +4624,19 @@ packages: - supports-color dev: true - /eslint-plugin-es-x/7.5.0_eslint@8.56.0: + /eslint-plugin-es-x@7.5.0(eslint@8.56.0): resolution: {integrity: sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.56.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 eslint: 8.56.0 - eslint-compat-utils: 0.1.2_eslint@8.56.0 + eslint-compat-utils: 0.1.2(eslint@8.56.0) dev: true - /eslint-plugin-import/2.29.1_eslint@8.56.0: + /eslint-plugin-import@2.29.1(eslint@8.56.0): resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} engines: {node: '>=4'} peerDependencies: @@ -4726,7 +4654,7 @@ packages: doctrine: 2.1.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0_rzg3ygvhoewmy7caurhnki56y4 + eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 @@ -4742,16 +4670,16 @@ packages: - supports-color dev: true - /eslint-plugin-n/16.6.2_eslint@8.56.0: + /eslint-plugin-n@16.6.2(eslint@8.56.0): resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} engines: {node: '>=16.0.0'} peerDependencies: eslint: '>=7.0.0' dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.56.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) builtins: 5.0.1 eslint: 8.56.0 - eslint-plugin-es-x: 7.5.0_eslint@8.56.0 + eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.2 globals: 13.24.0 ignore: 5.3.1 @@ -4762,7 +4690,7 @@ packages: semver: 7.6.0 dev: true - /eslint-plugin-promise/6.1.1_eslint@8.56.0: + /eslint-plugin-promise@6.1.1(eslint@8.56.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4771,7 +4699,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-scope/7.2.2: + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: @@ -4779,17 +4707,17 @@ packages: estraverse: 5.3.0 dev: true - /eslint-visitor-keys/3.4.3: + /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.56.0: + /eslint@8.56.0: resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0_eslint@8.56.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) '@eslint-community/regexpp': 4.10.0 '@eslint/eslintrc': 2.1.4 '@eslint/js': 8.56.0 @@ -4800,7 +4728,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -4831,52 +4759,52 @@ packages: - supports-color dev: true - /espree/9.6.1: + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.11.3 - acorn-jsx: 5.3.2_acorn@8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true - /esquery/1.5.0: + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 dev: true - /esrecurse/4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 dev: true - /estraverse/5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} dev: true - /esutils/2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} dev: true - /etag/1.8.1: + /etag@1.8.1: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: true - /eth-ens-namehash/2.0.8: + /eth-ens-namehash@2.0.8: resolution: {integrity: sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==} dependencies: idna-uts46-hx: 2.3.1 js-sha3: 0.5.7 dev: true - /eth-gas-reporter/0.2.27: + /eth-gas-reporter@0.2.27: resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} peerDependencies: '@codechecks/client': ^0.1.0 @@ -4903,13 +4831,13 @@ packages: - utf-8-validate dev: true - /eth-helpers/1.3.1: + /eth-helpers@1.3.1: resolution: {integrity: sha512-iEcqhro1pqnZbnE3te0KDargTadc1J4zAiV0J1dwBDPo5nbHYBMxPDLQFA+0sMKUxe7cjHtMger6/75ukN3P5A==} dependencies: nanoassert: 2.0.0 dev: true - /eth-lib/0.1.29: + /eth-lib@0.1.29: resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} dependencies: bn.js: 4.12.0 @@ -4924,7 +4852,7 @@ packages: - utf-8-validate dev: true - /eth-lib/0.2.8: + /eth-lib@0.2.8: resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} dependencies: bn.js: 4.12.0 @@ -4932,13 +4860,13 @@ packages: xhr-request-promise: 0.1.3 dev: true - /ethereum-bloom-filters/1.0.10: + /ethereum-bloom-filters@1.0.10: resolution: {integrity: sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==} dependencies: js-sha3: 0.8.0 dev: true - /ethereum-cryptography/0.1.3: + /ethereum-cryptography@0.1.3: resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} dependencies: '@types/pbkdf2': 3.1.2 @@ -4958,7 +4886,7 @@ packages: setimmediate: 1.0.5 dev: true - /ethereum-cryptography/1.2.0: + /ethereum-cryptography@1.2.0: resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} dependencies: '@noble/hashes': 1.2.0 @@ -4967,7 +4895,7 @@ packages: '@scure/bip39': 1.1.1 dev: true - /ethereum-cryptography/2.1.3: + /ethereum-cryptography@2.1.3: resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} dependencies: '@noble/curves': 1.3.0 @@ -4976,14 +4904,14 @@ packages: '@scure/bip39': 1.2.2 dev: true - /ethereumjs-abi/0.6.8: + /ethereumjs-abi@0.6.8: resolution: {integrity: sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==} dependencies: bn.js: 4.12.0 ethereumjs-util: 6.2.1 dev: true - /ethereumjs-util/6.2.1: + /ethereumjs-util@6.2.1: resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} dependencies: '@types/bn.js': 4.11.6 @@ -4995,7 +4923,7 @@ packages: rlp: 2.2.7 dev: true - /ethereumjs-util/7.1.5: + /ethereumjs-util@7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} dependencies: @@ -5006,7 +4934,7 @@ packages: rlp: 2.2.7 dev: true - /ethers/4.0.49: + /ethers@4.0.49: resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} dependencies: aes-js: 3.0.0 @@ -5020,7 +4948,7 @@ packages: xmlhttprequest: 1.8.0 dev: true - /ethers/5.2.0: + /ethers@5.2.0: resolution: {integrity: sha512-HqFGU2Qab0mAg3y1eHKVMXS4i1gTObMY0/4+x4LiO72NHhJL3Z795gnqyivmwG1J8e5NLSlRSfyIR7TL0Hw3ig==} dependencies: '@ethersproject/abi': 5.2.0 @@ -5058,7 +4986,7 @@ packages: - utf-8-validate dev: true - /ethers/5.7.2: + /ethers@5.7.2: resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} dependencies: '@ethersproject/abi': 5.7.0 @@ -5096,7 +5024,7 @@ packages: - utf-8-validate dev: true - /ethjs-abi/0.2.1: + /ethjs-abi@0.2.1: resolution: {integrity: sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==} engines: {node: '>=6.5.0', npm: '>=3'} dependencies: @@ -5105,7 +5033,7 @@ packages: number-to-bn: 1.7.0 dev: true - /ethjs-unit/0.1.6: + /ethjs-unit@0.1.6: resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} engines: {node: '>=6.5.0', npm: '>=3'} dependencies: @@ -5113,7 +5041,7 @@ packages: number-to-bn: 1.7.0 dev: true - /ethjs-util/0.1.6: + /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} engines: {node: '>=6.5.0', npm: '>=3'} dependencies: @@ -5121,31 +5049,32 @@ packages: strip-hex-prefix: 1.0.0 dev: true - /event-target-shim/5.0.1: + /event-target-shim@5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} + requiresBuild: true dev: true optional: true - /eventemitter3/4.0.4: + /eventemitter3@4.0.4: resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} dev: true - /evp_bytestokey/1.0.3: + /evp_bytestokey@1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} dependencies: md5.js: 1.3.5 safe-buffer: 5.2.1 dev: true - /expand-tilde/2.0.2: + /expand-tilde@2.0.2: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} dependencies: homedir-polyfill: 1.0.3 dev: true - /express/4.17.3: + /express@4.17.3: resolution: {integrity: sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==} engines: {node: '>= 0.10.0'} dependencies: @@ -5183,7 +5112,7 @@ packages: - supports-color dev: true - /express/4.18.2: + /express@4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} dependencies: @@ -5222,82 +5151,83 @@ packages: - supports-color dev: true - /ext/1.7.0: + /ext@1.7.0: resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} dependencies: type: 2.7.2 dev: true - /extend/3.0.2: + /extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} dev: true - /extract-files/9.0.0: + /extract-files@9.0.0: resolution: {integrity: sha512-CvdFfHkC95B4bBBk36hcEmvdR2awOdhhVUYH6S/zrVj3477zven/fJMYg7121h4T1xHZC+tetUpubpAhxwI7hQ==} engines: {node: ^10.17.0 || ^12.0.0 || >= 13.7.0} dev: true - /extsprintf/1.3.0: + /extsprintf@1.3.0: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} dev: true - /fast-check/3.1.1: + /fast-check@3.1.1: resolution: {integrity: sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==} engines: {node: '>=8.0.0'} dependencies: pure-rand: 5.0.5 dev: true - /fast-deep-equal/3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-diff/1.3.0: + /fast-diff@1.3.0: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-json-stable-stringify/2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} dev: true - /fast-levenshtein/2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.17.1: + /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true - /fecha/4.2.3: + /fecha@4.2.3: resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} dev: true - /fetch-cookie/0.11.0: + /fetch-cookie@0.11.0: resolution: {integrity: sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==} engines: {node: '>=8'} + requiresBuild: true dependencies: tough-cookie: 4.1.3 dev: true optional: true - /file-entry-cache/6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 dev: true - /fill-range/7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 dev: true - /finalhandler/1.1.2: + /finalhandler@1.1.2: resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} engines: {node: '>= 0.8'} dependencies: @@ -5312,7 +5242,7 @@ packages: - supports-color dev: true - /finalhandler/1.2.0: + /finalhandler@1.2.0: resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} engines: {node: '>= 0.8'} dependencies: @@ -5327,7 +5257,7 @@ packages: - supports-color dev: true - /find-up/1.1.2: + /find-up@1.1.2: resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} engines: {node: '>=0.10.0'} dependencies: @@ -5335,21 +5265,21 @@ packages: pinkie-promise: 2.0.1 dev: true - /find-up/2.1.0: + /find-up@2.1.0: resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} engines: {node: '>=4'} dependencies: locate-path: 2.0.0 dev: true - /find-up/3.0.0: + /find-up@3.0.0: resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} engines: {node: '>=6'} dependencies: locate-path: 3.0.0 dev: true - /find-up/4.1.0: + /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} dependencies: @@ -5357,7 +5287,7 @@ packages: path-exists: 4.0.0 dev: true - /find-up/5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} dependencies: @@ -5365,7 +5295,7 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache/3.2.0: + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: @@ -5374,20 +5304,20 @@ packages: rimraf: 3.0.2 dev: true - /flat/5.0.2: + /flat@5.0.2: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true dev: true - /flatted/3.2.9: + /flatted@3.2.9: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /fn.name/1.1.0: + /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} dev: true - /follow-redirects/1.15.5: + /follow-redirects@1.15.5(debug@4.3.4): resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: @@ -5395,32 +5325,34 @@ packages: peerDependenciesMeta: debug: optional: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) dev: true - /for-each/0.3.3: + /for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 dev: true - /foreach/2.0.6: + /foreach@2.0.6: resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} dev: true - /forever-agent/0.6.1: + /forever-agent@0.6.1: resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} dev: true - /form-data-encoder/1.7.1: + /form-data-encoder@1.7.1: resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} dev: true - /form-data-encoder/2.1.4: + /form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} dev: true - /form-data/2.3.3: + /form-data@2.3.3: resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} engines: {node: '>= 0.12'} dependencies: @@ -5429,7 +5361,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/2.5.1: + /form-data@2.5.1: resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} engines: {node: '>= 0.12'} dependencies: @@ -5438,7 +5370,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/3.0.1: + /form-data@3.0.1: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} dependencies: @@ -5447,7 +5379,7 @@ packages: mime-types: 2.1.35 dev: true - /form-data/4.0.0: + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} dependencies: @@ -5456,21 +5388,21 @@ packages: mime-types: 2.1.35 dev: true - /forwarded/0.2.0: + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} dev: true - /fp-ts/1.19.3: + /fp-ts@1.19.3: resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} dev: true - /fresh/0.5.2: + /fresh@0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: true - /fs-extra/0.30.0: + /fs-extra@0.30.0: resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} dependencies: graceful-fs: 4.2.11 @@ -5480,7 +5412,7 @@ packages: rimraf: 2.7.1 dev: true - /fs-extra/4.0.3: + /fs-extra@4.0.3: resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} dependencies: graceful-fs: 4.2.11 @@ -5488,7 +5420,7 @@ packages: universalify: 0.1.2 dev: true - /fs-extra/7.0.1: + /fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -5497,7 +5429,7 @@ packages: universalify: 0.1.2 dev: true - /fs-extra/8.1.0: + /fs-extra@8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} dependencies: @@ -5506,7 +5438,7 @@ packages: universalify: 0.1.2 dev: true - /fs-extra/9.1.0: + /fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} dependencies: @@ -5516,21 +5448,21 @@ packages: universalify: 2.0.1 dev: true - /fs-minipass/1.2.7: + /fs-minipass@1.2.7: resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} dependencies: minipass: 2.9.0 dev: true - /fs-readdir-recursive/1.1.0: + /fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} dev: true - /fs.realpath/1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} dev: true - /fsevents/2.3.3: + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] @@ -5538,11 +5470,11 @@ packages: dev: true optional: true - /function-bind/1.1.2: + /function-bind@1.1.2: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name/1.1.6: + /function.prototype.name@1.1.6: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: @@ -5552,15 +5484,17 @@ packages: functions-have-names: 1.2.3 dev: true - /functional-red-black-tree/1.0.1: + /functional-red-black-tree@1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + requiresBuild: true dev: true + optional: true - /functions-have-names/1.2.3: + /functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true - /ganache/7.9.1: + /ganache@7.9.1: resolution: {integrity: sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==} hasBin: true dependencies: @@ -5586,33 +5520,33 @@ packages: - leveldown - secp256k1 - /get-caller-file/1.0.3: + /get-caller-file@1.0.3: resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} dev: true - /get-caller-file/2.0.5: + /get-caller-file@2.0.5: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} dev: true - /get-func-name/2.0.2: + /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-installed-path/2.1.1: + /get-installed-path@2.1.1: resolution: {integrity: sha512-Qkn9eq6tW5/q9BDVdMpB8tOHljX9OSP0jRC5TRNVA4qRc839t4g8KQaR8t0Uv0EFVL0MlyG7m/ofjEgAROtYsA==} dependencies: global-modules: 1.0.0 dev: true - /get-installed-path/4.0.8: + /get-installed-path@4.0.8: resolution: {integrity: sha512-PmANK1xElIHlHH2tXfOoTnSDUjX1X3GvKK6ZyLbUnSCCn1pADwu67eVWttuPzJWrXDDT2MfO6uAaKILOFfitmA==} engines: {node: '>=6', npm: '>=5', yarn: '>=1'} dependencies: global-modules: 1.0.0 dev: true - /get-intrinsic/1.2.4: + /get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} dependencies: @@ -5623,24 +5557,24 @@ packages: hasown: 2.0.1 dev: true - /get-port/3.2.0: + /get-port@3.2.0: resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} engines: {node: '>=4'} dev: true - /get-stream/5.2.0: + /get-stream@5.2.0: resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} engines: {node: '>=8'} dependencies: pump: 3.0.0 dev: true - /get-stream/6.0.1: + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.2: + /get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: @@ -5649,34 +5583,35 @@ packages: get-intrinsic: 1.2.4 dev: true - /get-tsconfig/4.7.2: + /get-tsconfig@4.7.2: resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} dependencies: resolve-pkg-maps: 1.0.0 dev: true - /getpass/0.1.7: + /getpass@0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: assert-plus: 1.0.0 dev: true - /glob-parent/5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 dev: true - /glob-parent/6.0.2: + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 dev: true - /glob/7.2.0: + /glob@7.2.0: resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -5686,7 +5621,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 @@ -5697,7 +5632,7 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/8.1.0: + /glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} dependencies: @@ -5708,7 +5643,7 @@ packages: once: 1.4.0 dev: true - /global-modules/1.0.0: + /global-modules@1.0.0: resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} engines: {node: '>=0.10.0'} dependencies: @@ -5717,7 +5652,7 @@ packages: resolve-dir: 1.0.1 dev: true - /global-prefix/1.0.2: + /global-prefix@1.0.2: resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} engines: {node: '>=0.10.0'} dependencies: @@ -5728,34 +5663,34 @@ packages: which: 1.3.1 dev: true - /global/4.4.0: + /global@4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: min-document: 2.19.0 process: 0.11.10 dev: true - /globals/13.24.0: + /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 dev: true - /globalthis/1.0.3: + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 dev: true - /gopd/1.0.1: + /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: get-intrinsic: 1.2.4 dev: true - /got/11.8.6: + /got@11.8.6: resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} engines: {node: '>=10.19.0'} dependencies: @@ -5772,7 +5707,7 @@ packages: responselike: 2.0.1 dev: true - /got/12.1.0: + /got@12.1.0: resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} engines: {node: '>=14.16'} dependencies: @@ -5791,7 +5726,7 @@ packages: responselike: 2.0.1 dev: true - /got/12.6.1: + /got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} dependencies: @@ -5808,33 +5743,33 @@ packages: responselike: 3.0.0 dev: true - /graceful-fs/4.2.10: + /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} dev: true - /graceful-fs/4.2.11: + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - /grapheme-splitter/1.0.4: + /grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true - /graphemer/1.4.0: + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} dev: true - /graphql-query-compress/1.2.4: + /graphql-query-compress@1.2.4: resolution: {integrity: sha512-W5SMy8/2RAsC9uMOV9VTwnUkp+8N3BZz6qef6jRCIxOVrVxRBiX2btvpaKrEnPU4nchnc1bCfmMDkEtCRzJUiw==} dependencies: tokenizr: 1.5.7 dev: true - /graphql-request/5.2.0_graphql@14.7.0: + /graphql-request@5.2.0(graphql@14.7.0): resolution: {integrity: sha512-pLhKIvnMyBERL0dtFI3medKqWOz/RhHdcgbZ+hMMIb32mEPa5MJSzS4AuXxfI4sRAu6JVVk5tvXuGfCWl9JYWQ==} peerDependencies: graphql: 14 - 16 dependencies: - '@graphql-typed-document-node/core': 3.2.0_graphql@14.7.0 + '@graphql-typed-document-node/core': 3.2.0(graphql@14.7.0) cross-fetch: 3.1.8 extract-files: 9.0.0 form-data: 3.0.1 @@ -5843,9 +5778,10 @@ packages: - encoding dev: true - /graphql-tag/2.12.6_graphql@15.8.0: + /graphql-tag@2.12.6(graphql@15.8.0): resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} + requiresBuild: true peerDependencies: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: @@ -5854,25 +5790,26 @@ packages: dev: true optional: true - /graphql/14.7.0: + /graphql@14.7.0: resolution: {integrity: sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==} engines: {node: '>= 6.x'} dependencies: iterall: 1.3.0 dev: true - /graphql/15.8.0: + /graphql@15.8.0: resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} engines: {node: '>= 10.x'} + requiresBuild: true dev: true optional: true - /har-schema/2.0.0: + /har-schema@2.0.0: resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} engines: {node: '>=4'} dev: true - /har-validator/5.1.5: + /har-validator@5.1.5: resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} engines: {node: '>=6'} deprecated: this library is no longer supported @@ -5881,8 +5818,8 @@ packages: har-schema: 2.0.0 dev: true - /hardhat/2.19.5: - resolution: {integrity: sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw==} + /hardhat@2.22.13: + resolution: {integrity: sha512-psVJX4FSXDpSXwsU8OcKTJN04pQEj9cFBMX5OPko+OFwbIoiOpvRmafa954/UaA1934npTj8sV3gaTSdx9bPbA==} hasBin: true peerDependencies: ts-node: '*' @@ -5895,16 +5832,10 @@ packages: dependencies: '@ethersproject/abi': 5.7.0 '@metamask/eth-sig-util': 4.0.1 - '@nomicfoundation/ethereumjs-block': 5.0.2 - '@nomicfoundation/ethereumjs-blockchain': 7.0.2 - '@nomicfoundation/ethereumjs-common': 4.0.2 - '@nomicfoundation/ethereumjs-evm': 2.0.2 - '@nomicfoundation/ethereumjs-rlp': 5.0.2 - '@nomicfoundation/ethereumjs-statemanager': 2.0.2 - '@nomicfoundation/ethereumjs-trie': 6.0.2 - '@nomicfoundation/ethereumjs-tx': 5.0.2 - '@nomicfoundation/ethereumjs-util': 9.0.2 - '@nomicfoundation/ethereumjs-vm': 7.0.2 + '@nomicfoundation/edr': 0.6.4 + '@nomicfoundation/ethereumjs-common': 4.0.4 + '@nomicfoundation/ethereumjs-tx': 5.0.4 + '@nomicfoundation/ethereumjs-util': 9.0.4 '@nomicfoundation/solidity-analyzer': 0.1.1 '@sentry/node': 5.30.0 '@types/bn.js': 5.1.5 @@ -5914,9 +5845,9 @@ packages: ansi-escapes: 4.3.2 boxen: 5.1.2 chalk: 2.4.2 - chokidar: 3.6.0 + chokidar: 4.0.1 ci-info: 2.0.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) enquirer: 2.4.1 env-paths: 2.2.1 ethereum-cryptography: 1.2.0 @@ -5927,6 +5858,7 @@ packages: glob: 7.2.0 immutable: 4.3.5 io-ts: 1.10.4 + json-stream-stringify: 3.1.6 keccak: 3.0.4 lodash: 4.17.21 mnemonist: 0.38.5 @@ -5935,7 +5867,7 @@ packages: raw-body: 2.5.2 resolve: 1.17.0 semver: 6.3.1 - solc: 0.7.3_debug@4.3.4 + solc: 0.8.26(debug@4.3.4) source-map-support: 0.5.21 stacktrace-parser: 0.1.10 tsort: 0.0.1 @@ -5944,48 +5876,49 @@ packages: ws: 7.5.9 transitivePeerDependencies: - bufferutil + - c-kzg - supports-color - utf-8-validate dev: true - /has-bigints/1.0.2: + /has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true - /has-flag/3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} dev: true - /has-flag/4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true - /has-property-descriptors/1.0.2: + /has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 dev: true - /has-proto/1.0.1: + /has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} dev: true - /has-symbols/1.0.3: + /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} dev: true - /has-tostringtag/1.0.2: + /has-tostringtag@1.0.2: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /hash-base/3.1.0: + /hash-base@3.1.0: resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} engines: {node: '>=4'} dependencies: @@ -5994,48 +5927,48 @@ packages: safe-buffer: 5.2.1 dev: true - /hash.js/1.1.3: + /hash.js@1.1.3: resolution: {integrity: sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hash.js/1.1.7: + /hash.js@1.1.7: resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} dependencies: inherits: 2.0.4 minimalistic-assert: 1.0.1 dev: true - /hasown/2.0.1: + /hasown@2.0.1: resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 dev: true - /he/1.2.0: + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true - /header-case/1.0.1: + /header-case@1.0.1: resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 dev: true - /highlight.js/10.7.3: + /highlight.js@10.7.3: resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} dev: true - /highlightjs-solidity/2.0.6: + /highlightjs-solidity@2.0.6: resolution: {integrity: sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==} dev: true - /hmac-drbg/1.0.1: + /hmac-drbg@1.0.1: resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} dependencies: hash.js: 1.1.7 @@ -6043,18 +5976,18 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true - /homedir-polyfill/1.0.3: + /homedir-polyfill@1.0.3: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} dependencies: parse-passwd: 1.0.0 dev: true - /hosted-git-info/2.8.9: + /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /htmlparser2/8.0.2: + /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: domelementtype: 2.3.0 @@ -6063,7 +5996,7 @@ packages: entities: 4.5.0 dev: true - /http-basic/8.1.3: + /http-basic@8.1.3: resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} engines: {node: '>=6.0.0'} dependencies: @@ -6073,11 +6006,11 @@ packages: parse-cache-control: 1.0.1 dev: true - /http-cache-semantics/4.1.1: + /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} dev: true - /http-errors/1.8.1: + /http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} dependencies: @@ -6088,7 +6021,7 @@ packages: toidentifier: 1.0.1 dev: true - /http-errors/2.0.0: + /http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} dependencies: @@ -6099,17 +6032,17 @@ packages: toidentifier: 1.0.1 dev: true - /http-https/1.0.0: + /http-https@1.0.0: resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} dev: true - /http-response-object/3.0.2: + /http-response-object@3.0.2: resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} dependencies: '@types/node': 10.17.60 dev: true - /http-signature/1.2.0: + /http-signature@1.2.0: resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} engines: {node: '>=0.8', npm: '>=1.3.7'} dependencies: @@ -6118,7 +6051,7 @@ packages: sshpk: 1.18.0 dev: true - /http2-wrapper/1.0.3: + /http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} dependencies: @@ -6126,7 +6059,7 @@ packages: resolve-alpn: 1.2.1 dev: true - /http2-wrapper/2.2.1: + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} dependencies: @@ -6134,49 +6067,50 @@ packages: resolve-alpn: 1.2.1 dev: true - /https-proxy-agent/5.0.1: + /https-proxy-agent@5.0.1: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true - /iconv-lite/0.4.24: + /iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 dev: true - /idna-uts46-hx/2.3.1: + /idna-uts46-hx@2.3.1: resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} engines: {node: '>=4.0.0'} dependencies: punycode: 2.1.0 dev: true - /ieee754/1.2.1: + /ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true - /ignore/5.3.1: + /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true - /immediate/3.3.0: + /immediate@3.3.0: resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + requiresBuild: true dev: true optional: true - /immutable/4.3.5: + /immutable@4.3.5: resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} dev: true - /import-fresh/3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} dependencies: @@ -6184,32 +6118,32 @@ packages: resolve-from: 4.0.0 dev: true - /imurmurhash/0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} dev: true - /indent-string/4.0.0: + /indent-string@4.0.0: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} dev: true - /inflight/1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: once: 1.4.0 wrappy: 1.0.2 dev: true - /inherits/2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} dev: true - /ini/1.3.8: + /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot/1.0.7: + /internal-slot@1.0.7: resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: @@ -6218,23 +6152,23 @@ packages: side-channel: 1.0.5 dev: true - /invert-kv/1.0.0: + /invert-kv@1.0.0: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} dev: true - /io-ts/1.10.4: + /io-ts@1.10.4: resolution: {integrity: sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==} dependencies: fp-ts: 1.19.3 dev: true - /ipaddr.js/1.9.1: + /ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} dev: true - /is-arguments/1.1.1: + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: @@ -6242,7 +6176,7 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-array-buffer/3.0.4: + /is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: @@ -6250,28 +6184,28 @@ packages: get-intrinsic: 1.2.4 dev: true - /is-arrayish/0.2.1: + /is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-arrayish/0.3.2: + /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: true - /is-bigint/1.0.4: + /is-bigint@1.0.4: resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 dev: true - /is-binary-path/2.1.0: + /is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} dependencies: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: + /is-boolean-object@1.1.2: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: @@ -6279,120 +6213,120 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-buffer/2.0.5: + /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} dev: true - /is-builtin-module/3.2.1: + /is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 dev: true - /is-callable/1.2.7: + /is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.13.1: + /is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: hasown: 2.0.1 dev: true - /is-date-object/1.0.5: + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-extglob/2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} dev: true - /is-fullwidth-code-point/1.0.0: + /is-fullwidth-code-point@1.0.0: resolution: {integrity: sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==} engines: {node: '>=0.10.0'} dependencies: number-is-nan: 1.0.1 dev: true - /is-fullwidth-code-point/2.0.0: + /is-fullwidth-code-point@2.0.0: resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} engines: {node: '>=4'} dev: true - /is-fullwidth-code-point/3.0.0: + /is-fullwidth-code-point@3.0.0: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} dev: true - /is-function/1.0.2: + /is-function@1.0.2: resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} dev: true - /is-generator-function/1.0.10: + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-glob/4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 dev: true - /is-hex-prefixed/1.0.0: + /is-hex-prefixed@1.0.0: resolution: {integrity: sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==} engines: {node: '>=6.5.0', npm: '>=3'} dev: true - /is-lower-case/1.1.3: + /is-lower-case@1.1.3: resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} dependencies: lower-case: 1.1.4 dev: true - /is-negative-zero/2.0.2: + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} dev: true - /is-number-object/1.0.7: + /is-number-object@1.0.7: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-number/7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} dev: true - /is-obj/2.0.0: + /is-obj@2.0.0: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - /is-path-inside/3.0.3: + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} dev: true - /is-plain-obj/2.1.0: + /is-plain-obj@2.1.0: resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} engines: {node: '>=8'} dev: true - /is-regex/1.1.4: + /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: @@ -6400,91 +6334,92 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-retry-allowed/2.2.0: + /is-retry-allowed@2.2.0: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} dev: true - /is-shared-array-buffer/1.0.2: + /is-shared-array-buffer@1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: call-bind: 1.0.7 dev: true - /is-stream/2.0.1: + /is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} dev: true - /is-string/1.0.7: + /is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: has-tostringtag: 1.0.2 dev: true - /is-symbol/1.0.4: + /is-symbol@1.0.4: resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 dev: true - /is-typed-array/1.1.13: + /is-typed-array@1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: which-typed-array: 1.1.14 dev: true - /is-typedarray/1.0.0: + /is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true - /is-unicode-supported/0.1.0: + /is-unicode-supported@0.1.0: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} dev: true - /is-upper-case/1.1.2: + /is-upper-case@1.1.2: resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} dependencies: upper-case: 1.1.3 dev: true - /is-utf8/0.2.1: + /is-utf8@0.2.1: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /is-weakref/1.0.2: + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: call-bind: 1.0.7 dev: true - /is-windows/1.0.2: + /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} dev: true - /isarray/0.0.1: + /isarray@0.0.1: resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + requiresBuild: true dev: true optional: true - /isarray/1.0.0: + /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} dev: true - /isarray/2.0.5: + /isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} dev: true - /isexe/2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} dev: true - /isomorphic-ws/4.0.1_ws@7.5.9: + /isomorphic-ws@4.0.1(ws@7.5.9): resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} peerDependencies: ws: '*' @@ -6492,90 +6427,86 @@ packages: ws: 7.5.9 dev: true - /isstream/0.1.2: + /isstream@0.1.2: resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} dev: true - /iter-tools/7.5.3: + /iter-tools@7.5.3: resolution: {integrity: sha512-iEcHpgM9cn6tsI5MewqxyEega9KPbIDytQTEnu6c0MtlQQhQFofssYuRqxCarZgUdzliepRZPwwwflE4wAIjaA==} dependencies: '@babel/runtime': 7.23.9 dev: true - /iterall/1.3.0: + /iterall@1.3.0: resolution: {integrity: sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==} dev: true - /js-sdsl/4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - dev: true - - /js-sha3/0.5.5: + /js-sha3@0.5.5: resolution: {integrity: sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==} dev: true - /js-sha3/0.5.7: + /js-sha3@0.5.7: resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} dev: true - /js-sha3/0.8.0: + /js-sha3@0.8.0: resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} dev: true - /js-tokens/4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true - /js-yaml/4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true dependencies: argparse: 2.0.1 dev: true - /jsbn/0.1.1: + /jsbn@0.1.1: resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} dev: true - /json-buffer/3.0.1: + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} dev: true - /json-parse-even-better-errors/2.3.1: + /json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} dev: true - /json-pointer/0.6.2: + /json-pointer@0.6.2: resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} dependencies: foreach: 2.0.6 dev: true - /json-rpc-2.0/0.2.19: + /json-rpc-2.0@0.2.19: resolution: {integrity: sha512-tegZKneDQjWintJS5Zlw8xNvJK0/xq4sct2M5AgfFmcCJFMjvrLgk1noH7OPfFgEQ+ScueuWdaGfikCPr+qBtg==} dev: true - /json-schema-traverse/0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} dev: true - /json-schema-traverse/1.0.0: + /json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true - /json-schema-typed/7.0.3: + /json-schema-typed@7.0.3: resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} dev: true - /json-schema/0.4.0: + /json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} dev: true - /json-stable-stringify-without-jsonify/1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json-stable-stringify/1.1.1: + /json-stable-stringify@1.1.1: resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} engines: {node: '>= 0.4'} dependencies: @@ -6585,11 +6516,16 @@ packages: object-keys: 1.1.1 dev: true - /json-stringify-safe/5.0.1: + /json-stream-stringify@3.1.6: + resolution: {integrity: sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==} + engines: {node: '>=7.10.1'} + dev: true + + /json-stringify-safe@5.0.1: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true - /json-to-ast/2.1.0: + /json-to-ast@2.1.0: resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} engines: {node: '>= 4'} dependencies: @@ -6597,32 +6533,32 @@ packages: grapheme-splitter: 1.0.4 dev: true - /json5/1.0.2: + /json5@1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /json5/2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true - /jsonfile/2.4.0: + /jsonfile@2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: graceful-fs: 4.2.11 dev: true - /jsonfile/4.0.0: + /jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: graceful-fs: 4.2.11 dev: true - /jsonfile/6.1.0: + /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 @@ -6630,16 +6566,17 @@ packages: graceful-fs: 4.2.11 dev: true - /jsonify/0.0.1: + /jsonify@0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + requiresBuild: true dev: true - /jsonpointer/5.0.1: + /jsonpointer@5.0.1: resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} engines: {node: '>=0.10.0'} dev: true - /jsprim/1.4.2: + /jsprim@1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} dependencies: @@ -6649,7 +6586,7 @@ packages: verror: 1.10.0 dev: true - /keccak/3.0.1: + /keccak@3.0.1: resolution: {integrity: sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==} engines: {node: '>=10.0.0'} requiresBuild: true @@ -6658,7 +6595,7 @@ packages: node-gyp-build: 4.8.0 dev: true - /keccak/3.0.2: + /keccak@3.0.2: resolution: {integrity: sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==} engines: {node: '>=10.0.0'} requiresBuild: true @@ -6668,7 +6605,7 @@ packages: readable-stream: 3.6.2 dev: true - /keccak/3.0.4: + /keccak@3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} requiresBuild: true @@ -6678,68 +6615,73 @@ packages: readable-stream: 3.6.2 dev: true - /keyv/4.5.4: + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: true - /klaw/1.3.1: + /klaw@1.3.1: resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} optionalDependencies: graceful-fs: 4.2.11 dev: true - /kuler/2.0.0: + /kuler@2.0.0: resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} dev: true - /latest-version/7.0.0: + /latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} dependencies: package-json: 8.1.1 dev: true - /lcid/1.0.0: + /lcid@1.0.0: resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==} engines: {node: '>=0.10.0'} dependencies: invert-kv: 1.0.0 dev: true - /level-codec/9.0.2: + /level-codec@9.0.2: resolution: {integrity: sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==} engines: {node: '>=6'} + requiresBuild: true dependencies: buffer: 5.7.1 dev: true optional: true - /level-concat-iterator/2.0.1: + /level-concat-iterator@2.0.1: resolution: {integrity: sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==} engines: {node: '>=6'} + requiresBuild: true dev: true optional: true - /level-concat-iterator/3.1.0: + /level-concat-iterator@3.1.0: resolution: {integrity: sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==} engines: {node: '>=10'} + requiresBuild: true dependencies: catering: 2.1.1 dev: true - /level-errors/2.0.1: + /level-errors@2.0.1: resolution: {integrity: sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==} engines: {node: '>=6'} + requiresBuild: true dependencies: errno: 0.1.8 dev: true optional: true - /level-iterator-stream/4.0.2: + /level-iterator-stream@4.0.2: resolution: {integrity: sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==} engines: {node: '>=6'} + requiresBuild: true dependencies: inherits: 2.0.4 readable-stream: 3.6.2 @@ -6747,8 +6689,9 @@ packages: dev: true optional: true - /level-js/5.0.2: + /level-js@5.0.2: resolution: {integrity: sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==} + requiresBuild: true dependencies: abstract-leveldown: 6.2.3 buffer: 5.7.1 @@ -6757,34 +6700,37 @@ packages: dev: true optional: true - /level-packager/5.1.1: + /level-packager@5.1.1: resolution: {integrity: sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==} engines: {node: '>=6'} + requiresBuild: true dependencies: encoding-down: 6.3.0 levelup: 4.4.0 dev: true optional: true - /level-supports/1.0.1: + /level-supports@1.0.1: resolution: {integrity: sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==} engines: {node: '>=6'} + requiresBuild: true dependencies: xtend: 4.0.2 dev: true optional: true - /level-supports/2.1.0: + /level-supports@2.1.0: resolution: {integrity: sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==} engines: {node: '>=10'} + requiresBuild: true dev: true - /level-supports/4.0.1: + /level-supports@4.0.1: resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} engines: {node: '>=12'} dev: true - /level-transcoder/1.0.1: + /level-transcoder@1.0.1: resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} engines: {node: '>=12'} dependencies: @@ -6792,16 +6738,18 @@ packages: module-error: 1.0.2 dev: true - /level-write-stream/1.0.0: + /level-write-stream@1.0.0: resolution: {integrity: sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==} + requiresBuild: true dependencies: end-stream: 0.1.0 dev: true optional: true - /level/6.0.1: + /level@6.0.1: resolution: {integrity: sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==} engines: {node: '>=8.6.0'} + requiresBuild: true dependencies: level-js: 5.0.2 level-packager: 5.1.1 @@ -6809,16 +6757,7 @@ packages: dev: true optional: true - /level/8.0.1: - resolution: {integrity: sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ==} - engines: {node: '>=12'} - dependencies: - abstract-level: 1.0.4 - browser-level: 1.0.1 - classic-level: 1.4.1 - dev: true - - /leveldown/5.6.0: + /leveldown@5.6.0: resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} engines: {node: '>=8.6.0'} requiresBuild: true @@ -6829,7 +6768,7 @@ packages: dev: true optional: true - /leveldown/6.1.0: + /leveldown@6.1.0: resolution: {integrity: sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==} engines: {node: '>=10.12.0'} requiresBuild: true @@ -6839,9 +6778,10 @@ packages: node-gyp-build: 4.8.0 dev: true - /levelup/4.4.0: + /levelup@4.4.0: resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} engines: {node: '>=6'} + requiresBuild: true dependencies: deferred-leveldown: 5.3.0 level-errors: 2.0.1 @@ -6851,12 +6791,12 @@ packages: dev: true optional: true - /leven/3.1.0: + /leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} dev: true - /levn/0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -6864,11 +6804,11 @@ packages: type-check: 0.4.0 dev: true - /lines-and-columns/1.2.4: + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true - /load-json-file/1.1.0: + /load-json-file@1.1.0: resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} engines: {node: '>=0.10.0'} dependencies: @@ -6879,7 +6819,7 @@ packages: strip-bom: 2.0.0 dev: true - /locate-path/2.0.0: + /locate-path@2.0.0: resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} engines: {node: '>=4'} dependencies: @@ -6887,7 +6827,7 @@ packages: path-exists: 3.0.0 dev: true - /locate-path/3.0.0: + /locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} dependencies: @@ -6895,57 +6835,58 @@ packages: path-exists: 3.0.0 dev: true - /locate-path/5.0.0: + /locate-path@5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} dependencies: p-locate: 4.1.0 dev: true - /locate-path/6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} dependencies: p-locate: 5.0.0 dev: true - /lodash-es/4.17.21: + /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true - /lodash.assign/4.2.0: + /lodash.assign@4.2.0: resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==} dev: true - /lodash.clonedeep/4.5.0: + /lodash.clonedeep@4.5.0: resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} dev: true - /lodash.flatten/4.4.0: + /lodash.flatten@4.4.0: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: true - /lodash.isequal/4.5.0: + /lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true - /lodash.merge/4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lodash.sortby/4.7.0: + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + requiresBuild: true dev: true optional: true - /lodash.truncate/4.4.2: + /lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} dev: true - /lodash/4.17.21: + /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /log-symbols/4.1.0: + /log-symbols@4.1.0: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} dependencies: @@ -6953,7 +6894,7 @@ packages: is-unicode-supported: 0.1.0 dev: true - /logform/2.6.0: + /logform@2.6.0: resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} engines: {node: '>= 12.0.0'} dependencies: @@ -6965,94 +6906,87 @@ packages: triple-beam: 1.4.1 dev: true - /loglevel/1.9.1: + /loglevel@1.9.1: resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} engines: {node: '>= 0.6.0'} + requiresBuild: true dev: true optional: true - /long/4.0.0: + /long@4.0.0: resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + requiresBuild: true dev: true optional: true - /loose-envify/1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true dependencies: js-tokens: 4.0.0 dev: true - /loupe/2.3.7: + /loupe@2.3.7: resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} dependencies: get-func-name: 2.0.2 dev: true - /loupe/3.1.0: + /loupe@3.1.0: resolution: {integrity: sha512-qKl+FrLXUhFuHUoDJG7f8P8gEMHq9NFS0c6ghXG1J0rldmZFQZoNVv/vyirE9qwCIhWZDsvEFd1sbFu3GvRQFg==} dependencies: get-func-name: 2.0.2 dev: true - /lower-case-first/1.0.2: + /lower-case-first@1.0.2: resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} dependencies: lower-case: 1.1.4 dev: true - /lower-case/1.1.4: + /lower-case@1.1.4: resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} dev: true - /lowercase-keys/2.0.0: + /lowercase-keys@2.0.0: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} dev: true - /lowercase-keys/3.0.0: + /lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /lru-cache/5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - dependencies: - yallist: 3.1.1 - dev: true - - /lru-cache/6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 dev: true - /lru-cache/7.13.1: + /lru-cache@7.13.1: resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} engines: {node: '>=12'} + requiresBuild: true dev: true optional: true - /lru_map/0.3.3: + /lru_map@0.3.3: resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} dev: true - /ltgt/2.2.1: + /ltgt@2.2.1: resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} + requiresBuild: true dev: true optional: true - /markdown-table/1.1.3: + /markdown-table@1.1.3: resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} dev: true - /mcl-wasm/0.7.9: - resolution: {integrity: sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==} - engines: {node: '>=8.9.0'} - dev: true - - /md5.js/1.3.5: + /md5.js@1.3.5: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: hash-base: 3.1.0 @@ -7060,13 +6994,14 @@ packages: safe-buffer: 5.2.1 dev: true - /media-typer/0.3.0: + /media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} dev: true - /memdown/1.4.1: + /memdown@1.4.1: resolution: {integrity: sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==} + requiresBuild: true dependencies: abstract-leveldown: 2.7.2 functional-red-black-tree: 1.0.1 @@ -7077,128 +7012,119 @@ packages: dev: true optional: true - /memory-level/1.0.0: - resolution: {integrity: sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==} - engines: {node: '>=12'} - dependencies: - abstract-level: 1.0.4 - functional-red-black-tree: 1.0.1 - module-error: 1.0.2 - dev: true - - /memorystream/0.3.1: + /memorystream@0.3.1: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} dev: true - /merge-descriptors/1.0.1: + /merge-descriptors@1.0.1: resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} dev: true - /methods/1.1.2: + /methods@1.1.2: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} dev: true - /micro-ftch/0.3.1: + /micro-ftch@0.3.1: resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} dev: true - /mime-db/1.52.0: + /mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} dev: true - /mime-types/2.1.35: + /mime-types@2.1.35: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 dev: true - /mime/1.6.0: + /mime@1.6.0: resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} engines: {node: '>=4'} hasBin: true dev: true - /mimic-fn/2.1.0: + /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - /mimic-fn/3.1.0: + /mimic-fn@3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} engines: {node: '>=8'} dev: true - /mimic-response/1.0.1: + /mimic-response@1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} engines: {node: '>=4'} dev: true - /mimic-response/3.1.0: + /mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} dev: true - /mimic-response/4.0.0: + /mimic-response@4.0.0: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true - /min-document/2.19.0: + /min-document@2.19.0: resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} dependencies: dom-walk: 0.1.2 dev: true - /minimalistic-assert/1.0.1: + /minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} dev: true - /minimalistic-crypto-utils/1.0.1: + /minimalistic-crypto-utils@1.0.1: resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} dev: true - /minimatch/3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 dev: true - /minimatch/5.0.1: + /minimatch@5.0.1: resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimatch/5.1.6: + /minimatch@5.1.6: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 dev: true - /minimist/1.2.8: + /minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} dev: true - /minipass/2.9.0: + /minipass@2.9.0: resolution: {integrity: sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==} dependencies: safe-buffer: 5.2.1 yallist: 3.1.1 dev: true - /minizlib/1.3.3: + /minizlib@1.3.3: resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} dependencies: minipass: 2.9.0 dev: true - /mkdirp-promise/5.0.1: + /mkdirp-promise@5.0.1: resolution: {integrity: sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w==} engines: {node: '>=4'} deprecated: This package is broken and no longer maintained. 'mkdirp' itself supports promises now, please switch to that. @@ -7206,32 +7132,32 @@ packages: mkdirp: 3.0.1 dev: true - /mkdirp/0.5.6: + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: minimist: 1.2.8 dev: true - /mkdirp/1.0.4: + /mkdirp@1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} hasBin: true dev: true - /mkdirp/3.0.1: + /mkdirp@3.0.1: resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} engines: {node: '>=10'} hasBin: true dev: true - /mnemonist/0.38.5: + /mnemonist@0.38.5: resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} dependencies: obliterator: 2.0.4 dev: true - /mocha/10.1.0: + /mocha@10.1.0: resolution: {integrity: sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==} engines: {node: '>= 14.0.0'} hasBin: true @@ -7239,7 +7165,7 @@ packages: ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.5.3 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -7259,7 +7185,7 @@ packages: yargs-unparser: 2.0.0 dev: true - /mocha/10.3.0: + /mocha@10.3.0: resolution: {integrity: sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==} engines: {node: '>= 14.0.0'} hasBin: true @@ -7267,7 +7193,7 @@ packages: ansi-colors: 4.1.1 browser-stdout: 1.3.1 chokidar: 3.5.3 - debug: 4.3.4_supports-color@8.1.1 + debug: 4.3.4(supports-color@8.1.1) diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 @@ -7286,28 +7212,28 @@ packages: yargs-unparser: 2.0.0 dev: true - /mock-fs/4.14.0: + /mock-fs@4.14.0: resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} dev: true - /module-error/1.0.2: + /module-error@1.0.2: resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} engines: {node: '>=10'} dev: true - /ms/2.0.0: + /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: true - /ms/2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true - /ms/2.1.3: + /ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /multibase/0.6.1: + /multibase@0.6.1: resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} deprecated: This module has been superseded by the multiformats module dependencies: @@ -7315,7 +7241,7 @@ packages: buffer: 5.7.1 dev: true - /multibase/0.7.0: + /multibase@0.7.0: resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} deprecated: This module has been superseded by the multiformats module dependencies: @@ -7323,14 +7249,14 @@ packages: buffer: 5.7.1 dev: true - /multicodec/0.5.7: + /multicodec@0.5.7: resolution: {integrity: sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA==} deprecated: This module has been superseded by the multiformats module dependencies: varint: 5.0.2 dev: true - /multicodec/1.0.4: + /multicodec@1.0.4: resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} deprecated: This module has been superseded by the multiformats module dependencies: @@ -7338,7 +7264,7 @@ packages: varint: 5.0.2 dev: true - /multihashes/0.4.21: + /multihashes@0.4.21: resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} dependencies: buffer: 5.7.1 @@ -7346,68 +7272,66 @@ packages: varint: 5.0.2 dev: true - /nano-base32/1.0.1: + /nano-base32@1.0.1: resolution: {integrity: sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==} dev: true - /nano-json-stream-parser/0.1.2: + /nano-json-stream-parser@0.1.2: resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} dev: true - /nanoassert/2.0.0: + /nanoassert@2.0.0: resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} dev: true - /nanoid/3.3.3: + /nanoid@3.3.3: resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /napi-macros/2.0.0: + /napi-macros@2.0.0: resolution: {integrity: sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==} + requiresBuild: true dev: true - /napi-macros/2.2.2: - resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} - dev: true - - /natural-compare/1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true - /negotiator/0.6.3: + /negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} dev: true - /neodoc/2.0.2: + /neodoc@2.0.2: resolution: {integrity: sha512-NAppJ0YecKWdhSXFYCHbo6RutiX8vOt/Jo3l46mUg6pQlpJNaqc5cGxdrW2jITQm5JIYySbFVPDl3RrREXNyPw==} dependencies: ansi-regex: 2.1.1 dev: true - /next-tick/1.1.0: + /next-tick@1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true - /no-case/2.3.2: + /no-case@2.3.2: resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} dependencies: lower-case: 1.1.4 dev: true - /node-abort-controller/3.1.1: + /node-abort-controller@3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} dev: true - /node-addon-api/2.0.2: + /node-addon-api@2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} dev: true - /node-fetch/2.6.7: + /node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} + requiresBuild: true peerDependencies: encoding: ^0.1.0 peerDependenciesMeta: @@ -7418,7 +7342,7 @@ packages: dev: true optional: true - /node-fetch/2.7.0: + /node-fetch@2.7.0: resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} engines: {node: 4.x || >=6.0.0} peerDependencies: @@ -7430,46 +7354,49 @@ packages: whatwg-url: 5.0.0 dev: true - /node-gyp-build/4.1.1: + /node-gyp-build@4.1.1: resolution: {integrity: sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==} hasBin: true + requiresBuild: true dev: true optional: true - /node-gyp-build/4.3.0: + /node-gyp-build@4.3.0: resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==} hasBin: true + requiresBuild: true dev: true optional: true - /node-gyp-build/4.4.0: + /node-gyp-build@4.4.0: resolution: {integrity: sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==} hasBin: true dev: true - /node-gyp-build/4.8.0: + /node-gyp-build@4.8.0: resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true dev: true - /node-interval-tree/1.3.3: + /node-interval-tree@1.3.3: resolution: {integrity: sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==} engines: {node: '>= 7.6.0'} dependencies: shallowequal: 1.1.0 dev: true - /nofilter/1.0.4: + /nofilter@1.0.4: resolution: {integrity: sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==} engines: {node: '>=8'} + requiresBuild: true dev: true - /nofilter/3.1.0: + /nofilter@3.1.0: resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} engines: {node: '>=12.19'} dev: true - /normalize-package-data/2.5.0: + /normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 @@ -7478,33 +7405,33 @@ packages: validate-npm-package-license: 3.0.4 dev: true - /normalize-path/3.0.0: + /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} dev: true - /normalize-url/6.1.0: + /normalize-url@6.1.0: resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} engines: {node: '>=10'} dev: true - /normalize-url/8.0.0: + /normalize-url@8.0.0: resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} engines: {node: '>=14.16'} dev: true - /nth-check/2.1.1: + /nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: boolbase: 1.0.0 dev: true - /number-is-nan/1.0.1: + /number-is-nan@1.0.1: resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} engines: {node: '>=0.10.0'} dev: true - /number-to-bn/1.7.0: + /number-to-bn@1.7.0: resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} engines: {node: '>=6.5.0', npm: '>=3'} dependencies: @@ -7512,25 +7439,25 @@ packages: strip-hex-prefix: 1.0.0 dev: true - /oauth-sign/0.9.0: + /oauth-sign@0.9.0: resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} dev: true - /object-assign/4.1.1: + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} dev: true - /object-inspect/1.13.1: + /object-inspect@1.13.1: resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} dev: true - /object-keys/1.1.1: + /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.5: + /object.assign@4.1.5: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: @@ -7540,7 +7467,7 @@ packages: object-keys: 1.1.1 dev: true - /object.fromentries/2.0.7: + /object.fromentries@2.0.7: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: @@ -7549,7 +7476,7 @@ packages: es-abstract: 1.22.4 dev: true - /object.groupby/1.0.2: + /object.groupby@1.0.2: resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} dependencies: array.prototype.filter: 1.0.3 @@ -7559,7 +7486,7 @@ packages: es-errors: 1.3.0 dev: true - /object.values/1.1.7: + /object.values@1.1.7: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: @@ -7568,50 +7495,50 @@ packages: es-abstract: 1.22.4 dev: true - /obliterator/2.0.4: + /obliterator@2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true - /oboe/2.1.5: + /oboe@2.1.5: resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} dependencies: http-https: 1.0.0 dev: true - /on-finished/2.3.0: + /on-finished@2.3.0: resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /on-finished/2.4.1: + /on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 dev: true - /once/1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 dev: true - /one-time/1.0.0: + /one-time@1.0.0: resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} dependencies: fn.name: 1.1.0 dev: true - /onetime/5.1.2: + /onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 dev: true - /optionator/0.9.3: + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} dependencies: @@ -7623,99 +7550,99 @@ packages: type-check: 0.4.0 dev: true - /original-require/1.0.1: + /original-require@1.0.1: resolution: {integrity: sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==} dev: true - /os-locale/1.4.0: + /os-locale@1.4.0: resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} engines: {node: '>=0.10.0'} dependencies: lcid: 1.0.0 dev: true - /os-tmpdir/1.0.2: + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} dev: true - /p-cancelable/2.1.1: + /p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} dev: true - /p-cancelable/3.0.0: + /p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} dev: true - /p-limit/1.3.0: + /p-limit@1.3.0: resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} engines: {node: '>=4'} dependencies: p-try: 1.0.0 dev: true - /p-limit/2.3.0: + /p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} dependencies: p-try: 2.2.0 dev: true - /p-limit/3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 dev: true - /p-locate/2.0.0: + /p-locate@2.0.0: resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} engines: {node: '>=4'} dependencies: p-limit: 1.3.0 dev: true - /p-locate/3.0.0: + /p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/4.1.0: + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} dependencies: p-limit: 2.3.0 dev: true - /p-locate/5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} dependencies: p-limit: 3.1.0 dev: true - /p-map/4.0.0: + /p-map@4.0.0: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 dev: true - /p-try/1.0.0: + /p-try@1.0.0: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} dev: true - /p-try/2.2.0: + /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /package-json/8.1.1: + /package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} dependencies: @@ -7725,35 +7652,35 @@ packages: semver: 7.6.0 dev: true - /param-case/2.1.1: + /param-case@2.1.1: resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} dependencies: no-case: 2.3.2 dev: true - /parent-module/1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} dependencies: callsites: 3.1.0 dev: true - /parse-cache-control/1.0.1: + /parse-cache-control@1.0.1: resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} dev: true - /parse-headers/2.0.5: + /parse-headers@2.0.5: resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} dev: true - /parse-json/2.2.0: + /parse-json@2.2.0: resolution: {integrity: sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==} engines: {node: '>=0.10.0'} dependencies: error-ex: 1.3.2 dev: true - /parse-json/5.2.0: + /parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: @@ -7763,78 +7690,78 @@ packages: lines-and-columns: 1.2.4 dev: true - /parse-passwd/1.0.0: + /parse-passwd@1.0.0: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} dev: true - /parse5-htmlparser2-tree-adapter/7.0.0: + /parse5-htmlparser2-tree-adapter@7.0.0: resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} dependencies: domhandler: 5.0.3 parse5: 7.1.2 dev: true - /parse5/7.1.2: + /parse5@7.1.2: resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.5.0 dev: true - /parseurl/1.3.3: + /parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} dev: true - /pascal-case/2.0.1: + /pascal-case@2.0.1: resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 dev: true - /path-case/2.1.1: + /path-case@2.1.1: resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} dependencies: no-case: 2.3.2 dev: true - /path-exists/2.1.0: + /path-exists@2.1.0: resolution: {integrity: sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==} engines: {node: '>=0.10.0'} dependencies: pinkie-promise: 2.0.1 dev: true - /path-exists/3.0.0: + /path-exists@3.0.0: resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} engines: {node: '>=4'} dev: true - /path-exists/4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} dev: true - /path-is-absolute/1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} dev: true - /path-key/3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} dev: true - /path-parse/1.0.7: + /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true - /path-to-regexp/0.1.7: + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: true - /path-type/1.1.0: + /path-type@1.1.0: resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} engines: {node: '>=0.10.0'} dependencies: @@ -7843,21 +7770,21 @@ packages: pinkie-promise: 2.0.1 dev: true - /path-type/4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} dev: true - /pathval/1.1.1: + /pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true - /pathval/2.0.0: + /pathval@2.0.0: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} dev: true - /pbkdf2/3.1.2: + /pbkdf2@3.1.2: resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} engines: {node: '>=0.12'} dependencies: @@ -7868,46 +7795,47 @@ packages: sha.js: 2.4.11 dev: true - /performance-now/2.1.0: + /performance-now@2.1.0: resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} dev: true - /picomatch/2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} dev: true - /pify/2.3.0: + /pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} dev: true - /pinkie-promise/2.0.1: + /pinkie-promise@2.0.1: resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} engines: {node: '>=0.10.0'} dependencies: pinkie: 2.0.4 dev: true - /pinkie/2.0.4: + /pinkie@2.0.4: resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} engines: {node: '>=0.10.0'} dev: true - /pkg-up/3.1.0: + /pkg-up@3.1.0: resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} engines: {node: '>=8'} dependencies: find-up: 3.0.0 dev: true - /pluralize/8.0.0: + /pluralize@8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} engines: {node: '>=4'} dev: true - /pouchdb-abstract-mapreduce/7.3.1: + /pouchdb-abstract-mapreduce@7.3.1: resolution: {integrity: sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==} + requiresBuild: true dependencies: pouchdb-binary-utils: 7.3.1 pouchdb-collate: 7.3.1 @@ -7922,8 +7850,9 @@ packages: dev: true optional: true - /pouchdb-adapter-leveldb-core/7.3.1: + /pouchdb-adapter-leveldb-core@7.3.1: resolution: {integrity: sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==} + requiresBuild: true dependencies: argsarray: 0.0.1 buffer-from: 1.1.2 @@ -7942,8 +7871,9 @@ packages: dev: true optional: true - /pouchdb-adapter-memory/7.3.1: + /pouchdb-adapter-memory@7.3.1: resolution: {integrity: sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==} + requiresBuild: true dependencies: memdown: 1.4.1 pouchdb-adapter-leveldb-core: 7.3.1 @@ -7951,8 +7881,9 @@ packages: dev: true optional: true - /pouchdb-adapter-utils/7.3.1: + /pouchdb-adapter-utils@7.3.1: resolution: {integrity: sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==} + requiresBuild: true dependencies: pouchdb-binary-utils: 7.3.1 pouchdb-collections: 7.3.1 @@ -7963,25 +7894,29 @@ packages: dev: true optional: true - /pouchdb-binary-utils/7.3.1: + /pouchdb-binary-utils@7.3.1: resolution: {integrity: sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==} + requiresBuild: true dependencies: buffer-from: 1.1.2 dev: true optional: true - /pouchdb-collate/7.3.1: + /pouchdb-collate@7.3.1: resolution: {integrity: sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==} + requiresBuild: true dev: true optional: true - /pouchdb-collections/7.3.1: + /pouchdb-collections@7.3.1: resolution: {integrity: sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==} + requiresBuild: true dev: true optional: true - /pouchdb-debug/7.2.1: + /pouchdb-debug@7.2.1: resolution: {integrity: sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==} + requiresBuild: true dependencies: debug: 3.1.0 transitivePeerDependencies: @@ -7989,15 +7924,17 @@ packages: dev: true optional: true - /pouchdb-errors/7.3.1: + /pouchdb-errors@7.3.1: resolution: {integrity: sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==} + requiresBuild: true dependencies: inherits: 2.0.4 dev: true optional: true - /pouchdb-fetch/7.3.1: + /pouchdb-fetch@7.3.1: resolution: {integrity: sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==} + requiresBuild: true dependencies: abort-controller: 3.0.0 fetch-cookie: 0.11.0 @@ -8007,8 +7944,9 @@ packages: dev: true optional: true - /pouchdb-find/7.3.1: + /pouchdb-find@7.3.1: resolution: {integrity: sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==} + requiresBuild: true dependencies: pouchdb-abstract-mapreduce: 7.3.1 pouchdb-collate: 7.3.1 @@ -8022,15 +7960,17 @@ packages: dev: true optional: true - /pouchdb-json/7.3.1: + /pouchdb-json@7.3.1: resolution: {integrity: sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==} + requiresBuild: true dependencies: vuvuzela: 1.0.3 dev: true optional: true - /pouchdb-mapreduce-utils/7.3.1: + /pouchdb-mapreduce-utils@7.3.1: resolution: {integrity: sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==} + requiresBuild: true dependencies: argsarray: 0.0.1 inherits: 2.0.4 @@ -8039,29 +7979,33 @@ packages: dev: true optional: true - /pouchdb-md5/7.3.1: + /pouchdb-md5@7.3.1: resolution: {integrity: sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==} + requiresBuild: true dependencies: pouchdb-binary-utils: 7.3.1 spark-md5: 3.0.2 dev: true optional: true - /pouchdb-merge/7.3.1: + /pouchdb-merge@7.3.1: resolution: {integrity: sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==} + requiresBuild: true dev: true optional: true - /pouchdb-selector-core/7.3.1: + /pouchdb-selector-core@7.3.1: resolution: {integrity: sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==} + requiresBuild: true dependencies: pouchdb-collate: 7.3.1 pouchdb-utils: 7.3.1 dev: true optional: true - /pouchdb-utils/7.3.1: + /pouchdb-utils@7.3.1: resolution: {integrity: sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==} + requiresBuild: true dependencies: argsarray: 0.0.1 clone-buffer: 1.0.0 @@ -8074,8 +8018,9 @@ packages: dev: true optional: true - /pouchdb/7.3.0: + /pouchdb@7.3.0: resolution: {integrity: sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==} + requiresBuild: true dependencies: abort-controller: 3.0.0 argsarray: 0.0.1 @@ -8102,12 +8047,12 @@ packages: dev: true optional: true - /prelude-ls/1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} dev: true - /prettier-plugin-solidity/1.3.1_prettier@2.8.8: + /prettier-plugin-solidity@1.3.1(prettier@2.8.8): resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} engines: {node: '>=16'} requiresBuild: true @@ -8121,7 +8066,7 @@ packages: dev: true optional: true - /prettier/2.8.8: + /prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} hasBin: true @@ -8129,28 +8074,28 @@ packages: dev: true optional: true - /prettier/3.2.4: + /prettier@3.2.4: resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true - /process-nextick-args/2.0.1: + /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: true - /process/0.11.10: + /process@0.11.10: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} dev: true - /promise/8.3.0: + /promise@8.3.0: resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} dependencies: asap: 2.0.6 dev: true - /proper-lockfile/4.1.2: + /proper-lockfile@4.1.2: resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} dependencies: graceful-fs: 4.2.11 @@ -8158,11 +8103,11 @@ packages: signal-exit: 3.0.7 dev: false - /proto-list/1.2.4: + /proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true - /proxy-addr/2.0.7: + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} dependencies: @@ -8170,65 +8115,66 @@ packages: ipaddr.js: 1.9.1 dev: true - /proxy-from-env/1.1.0: + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: true - /prr/1.0.1: + /prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + requiresBuild: true dev: true optional: true - /psl/1.9.0: + /psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} dev: true - /pump/3.0.0: + /pump@3.0.0: resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 dev: true - /punycode/2.1.0: + /punycode@2.1.0: resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} engines: {node: '>=6'} dev: true - /punycode/2.3.1: + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true - /pure-rand/5.0.5: + /pure-rand@5.0.5: resolution: {integrity: sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==} dev: true - /qs/6.11.0: + /qs@6.11.0: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.5 dev: true - /qs/6.11.2: + /qs@6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: side-channel: 1.0.5 dev: true - /qs/6.5.3: + /qs@6.5.3: resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} engines: {node: '>=0.6'} dev: true - /qs/6.9.7: + /qs@6.9.7: resolution: {integrity: sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==} engines: {node: '>=0.6'} dev: true - /query-string/5.1.1: + /query-string@5.1.1: resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} engines: {node: '>=0.10.0'} dependencies: @@ -8237,38 +8183,39 @@ packages: strict-uri-encode: 1.1.0 dev: true - /querystring/0.2.1: + /querystring@0.2.1: resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==} engines: {node: '>=0.4.x'} deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. dev: true - /querystringify/2.2.0: + /querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + requiresBuild: true dev: true optional: true - /queue-microtask/1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /quick-lru/5.1.1: + /quick-lru@5.1.1: resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} engines: {node: '>=10'} dev: true - /randombytes/2.1.0: + /randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 dev: true - /range-parser/1.2.1: + /range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} dev: true - /raw-body/2.4.3: + /raw-body@2.4.3: resolution: {integrity: sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==} engines: {node: '>= 0.8'} dependencies: @@ -8278,7 +8225,7 @@ packages: unpipe: 1.0.0 dev: true - /raw-body/2.5.1: + /raw-body@2.5.1: resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} engines: {node: '>= 0.8'} dependencies: @@ -8288,7 +8235,7 @@ packages: unpipe: 1.0.0 dev: true - /raw-body/2.5.2: + /raw-body@2.5.2: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} dependencies: @@ -8298,7 +8245,7 @@ packages: unpipe: 1.0.0 dev: true - /rc/1.2.8: + /rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true dependencies: @@ -8308,7 +8255,7 @@ packages: strip-json-comments: 2.0.1 dev: true - /read-pkg-up/1.0.1: + /read-pkg-up@1.0.1: resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} engines: {node: '>=0.10.0'} dependencies: @@ -8316,7 +8263,7 @@ packages: read-pkg: 1.1.0 dev: true - /read-pkg/1.1.0: + /read-pkg@1.1.0: resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} engines: {node: '>=0.10.0'} dependencies: @@ -8325,13 +8272,15 @@ packages: path-type: 1.1.0 dev: true - /readable-stream/0.0.4: + /readable-stream@0.0.4: resolution: {integrity: sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==} + requiresBuild: true dev: true optional: true - /readable-stream/1.1.14: + /readable-stream@1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + requiresBuild: true dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -8340,7 +8289,7 @@ packages: dev: true optional: true - /readable-stream/2.3.8: + /readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 @@ -8352,7 +8301,7 @@ packages: util-deprecate: 1.0.2 dev: true - /readable-stream/3.6.2: + /readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} dependencies: @@ -8361,20 +8310,25 @@ packages: util-deprecate: 1.0.2 dev: true - /readdirp/3.6.0: + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 dev: true - /redux-saga/1.0.0: + /readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + dev: true + + /redux-saga@1.0.0: resolution: {integrity: sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==} dependencies: '@redux-saga/core': 1.3.0 dev: true - /redux/3.7.2: + /redux@3.7.2: resolution: {integrity: sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==} dependencies: lodash: 4.17.21 @@ -8383,11 +8337,11 @@ packages: symbol-observable: 1.2.0 dev: true - /regenerator-runtime/0.14.1: + /regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true - /regexp.prototype.flags/1.5.2: + /regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: @@ -8397,35 +8351,35 @@ packages: set-function-name: 2.0.1 dev: true - /registry-auth-token/5.0.2: + /registry-auth-token@5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} dependencies: '@pnpm/npm-conf': 2.2.2 dev: true - /registry-url/6.0.1: + /registry-url@6.0.1: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} dependencies: rc: 1.2.8 dev: true - /req-cwd/2.0.0: + /req-cwd@2.0.0: resolution: {integrity: sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ==} engines: {node: '>=4'} dependencies: req-from: 2.0.0 dev: true - /req-from/2.0.0: + /req-from@2.0.0: resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} engines: {node: '>=4'} dependencies: resolve-from: 3.0.0 dev: true - /request/2.88.2: + /request@2.88.2: resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} engines: {node: '>= 6'} deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 @@ -8452,31 +8406,32 @@ packages: uuid: 3.4.0 dev: true - /require-directory/2.1.1: + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} dev: true - /require-from-string/1.2.1: + /require-from-string@1.2.1: resolution: {integrity: sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==} engines: {node: '>=0.10.0'} dev: true - /require-from-string/2.0.2: + /require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} dev: true - /require-main-filename/1.0.1: + /require-main-filename@1.0.1: resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==} dev: true - /requires-port/1.0.0: + /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + requiresBuild: true dev: true optional: true - /reselect-tree/1.3.7: + /reselect-tree@1.3.7: resolution: {integrity: sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==} dependencies: debug: 3.2.7 @@ -8486,15 +8441,15 @@ packages: - supports-color dev: true - /reselect/4.1.8: + /reselect@4.1.8: resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} dev: true - /resolve-alpn/1.2.1: + /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true - /resolve-dir/1.0.1: + /resolve-dir@1.0.1: resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} engines: {node: '>=0.10.0'} dependencies: @@ -8502,27 +8457,27 @@ packages: global-modules: 1.0.0 dev: true - /resolve-from/3.0.0: + /resolve-from@3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} dev: true - /resolve-from/4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} dev: true - /resolve-pkg-maps/1.0.0: + /resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true - /resolve/1.17.0: + /resolve@1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} dependencies: path-parse: 1.0.7 dev: true - /resolve/1.22.8: + /resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: @@ -8531,20 +8486,20 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: true - /responselike/2.0.1: + /responselike@2.0.1: resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} dependencies: lowercase-keys: 2.0.0 dev: true - /responselike/3.0.0: + /responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} dependencies: lowercase-keys: 3.0.0 dev: true - /restore-cursor/3.1.0: + /restore-cursor@3.1.0: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} dependencies: @@ -8552,56 +8507,57 @@ packages: signal-exit: 3.0.7 dev: true - /retry/0.12.0: + /retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} dev: false - /retry/0.13.1: + /retry@0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} engines: {node: '>= 4'} + requiresBuild: true dev: true optional: true - /reusify/1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} dev: true - /rimraf/2.7.1: + /rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: glob: 7.2.0 dev: true - /rimraf/3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: glob: 7.2.3 dev: true - /ripemd160-min/0.0.6: + /ripemd160-min@0.0.6: resolution: {integrity: sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==} engines: {node: '>=8'} dev: true - /ripemd160/2.0.2: + /ripemd160@2.0.2: resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} dependencies: hash-base: 3.1.0 inherits: 2.0.4 dev: true - /rlp/2.2.7: + /rlp@2.2.7: resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} hasBin: true dependencies: bn.js: 5.2.1 dev: true - /rosetta/1.1.0: + /rosetta@1.1.0: resolution: {integrity: sha512-3jQaCo2ySoDqLIPjy7+AvN3rluLfkG8A27hg0virL0gRAB5BJ3V35IBdkL/t6k1dGK0TVTyUEwXVUJsygyx4pA==} engines: {node: '>=8'} dependencies: @@ -8609,23 +8565,13 @@ packages: templite: 1.2.0 dev: true - /run-parallel-limit/1.1.0: - resolution: {integrity: sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==} - dependencies: - queue-microtask: 1.2.3 - dev: true - - /run-parallel/1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 dev: true - /rustbn.js/0.2.0: - resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} - dev: true - - /safe-array-concat/1.1.0: + /safe-array-concat@1.1.0: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: @@ -8635,15 +8581,15 @@ packages: isarray: 2.0.5 dev: true - /safe-buffer/5.1.2: + /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true - /safe-buffer/5.2.1: + /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test/1.0.3: + /safe-regex-test@1.0.3: resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: @@ -8652,24 +8598,24 @@ packages: is-regex: 1.1.4 dev: true - /safe-stable-stringify/2.4.3: + /safe-stable-stringify@2.4.3: resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} engines: {node: '>=10'} dev: true - /safer-buffer/2.1.2: + /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true - /scrypt-js/2.0.4: + /scrypt-js@2.0.4: resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} dev: true - /scrypt-js/3.0.1: + /scrypt-js@3.0.1: resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} dev: true - /secp256k1/4.0.3: + /secp256k1@4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} requiresBuild: true @@ -8679,21 +8625,21 @@ packages: node-gyp-build: 4.8.0 dev: true - /seedrandom/3.0.5: + /seedrandom@3.0.5: resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} dev: true - /semver/5.7.2: + /semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true dev: true - /semver/6.3.1: + /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true dev: true - /semver/7.6.0: + /semver@7.6.0: resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true @@ -8701,7 +8647,7 @@ packages: lru-cache: 6.0.0 dev: true - /send/0.17.2: + /send@0.17.2: resolution: {integrity: sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==} engines: {node: '>= 0.8.0'} dependencies: @@ -8722,7 +8668,7 @@ packages: - supports-color dev: true - /send/0.18.0: + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} dependencies: @@ -8743,20 +8689,20 @@ packages: - supports-color dev: true - /sentence-case/2.1.1: + /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 dev: true - /serialize-javascript/6.0.0: + /serialize-javascript@6.0.0: resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} dependencies: randombytes: 2.1.0 dev: true - /serve-static/1.14.2: + /serve-static@1.14.2: resolution: {integrity: sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==} engines: {node: '>= 0.8.0'} dependencies: @@ -8768,7 +8714,7 @@ packages: - supports-color dev: true - /serve-static/1.15.0: + /serve-static@1.15.0: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} dependencies: @@ -8780,7 +8726,7 @@ packages: - supports-color dev: true - /servify/0.1.12: + /servify@0.1.12: resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} engines: {node: '>=6'} dependencies: @@ -8793,11 +8739,11 @@ packages: - supports-color dev: true - /set-blocking/2.0.0: + /set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length/1.2.1: + /set-function-length@1.2.1: resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: @@ -8809,7 +8755,7 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-function-name/2.0.1: + /set-function-name@2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: @@ -8818,19 +8764,19 @@ packages: has-property-descriptors: 1.0.2 dev: true - /setimmediate/1.0.4: + /setimmediate@1.0.4: resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} dev: true - /setimmediate/1.0.5: + /setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} dev: true - /setprototypeof/1.2.0: + /setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} dev: true - /sha.js/2.4.11: + /sha.js@2.4.11: resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} hasBin: true dependencies: @@ -8838,42 +8784,42 @@ packages: safe-buffer: 5.2.1 dev: true - /sha1/1.1.1: + /sha1@1.1.1: resolution: {integrity: sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA==} dependencies: charenc: 0.0.2 crypt: 0.0.2 dev: true - /sha3-wasm/1.0.0: + /sha3-wasm@1.0.0: resolution: {integrity: sha512-yX0ULD3VD8U80YlM+6FapExy9uzYBpEOZzXRHwdhJn/+3PBbKhRHiNhknBqmMkW110zglXrJoZ52gtRbDGK4tg==} dependencies: nanoassert: 2.0.0 dev: true - /sha3/2.1.4: + /sha3@2.1.4: resolution: {integrity: sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==} dependencies: buffer: 6.0.3 dev: true - /shallowequal/1.1.0: + /shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} dev: true - /shebang-command/2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 dev: true - /shebang-regex/3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} dev: true - /side-channel/1.0.5: + /side-channel@1.0.5: resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} engines: {node: '>= 0.4'} dependencies: @@ -8883,14 +8829,14 @@ packages: object-inspect: 1.13.1 dev: true - /signal-exit/3.0.7: + /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - /simple-concat/1.0.1: + /simple-concat@1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} dev: true - /simple-get/2.8.2: + /simple-get@2.8.2: resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} dependencies: decompress-response: 3.3.0 @@ -8898,13 +8844,13 @@ packages: simple-concat: 1.0.1 dev: true - /simple-swizzle/0.2.2: + /simple-swizzle@0.2.2: resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: is-arrayish: 0.3.2 dev: true - /slice-ansi/4.0.0: + /slice-ansi@4.0.0: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} dependencies: @@ -8913,13 +8859,13 @@ packages: is-fullwidth-code-point: 3.0.0 dev: true - /snake-case/2.1.0: + /snake-case@2.1.0: resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} dependencies: no-case: 2.3.2 dev: true - /solc/0.4.26: + /solc@0.4.26: resolution: {integrity: sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==} hasBin: true dependencies: @@ -8930,32 +8876,30 @@ packages: yargs: 4.8.1 dev: true - /solc/0.7.3_debug@4.3.4: - resolution: {integrity: sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==} - engines: {node: '>=8.0.0'} + /solc@0.8.21(debug@4.3.4): + resolution: {integrity: sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==} + engines: {node: '>=10.0.0'} hasBin: true dependencies: command-exists: 1.2.9 - commander: 3.0.2 - follow-redirects: 1.15.5 - fs-extra: 0.30.0 + commander: 8.3.0 + follow-redirects: 1.15.5(debug@4.3.4) js-sha3: 0.8.0 memorystream: 0.3.1 - require-from-string: 2.0.2 semver: 5.7.2 tmp: 0.0.33 transitivePeerDependencies: - debug dev: true - /solc/0.8.21_debug@4.3.4: - resolution: {integrity: sha512-N55ogy2dkTRwiONbj4e6wMZqUNaLZkiRcjGyeafjLYzo/tf/IvhHY5P5wpe+H3Fubh9idu071i8eOGO31s1ylg==} + /solc@0.8.26(debug@4.3.4): + resolution: {integrity: sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==} engines: {node: '>=10.0.0'} hasBin: true dependencies: command-exists: 1.2.9 commander: 8.3.0 - follow-redirects: 1.15.5 + follow-redirects: 1.15.5(debug@4.3.4) js-sha3: 0.8.0 memorystream: 0.3.1 semver: 5.7.2 @@ -8964,7 +8908,7 @@ packages: - debug dev: true - /solhint/4.1.1: + /solhint@4.1.1: resolution: {integrity: sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw==} hasBin: true dependencies: @@ -8992,51 +8936,53 @@ packages: - typescript dev: true - /solidity-comments-extractor/0.0.8: + /solidity-comments-extractor@0.0.8: resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} + requiresBuild: true dev: true optional: true - /source-map-support/0.5.21: + /source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 dev: true - /source-map/0.6.1: + /source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} dev: true - /spark-md5/3.0.2: + /spark-md5@3.0.2: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} + requiresBuild: true dev: true optional: true - /spdx-correct/3.2.0: + /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.17 dev: true - /spdx-exceptions/2.4.0: + /spdx-exceptions@2.4.0: resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} dev: true - /spdx-expression-parse/3.0.1: + /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.4.0 spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids/3.0.17: + /spdx-license-ids@3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true - /sshpk/1.18.0: + /sshpk@1.18.0: resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} engines: {node: '>=0.10.0'} hasBin: true @@ -9052,33 +8998,33 @@ packages: tweetnacl: 0.14.5 dev: true - /stack-trace/0.0.10: + /stack-trace@0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: true - /stacktrace-parser/0.1.10: + /stacktrace-parser@0.1.10: resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} engines: {node: '>=6'} dependencies: type-fest: 0.7.1 dev: true - /statuses/1.5.0: + /statuses@1.5.0: resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} engines: {node: '>= 0.6'} dev: true - /statuses/2.0.1: + /statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} dev: true - /strict-uri-encode/1.1.0: + /strict-uri-encode@1.1.0: resolution: {integrity: sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==} engines: {node: '>=0.10.0'} dev: true - /string-width/1.0.2: + /string-width@1.0.2: resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} engines: {node: '>=0.10.0'} dependencies: @@ -9087,7 +9033,7 @@ packages: strip-ansi: 3.0.1 dev: true - /string-width/2.1.1: + /string-width@2.1.1: resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} engines: {node: '>=4'} dependencies: @@ -9095,7 +9041,7 @@ packages: strip-ansi: 4.0.0 dev: true - /string-width/4.2.3: + /string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} dependencies: @@ -9104,7 +9050,7 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.trim/1.2.8: + /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: @@ -9113,7 +9059,7 @@ packages: es-abstract: 1.22.4 dev: true - /string.prototype.trimend/1.0.7: + /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: call-bind: 1.0.7 @@ -9121,7 +9067,7 @@ packages: es-abstract: 1.22.4 dev: true - /string.prototype.trimstart/1.0.7: + /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: call-bind: 1.0.7 @@ -9129,80 +9075,82 @@ packages: es-abstract: 1.22.4 dev: true - /string_decoder/0.10.31: + /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + requiresBuild: true dev: true optional: true - /string_decoder/1.1.1: + /string_decoder@1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 dev: true - /string_decoder/1.3.0: + /string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 dev: true - /strip-ansi/3.0.1: + /strip-ansi@3.0.1: resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} engines: {node: '>=0.10.0'} dependencies: ansi-regex: 2.1.1 dev: true - /strip-ansi/4.0.0: + /strip-ansi@4.0.0: resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} engines: {node: '>=4'} dependencies: ansi-regex: 3.0.1 dev: true - /strip-ansi/6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 dev: true - /strip-bom/2.0.0: + /strip-bom@2.0.0: resolution: {integrity: sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==} engines: {node: '>=0.10.0'} dependencies: is-utf8: 0.2.1 dev: true - /strip-bom/3.0.0: + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} dev: true - /strip-hex-prefix/1.0.0: + /strip-hex-prefix@1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} dependencies: is-hex-prefixed: 1.0.0 dev: true - /strip-indent/2.0.0: + /strip-indent@2.0.0: resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} engines: {node: '>=4'} dev: true - /strip-json-comments/2.0.1: + /strip-json-comments@2.0.1: resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} engines: {node: '>=0.10.0'} dev: true - /strip-json-comments/3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} dev: true - /sublevel-pouchdb/7.3.1: + /sublevel-pouchdb@7.3.1: resolution: {integrity: sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==} + requiresBuild: true dependencies: inherits: 2.0.4 level-codec: 9.0.2 @@ -9211,40 +9159,40 @@ packages: dev: true optional: true - /supports-color/5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} dependencies: has-flag: 3.0.0 dev: true - /supports-color/7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} dependencies: has-flag: 4.0.0 dev: true - /supports-color/8.1.1: + /supports-color@8.1.1: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 dev: true - /supports-preserve-symlinks-flag/1.0.0: + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true - /swap-case/1.1.2: + /swap-case@1.1.2: resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} dependencies: lower-case: 1.1.4 upper-case: 1.1.3 dev: true - /swarm-js/0.1.42: + /swarm-js@0.1.42: resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} dependencies: bluebird: 3.7.2 @@ -9264,12 +9212,12 @@ packages: - utf-8-validate dev: true - /symbol-observable/1.2.0: + /symbol-observable@1.2.0: resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} engines: {node: '>=0.10.0'} dev: true - /sync-request/6.1.0: + /sync-request@6.1.0: resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} engines: {node: '>=8.0.0'} dependencies: @@ -9278,13 +9226,13 @@ packages: then-request: 6.0.2 dev: true - /sync-rpc/1.3.6: + /sync-rpc@1.3.6: resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} dependencies: get-port: 3.2.0 dev: true - /table/6.8.1: + /table@6.8.1: resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} engines: {node: '>=10.0.0'} dependencies: @@ -9295,7 +9243,7 @@ packages: strip-ansi: 6.0.1 dev: true - /tar/4.4.19: + /tar@4.4.19: resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} engines: {node: '>=4.5'} dependencies: @@ -9308,24 +9256,24 @@ packages: yallist: 3.1.1 dev: true - /templite/1.2.0: + /templite@1.2.0: resolution: {integrity: sha512-O9BpPXF44a9Pg84Be6mjzlrqOtbP2I/B5PNLWu5hb1n9UQ1GTLsjdMg1z5ROCkF6NFXsO5LQfRXEpgTGrZ7Q0Q==} dev: true - /testrpc/0.0.1: + /testrpc@0.0.1: resolution: {integrity: sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==} deprecated: testrpc has been renamed to ganache-cli, please use this package from now on. dev: true - /text-hex/1.0.0: + /text-hex@1.0.0: resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} dev: true - /text-table/0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /then-request/6.0.2: + /then-request@6.0.2: resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} engines: {node: '>=6.0.0'} dependencies: @@ -9342,54 +9290,55 @@ packages: qs: 6.11.2 dev: true - /through2/3.0.2: + /through2@3.0.2: resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} + requiresBuild: true dependencies: inherits: 2.0.4 readable-stream: 3.6.2 dev: true optional: true - /timed-out/4.0.1: + /timed-out@4.0.1: resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} engines: {node: '>=0.10.0'} dev: true - /tiny-typed-emitter/2.1.0: + /tiny-typed-emitter@2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} dev: true - /title-case/2.1.1: + /title-case@2.1.1: resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 dev: true - /tmp/0.0.33: + /tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 dev: true - /to-regex-range/5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 dev: true - /toidentifier/1.0.1: + /toidentifier@1.0.1: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} dev: true - /tokenizr/1.5.7: + /tokenizr@1.5.7: resolution: {integrity: sha512-w6qS6F5PNtY30DxoRD4a7nC7zOlPM2SlpQ4zLhOmqBaB1VCZrlV82bLpc/lKNOdNmrwIwcsJLDcjEJ8f7UG6Mg==} dev: true - /tough-cookie/2.5.0: + /tough-cookie@2.5.0: resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} engines: {node: '>=0.8'} dependencies: @@ -9397,9 +9346,10 @@ packages: punycode: 2.3.1 dev: true - /tough-cookie/4.1.3: + /tough-cookie@4.1.3: resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} engines: {node: '>=6'} + requiresBuild: true dependencies: psl: 1.9.0 punycode: 2.3.1 @@ -9408,16 +9358,16 @@ packages: dev: true optional: true - /tr46/0.0.3: + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /triple-beam/1.4.1: + /triple-beam@1.4.1: resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} engines: {node: '>= 14.0.0'} dev: true - /truffle-assertions/0.9.2: + /truffle-assertions@0.9.2: resolution: {integrity: sha512-9g2RhaxU2F8DeWhqoGQvL/bV8QVoSnQ6PY+ZPvYRP5eF7+/8LExb4mjLx/FeliLTjc3Tv1SABG05Gu5qQ/ErmA==} deprecated: Truffle was sunset, so this package will be deprecated alongside Truffle dependencies: @@ -9425,7 +9375,7 @@ packages: lodash.isequal: 4.5.0 dev: true - /truffle-flattener/1.6.0: + /truffle-flattener@1.6.0: resolution: {integrity: sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==} hasBin: true dependencies: @@ -9438,7 +9388,7 @@ packages: - supports-color dev: true - /truffle-plugin-verify/0.6.7: + /truffle-plugin-verify@0.6.7: resolution: {integrity: sha512-Z+kk3i0rc58nXYWVLuiUKWYrcK1ws9lSa2+EJLFfDegV3WPl0k0P6htIYwb5ifG/fHztAS79n8bgNZ9hxStxtg==} deprecated: Truffle was sunset, so this package will be deprecated alongside Truffle dependencies: @@ -9456,7 +9406,7 @@ packages: - utf-8-validate dev: true - /truffle/5.11.5: + /truffle@5.11.5: resolution: {integrity: sha512-yCa2uWs5DmL0spuJUuIMtnVayRQrVuWLtcRXHMB0NLrtWDcRo7VM9RViveV4+oi9LdZ8VpFmmqHGm43LbzUxOA==} engines: {node: ^16.20 || ^18.16 || >=20} hasBin: true @@ -9477,7 +9427,7 @@ packages: - utf-8-validate dev: true - /tsconfig-paths/3.15.0: + /tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 @@ -9486,75 +9436,77 @@ packages: strip-bom: 3.0.0 dev: true - /tslib/1.14.1: + /tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.4.1: + /tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + requiresBuild: true dev: true optional: true - /tslib/2.6.2: + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + requiresBuild: true dev: true optional: true - /tsort/0.0.1: + /tsort@0.0.1: resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} dev: true - /tunnel-agent/0.6.0: + /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: safe-buffer: 5.2.1 dev: true - /tunnel/0.0.6: + /tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} dev: true - /tweetnacl-util/0.15.1: + /tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} dev: true - /tweetnacl/0.14.5: + /tweetnacl@0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true - /tweetnacl/1.0.3: + /tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} dev: true - /type-check/0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 dev: true - /type-detect/4.0.8: + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} dev: true - /type-fest/0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} dev: true - /type-fest/0.21.3: + /type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} dev: true - /type-fest/0.7.1: + /type-fest@0.7.1: resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} engines: {node: '>=8'} dev: true - /type-is/1.6.18: + /type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} dependencies: @@ -9562,15 +9514,15 @@ packages: mime-types: 2.1.35 dev: true - /type/1.2.0: + /type@1.2.0: resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} dev: true - /type/2.7.2: + /type@2.7.2: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true - /typed-array-buffer/1.0.1: + /typed-array-buffer@1.0.1: resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} engines: {node: '>= 0.4'} dependencies: @@ -9579,7 +9531,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-length/1.0.0: + /typed-array-byte-length@1.0.0: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: @@ -9589,7 +9541,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset/1.0.1: + /typed-array-byte-offset@1.0.1: resolution: {integrity: sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==} engines: {node: '>= 0.4'} dependencies: @@ -9601,7 +9553,7 @@ packages: is-typed-array: 1.1.13 dev: true - /typed-array-length/1.0.4: + /typed-array-length@1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: call-bind: 1.0.7 @@ -9609,37 +9561,37 @@ packages: is-typed-array: 1.1.13 dev: true - /typedarray-to-buffer/3.1.5: + /typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 dev: true - /typedarray/0.0.6: + /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript-compare/0.0.2: + /typescript-compare@0.0.2: resolution: {integrity: sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==} dependencies: typescript-logic: 0.0.0 dev: true - /typescript-logic/0.0.0: + /typescript-logic@0.0.0: resolution: {integrity: sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==} dev: true - /typescript-tuple/2.2.1: + /typescript-tuple@2.2.1: resolution: {integrity: sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==} dependencies: typescript-compare: 0.0.2 dev: true - /ultron/1.1.1: + /ultron@1.1.1: resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} dev: true - /unbox-primitive/1.0.2: + /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: call-bind: 1.0.7 @@ -9648,67 +9600,69 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /undici-types/5.26.5: + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true - /undici/5.28.3: + /undici@5.28.3: resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} engines: {node: '>=14.0'} dependencies: '@fastify/busboy': 2.1.0 dev: true - /universalify/0.1.2: + /universalify@0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} dev: true - /universalify/0.2.0: + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} + requiresBuild: true dev: true optional: true - /universalify/2.0.1: + /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true - /unpipe/1.0.0: + /unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} dev: true - /upper-case-first/1.1.2: + /upper-case-first@1.1.2: resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: upper-case: 1.1.3 dev: true - /upper-case/1.1.3: + /upper-case@1.1.3: resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} dev: true - /uri-js/4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 dev: true - /url-parse/1.5.10: + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + requiresBuild: true dependencies: querystringify: 2.2.0 requires-port: 1.0.0 dev: true optional: true - /url-set-query/1.0.0: + /url-set-query@1.0.0: resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} dev: true - /utf-8-validate/5.0.10: + /utf-8-validate@5.0.10: resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -9716,7 +9670,7 @@ packages: node-gyp-build: 4.8.0 dev: true - /utf-8-validate/5.0.7: + /utf-8-validate@5.0.7: resolution: {integrity: sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -9725,7 +9679,7 @@ packages: dev: true optional: true - /utf-8-validate/6.0.3: + /utf-8-validate@6.0.3: resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} engines: {node: '>=6.14.2'} requiresBuild: true @@ -9733,15 +9687,15 @@ packages: node-gyp-build: 4.8.0 dev: true - /utf8/3.0.0: + /utf8@3.0.0: resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} dev: true - /util-deprecate/1.0.2: + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /util/0.12.5: + /util@0.12.5: resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 @@ -9751,61 +9705,63 @@ packages: which-typed-array: 1.1.14 dev: true - /utils-merge/1.0.1: + /utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} dev: true - /uuid/2.0.1: + /uuid@2.0.1: resolution: {integrity: sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. dev: true - /uuid/3.4.0: + /uuid@3.4.0: resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. hasBin: true dev: true - /uuid/8.3.2: + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - /uuid/9.0.1: + /uuid@9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} hasBin: true dev: true - /validate-npm-package-license/3.0.4: + /validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 dev: true - /value-or-promise/1.0.11: + /value-or-promise@1.0.11: resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} engines: {node: '>=12'} + requiresBuild: true dev: true optional: true - /value-or-promise/1.0.12: + /value-or-promise@1.0.12: resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} engines: {node: '>=12'} + requiresBuild: true dev: true optional: true - /varint/5.0.2: + /varint@5.0.2: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} dev: true - /vary/1.1.2: + /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} dev: true - /verror/1.10.0: + /verror@1.10.0: resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} engines: {'0': node >=0.6.0} dependencies: @@ -9814,12 +9770,13 @@ packages: extsprintf: 1.3.0 dev: true - /vuvuzela/1.0.3: + /vuvuzela@1.0.3: resolution: {integrity: sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==} + requiresBuild: true dev: true optional: true - /web3-bzz/1.10.0: + /web3-bzz@1.10.0: resolution: {integrity: sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -9833,7 +9790,7 @@ packages: - utf-8-validate dev: true - /web3-bzz/1.10.4: + /web3-bzz@1.10.4: resolution: {integrity: sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -9847,7 +9804,7 @@ packages: - utf-8-validate dev: true - /web3-core-helpers/1.10.0: + /web3-core-helpers@1.10.0: resolution: {integrity: sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==} engines: {node: '>=8.0.0'} dependencies: @@ -9855,7 +9812,7 @@ packages: web3-utils: 1.10.0 dev: true - /web3-core-helpers/1.10.4: + /web3-core-helpers@1.10.4: resolution: {integrity: sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==} engines: {node: '>=8.0.0'} dependencies: @@ -9863,7 +9820,7 @@ packages: web3-utils: 1.10.4 dev: true - /web3-core-method/1.10.0: + /web3-core-method@1.10.0: resolution: {integrity: sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==} engines: {node: '>=8.0.0'} dependencies: @@ -9874,7 +9831,7 @@ packages: web3-utils: 1.10.0 dev: true - /web3-core-method/1.10.4: + /web3-core-method@1.10.4: resolution: {integrity: sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==} engines: {node: '>=8.0.0'} dependencies: @@ -9885,21 +9842,21 @@ packages: web3-utils: 1.10.4 dev: true - /web3-core-promievent/1.10.0: + /web3-core-promievent@1.10.0: resolution: {integrity: sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.4 dev: true - /web3-core-promievent/1.10.4: + /web3-core-promievent@1.10.4: resolution: {integrity: sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.4 dev: true - /web3-core-requestmanager/1.10.0: + /web3-core-requestmanager@1.10.0: resolution: {integrity: sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==} engines: {node: '>=8.0.0'} dependencies: @@ -9913,7 +9870,7 @@ packages: - supports-color dev: true - /web3-core-requestmanager/1.10.4: + /web3-core-requestmanager@1.10.4: resolution: {integrity: sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==} engines: {node: '>=8.0.0'} dependencies: @@ -9927,7 +9884,7 @@ packages: - supports-color dev: true - /web3-core-subscriptions/1.10.0: + /web3-core-subscriptions@1.10.0: resolution: {integrity: sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==} engines: {node: '>=8.0.0'} dependencies: @@ -9935,7 +9892,7 @@ packages: web3-core-helpers: 1.10.0 dev: true - /web3-core-subscriptions/1.10.4: + /web3-core-subscriptions@1.10.4: resolution: {integrity: sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==} engines: {node: '>=8.0.0'} dependencies: @@ -9943,7 +9900,7 @@ packages: web3-core-helpers: 1.10.4 dev: true - /web3-core/1.10.0: + /web3-core@1.10.0: resolution: {integrity: sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==} engines: {node: '>=8.0.0'} dependencies: @@ -9959,7 +9916,7 @@ packages: - supports-color dev: true - /web3-core/1.10.4: + /web3-core@1.10.4: resolution: {integrity: sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==} engines: {node: '>=8.0.0'} dependencies: @@ -9975,7 +9932,7 @@ packages: - supports-color dev: true - /web3-eth-abi/1.10.0: + /web3-eth-abi@1.10.0: resolution: {integrity: sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==} engines: {node: '>=8.0.0'} dependencies: @@ -9983,7 +9940,7 @@ packages: web3-utils: 1.10.0 dev: true - /web3-eth-abi/1.10.4: + /web3-eth-abi@1.10.4: resolution: {integrity: sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==} engines: {node: '>=8.0.0'} dependencies: @@ -9991,7 +9948,7 @@ packages: web3-utils: 1.10.4 dev: true - /web3-eth-accounts/1.10.0: + /web3-eth-accounts@1.10.0: resolution: {integrity: sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==} engines: {node: '>=8.0.0'} dependencies: @@ -10010,7 +9967,7 @@ packages: - supports-color dev: true - /web3-eth-accounts/1.10.4: + /web3-eth-accounts@1.10.4: resolution: {integrity: sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==} engines: {node: '>=8.0.0'} dependencies: @@ -10029,7 +9986,7 @@ packages: - supports-color dev: true - /web3-eth-contract/1.10.0: + /web3-eth-contract@1.10.0: resolution: {integrity: sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==} engines: {node: '>=8.0.0'} dependencies: @@ -10046,7 +10003,7 @@ packages: - supports-color dev: true - /web3-eth-contract/1.10.4: + /web3-eth-contract@1.10.4: resolution: {integrity: sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==} engines: {node: '>=8.0.0'} dependencies: @@ -10063,7 +10020,7 @@ packages: - supports-color dev: true - /web3-eth-ens/1.10.0: + /web3-eth-ens@1.10.0: resolution: {integrity: sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==} engines: {node: '>=8.0.0'} dependencies: @@ -10080,7 +10037,7 @@ packages: - supports-color dev: true - /web3-eth-ens/1.10.4: + /web3-eth-ens@1.10.4: resolution: {integrity: sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==} engines: {node: '>=8.0.0'} dependencies: @@ -10097,7 +10054,7 @@ packages: - supports-color dev: true - /web3-eth-iban/1.10.0: + /web3-eth-iban@1.10.0: resolution: {integrity: sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==} engines: {node: '>=8.0.0'} dependencies: @@ -10105,7 +10062,7 @@ packages: web3-utils: 1.10.0 dev: true - /web3-eth-iban/1.10.4: + /web3-eth-iban@1.10.4: resolution: {integrity: sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==} engines: {node: '>=8.0.0'} dependencies: @@ -10113,7 +10070,7 @@ packages: web3-utils: 1.10.4 dev: true - /web3-eth-personal/1.10.0: + /web3-eth-personal@1.10.0: resolution: {integrity: sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==} engines: {node: '>=8.0.0'} dependencies: @@ -10128,7 +10085,7 @@ packages: - supports-color dev: true - /web3-eth-personal/1.10.4: + /web3-eth-personal@1.10.4: resolution: {integrity: sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==} engines: {node: '>=8.0.0'} dependencies: @@ -10143,7 +10100,7 @@ packages: - supports-color dev: true - /web3-eth/1.10.0: + /web3-eth@1.10.0: resolution: {integrity: sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==} engines: {node: '>=8.0.0'} dependencies: @@ -10164,7 +10121,7 @@ packages: - supports-color dev: true - /web3-eth/1.10.4: + /web3-eth@1.10.4: resolution: {integrity: sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==} engines: {node: '>=8.0.0'} dependencies: @@ -10185,7 +10142,7 @@ packages: - supports-color dev: true - /web3-jsonrpc-gateway/1.9.1: + /web3-jsonrpc-gateway@1.9.1: resolution: {integrity: sha512-MdO9KzrX8ucYmmcl8UM7sVJkWOTRL+jWp5ICmIXCDSEw6G+EHXVLkDe51bc73FOkV8iWT2wkv+YGr0Sqsysh6A==} hasBin: true dependencies: @@ -10196,7 +10153,7 @@ packages: ethers: 5.2.0 express: 4.17.3 graphql: 14.7.0 - graphql-request: 5.2.0_graphql@14.7.0 + graphql-request: 5.2.0(graphql@14.7.0) json-rpc-2.0: 0.2.19 winston: 3.7.2 transitivePeerDependencies: @@ -10207,7 +10164,7 @@ packages: - utf-8-validate dev: true - /web3-net/1.10.0: + /web3-net@1.10.0: resolution: {integrity: sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==} engines: {node: '>=8.0.0'} dependencies: @@ -10219,7 +10176,7 @@ packages: - supports-color dev: true - /web3-net/1.10.4: + /web3-net@1.10.4: resolution: {integrity: sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==} engines: {node: '>=8.0.0'} dependencies: @@ -10231,7 +10188,7 @@ packages: - supports-color dev: true - /web3-providers-http/1.10.0: + /web3-providers-http@1.10.0: resolution: {integrity: sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==} engines: {node: '>=8.0.0'} dependencies: @@ -10243,7 +10200,7 @@ packages: - encoding dev: true - /web3-providers-http/1.10.4: + /web3-providers-http@1.10.4: resolution: {integrity: sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==} engines: {node: '>=8.0.0'} dependencies: @@ -10255,7 +10212,7 @@ packages: - encoding dev: true - /web3-providers-ipc/1.10.0: + /web3-providers-ipc@1.10.0: resolution: {integrity: sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==} engines: {node: '>=8.0.0'} dependencies: @@ -10263,7 +10220,7 @@ packages: web3-core-helpers: 1.10.0 dev: true - /web3-providers-ipc/1.10.4: + /web3-providers-ipc@1.10.4: resolution: {integrity: sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==} engines: {node: '>=8.0.0'} dependencies: @@ -10271,7 +10228,7 @@ packages: web3-core-helpers: 1.10.4 dev: true - /web3-providers-ws/1.10.0: + /web3-providers-ws@1.10.0: resolution: {integrity: sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==} engines: {node: '>=8.0.0'} dependencies: @@ -10282,7 +10239,7 @@ packages: - supports-color dev: true - /web3-providers-ws/1.10.4: + /web3-providers-ws@1.10.4: resolution: {integrity: sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==} engines: {node: '>=8.0.0'} dependencies: @@ -10293,7 +10250,7 @@ packages: - supports-color dev: true - /web3-shh/1.10.0: + /web3-shh@1.10.0: resolution: {integrity: sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -10307,7 +10264,7 @@ packages: - supports-color dev: true - /web3-shh/1.10.4: + /web3-shh@1.10.4: resolution: {integrity: sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -10321,7 +10278,7 @@ packages: - supports-color dev: true - /web3-utils/1.10.0: + /web3-utils@1.10.0: resolution: {integrity: sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==} engines: {node: '>=8.0.0'} dependencies: @@ -10334,7 +10291,7 @@ packages: utf8: 3.0.0 dev: true - /web3-utils/1.10.4: + /web3-utils@1.10.4: resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} dependencies: @@ -10348,7 +10305,7 @@ packages: utf8: 3.0.0 dev: true - /web3/1.10.0: + /web3@1.10.0: resolution: {integrity: sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -10367,7 +10324,7 @@ packages: - utf-8-validate dev: true - /web3/1.10.4: + /web3@1.10.4: resolution: {integrity: sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==} engines: {node: '>=8.0.0'} requiresBuild: true @@ -10386,11 +10343,11 @@ packages: - utf-8-validate dev: true - /webidl-conversions/3.0.1: + /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true - /websocket/1.0.34: + /websocket@1.0.34: resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} engines: {node: '>=4.0.0'} dependencies: @@ -10404,20 +10361,21 @@ packages: - supports-color dev: true - /whatwg-mimetype/3.0.0: + /whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} + requiresBuild: true dev: true optional: true - /whatwg-url/5.0.0: + /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 dev: true - /which-boxed-primitive/1.0.2: + /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 @@ -10427,11 +10385,11 @@ packages: is-symbol: 1.0.4 dev: true - /which-module/1.0.0: + /which-module@1.0.0: resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} dev: true - /which-typed-array/1.1.14: + /which-typed-array@1.1.14: resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: @@ -10442,14 +10400,14 @@ packages: has-tostringtag: 1.0.2 dev: true - /which/1.3.1: + /which@1.3.1: resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} hasBin: true dependencies: isexe: 2.0.0 dev: true - /which/2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true @@ -10457,20 +10415,20 @@ packages: isexe: 2.0.0 dev: true - /widest-line/3.1.0: + /widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} dependencies: string-width: 4.2.3 dev: true - /window-size/0.2.0: + /window-size@0.2.0: resolution: {integrity: sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==} engines: {node: '>= 0.10.0'} hasBin: true dev: true - /winston-transport/4.7.0: + /winston-transport@4.7.0: resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} engines: {node: '>= 12.0.0'} dependencies: @@ -10479,7 +10437,7 @@ packages: triple-beam: 1.4.1 dev: true - /winston/3.7.2: + /winston@3.7.2: resolution: {integrity: sha512-QziIqtojHBoyzUOdQvQiar1DH0Xp9nF1A1y7NVy2DGEsz82SBDtOalS0ulTRGVT14xPX3WRWkCsdcJKqNflKng==} engines: {node: '>= 12.0.0'} dependencies: @@ -10495,7 +10453,7 @@ packages: winston-transport: 4.7.0 dev: true - /witnet-radon-js/2.0.0: + /witnet-radon-js@2.0.0: resolution: {integrity: sha512-dObjZAdug55OItK/d2xX5x/Y5d5J7ckroq3GnR84yCgbY813grHufQ6a6zxrYfFdHJqwuznLnMw8I/PwBksTKA==} dependencies: '@types/node': 20.11.17 @@ -10504,7 +10462,7 @@ packages: rosetta: 1.1.0 dev: true - /witnet-toolkit/2.0.1: + /witnet-toolkit@2.0.1: resolution: {integrity: sha512-+/5XTBaA1DNBVgaxt+Nmy53CB6DGFGlK8NmII0Oe6jrDUa9sqzbUvxuJPPxc7B7NhyzS5/7eGP1NQfVGedLPWA==} hasBin: true dependencies: @@ -10521,11 +10479,11 @@ packages: - utf-8-validate dev: true - /workerpool/6.2.1: + /workerpool@6.2.1: resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} dev: true - /wrap-ansi/2.1.0: + /wrap-ansi@2.1.0: resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} engines: {node: '>=0.10.0'} dependencies: @@ -10533,7 +10491,7 @@ packages: strip-ansi: 3.0.1 dev: true - /wrap-ansi/7.0.0: + /wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} dependencies: @@ -10542,18 +10500,19 @@ packages: strip-ansi: 6.0.1 dev: true - /wrappy/1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} dev: true - /write-stream/0.4.3: + /write-stream@0.4.3: resolution: {integrity: sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==} + requiresBuild: true dependencies: readable-stream: 0.0.4 dev: true optional: true - /ws/3.3.3: + /ws@3.3.3: resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} peerDependencies: bufferutil: ^4.0.1 @@ -10569,7 +10528,7 @@ packages: ultron: 1.1.1 dev: true - /ws/7.2.3: + /ws@7.2.3: resolution: {integrity: sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ==} engines: {node: '>=8.3.0'} peerDependencies: @@ -10582,7 +10541,7 @@ packages: optional: true dev: true - /ws/7.4.6: + /ws@7.4.6: resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} engines: {node: '>=8.3.0'} peerDependencies: @@ -10595,7 +10554,7 @@ packages: optional: true dev: true - /ws/7.5.9: + /ws@7.5.9: resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: @@ -10608,7 +10567,7 @@ packages: optional: true dev: true - /ws/8.13.0_2adebc2xdjqbcvbjxkodkhadp4: + /ws@8.13.0(bufferutil@4.0.7)(utf-8-validate@6.0.3): resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} engines: {node: '>=10.0.0'} peerDependencies: @@ -10624,13 +10583,13 @@ packages: utf-8-validate: 6.0.3 dev: true - /xhr-request-promise/0.1.3: + /xhr-request-promise@0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} dependencies: xhr-request: 1.1.0 dev: true - /xhr-request/1.1.0: + /xhr-request@1.1.0: resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} dependencies: buffer-to-arraybuffer: 0.0.5 @@ -10642,7 +10601,7 @@ packages: xhr: 2.6.0 dev: true - /xhr/2.6.0: + /xhr@2.6.0: resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} dependencies: global: 4.4.0 @@ -10651,61 +10610,62 @@ packages: xtend: 4.0.2 dev: true - /xmlhttprequest/1.8.0: + /xmlhttprequest@1.8.0: resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} engines: {node: '>=0.4.0'} dev: true - /xss/1.0.14: + /xss@1.0.14: resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} engines: {node: '>= 0.10.0'} hasBin: true + requiresBuild: true dependencies: commander: 2.20.3 cssfilter: 0.0.10 dev: true optional: true - /xtend/4.0.2: + /xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} dev: true - /y18n/3.2.2: + /y18n@3.2.2: resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} dev: true - /y18n/5.0.8: + /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} dev: true - /yaeti/0.0.6: + /yaeti@0.0.6: resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} engines: {node: '>=0.10.32'} dev: true - /yallist/3.1.1: + /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} dev: true - /yallist/4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true - /yargs-parser/2.4.1: + /yargs-parser@2.4.1: resolution: {integrity: sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==} dependencies: camelcase: 3.0.0 lodash.assign: 4.2.0 dev: true - /yargs-parser/20.2.4: + /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} dev: true - /yargs-unparser/2.0.0: + /yargs-unparser@2.0.0: resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} engines: {node: '>=10'} dependencies: @@ -10715,7 +10675,7 @@ packages: is-plain-obj: 2.1.0 dev: true - /yargs/16.2.0: + /yargs@16.2.0: resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} engines: {node: '>=10'} dependencies: @@ -10728,7 +10688,7 @@ packages: yargs-parser: 20.2.4 dev: true - /yargs/4.8.1: + /yargs@4.8.1: resolution: {integrity: sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==} dependencies: cliui: 3.2.0 @@ -10747,7 +10707,7 @@ packages: yargs-parser: 2.4.1 dev: true - /yocto-queue/0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true From 4d619eaa373e1b096589265585d15ff1175c10b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 09:19:42 +0200 Subject: [PATCH 18/24] chore: fmt! --- migrations/scripts/1_base.js | 16 +-- migrations/scripts/2_libs.js | 10 +- migrations/scripts/3_framework.js | 207 +++++++++++++++--------------- settings/artifacts.js | 30 ++--- settings/index.js | 18 +-- settings/specs.js | 20 +-- src/utils.js | 36 +++--- 7 files changed, 171 insertions(+), 166 deletions(-) diff --git a/migrations/scripts/1_base.js b/migrations/scripts/1_base.js index c8d00f75..5c11355f 100644 --- a/migrations/scripts/1_base.js +++ b/migrations/scripts/1_base.js @@ -1,4 +1,3 @@ -const ethUtils = require("ethereumjs-util") const fs = require("fs") const settings = require("../../settings") const utils = require("../../src/utils") @@ -7,14 +6,14 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (truffleDeployer, network, [,,, master]) { const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {}; + if (!addresses[network]) addresses[network] = {} const deployerAddr = utils.getNetworkBaseArtifactAddress(network, addresses, "WitnetDeployer") if (utils.isNullAddress(deployerAddr) || (await web3.eth.getCode(deployerAddr)).length < 3) { // Settle WitnetDeployer bytecode and source code as to guarantee // salted addresses remain as expected no matter if the solc version // is changed in migrations/witnet.settings.js - const impl = settings.getArtifacts(network).WitnetDeployer; + const impl = settings.getArtifacts(network).WitnetDeployer utils.traceHeader("Defrosted 'WitnetDeployer'") fs.writeFileSync( `build/contracts/${impl}.json`, @@ -29,25 +28,24 @@ module.exports = async function (truffleDeployer, network, [,,, master]) { console.info(" ", "> evm version: ", metadata.settings.evmVersion.toUpperCase()) console.info(" ", "> artifact codehash: ", web3.utils.soliditySha3(WitnetDeployer.toJSON().deployedBytecode)) - await truffleDeployer.deploy(WitnetDeployer, { + await truffleDeployer.deploy(WitnetDeployer, { from: settings.getSpecs(network)?.WitnetDeployer?.from || web3.utils.toChecksumAddress(master), }) addresses[network].WitnetDeployer = WitnetDeployer.address await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - } else { - WitnetDeployer.address = addresses[network].WitnetDeployer; + WitnetDeployer.address = addresses[network].WitnetDeployer utils.traceHeader("Deployed 'WitnetDeployer'") console.info(" ", "> contract address: \x1b[95m", WitnetDeployer.address, "\x1b[0m") console.info() } - + // Settle WitnetDeployer bytecode and source code as to guarantee // that proxified base artifacts can get automatically verified utils.traceHeader("Defrosting 'WitnetProxy'") fs.writeFileSync( - `build/contracts/WitnetProxy.json`, - fs.readFileSync(`migrations/frosts/WitnetProxy.json`), + "build/contracts/WitnetProxy.json", + fs.readFileSync("migrations/frosts/WitnetProxy.json"), { encoding: "utf8", flag: "w" } ) const WitnetProxy = artifacts.require("WitnetProxy") diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 53fe9b1f..929e683e 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -9,7 +9,7 @@ module.exports = async function (_, network, [, from]) { if (!addresses[network]?.libs) addresses[network].libs = {} const deployer = await WitnetDeployer.deployed() - const networkArtifacts = settings.getArtifacts(network); + const networkArtifacts = settings.getArtifacts(network) const selection = utils.getWitnetArtifactsFromArgs() for (const index in networkArtifacts.libs) { @@ -22,7 +22,7 @@ module.exports = async function (_, network, [, from]) { let libNetworkAddr = utils.getNetworkLibsArtifactAddress(network, addresses, impl) if ( // lib implementation artifact is listed as --artifacts on CLI - selection.includes(impl) || + selection.includes(impl) || // or, no address found in addresses file but code is already deployed into target address (utils.isNullAddress(libNetworkAddr) && libTargetCode.length > 3) || // or, address found in addresses file but no code currently deployed in such @@ -41,16 +41,16 @@ module.exports = async function (_, network, [, from]) { addresses[network].libs[impl] = libTargetAddr libNetworkAddr = libTargetAddr // if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) // } } else { utils.traceHeader(`Deployed '${impl}'`) } libImplArtifact.address = utils.getNetworkLibsArtifactAddress(network, addresses, impl) if (libTargetAddr !== libNetworkAddr) { - console.info(" ", "> library address: \x1b[96m", libImplArtifact.address, `\x1b[0m!== \x1b[30;43m${libTargetAddr}\x1b[0m`) + console.info(" > library address: \x1b[96m", libImplArtifact.address, `\x1b[0m!== \x1b[30;43m${libTargetAddr}\x1b[0m`) } else { - console.info(" ", "> library address: \x1b[96m", libImplArtifact.address, "\x1b[0m") + console.info(" > library address: \x1b[96m", libImplArtifact.address, "\x1b[0m") } console.info() } diff --git a/migrations/scripts/3_framework.js b/migrations/scripts/3_framework.js index fe63444e..b344c2b6 100644 --- a/migrations/scripts/3_framework.js +++ b/migrations/scripts/3_framework.js @@ -8,48 +8,47 @@ const version = `${ require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) }` -const selection = utils.getWitnetArtifactsFromArgs(); +const selection = utils.getWitnetArtifactsFromArgs() const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") -module.exports = async function (_, network, [, from, reporter, curator, ]) { - - const addresses = await utils.readJsonFromFile("./migrations/addresses.json"); - const constructorArgs = await utils.readJsonFromFile("./migrations/constructorArgs.json"); +module.exports = async function (_, network, [, from, reporter, curator]) { + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") + const constructorArgs = await utils.readJsonFromFile("./migrations/constructorArgs.json") if (!constructorArgs[network]) constructorArgs[network] = {} - + const networkArtifacts = settings.getArtifacts(network) const networkSpecs = settings.getSpecs(network) // Settle the order in which (some of the) framework artifacts must be deployed first const framework = { - core: merge(Object.keys(networkArtifacts.core), [ "WitOracleRadonRegistry", "WitOracle", ], ), - apps: merge(Object.keys(networkArtifacts.apps), [], ), - }; + core: merge(Object.keys(networkArtifacts.core), ["WitOracleRadonRegistry", "WitOracle"],), + apps: merge(Object.keys(networkArtifacts.apps), [],), + } // Settle WitOracle as first dependency on all Wit/oracle appliances - framework.apps.map(appliance => { - networkSpecs[appliance].baseDeps = merge([], networkSpecs[appliance]?.baseDeps, [ "WitOracle", ]) - }); - + framework.apps.forEach(appliance => { + networkSpecs[appliance].baseDeps = merge([], networkSpecs[appliance]?.baseDeps, ["WitOracle"]) + }) + // Settle network-specific initialization params, if any... networkSpecs.WitOracle.mutables = merge(networkSpecs.WitOracle?.mutables, { - types: [ "address[]", ], values: [ [ reporter, ] ], - }); + types: ["address[]"], values: [[reporter]], + }) networkSpecs.WitRandomness.mutables = merge(networkSpecs.WitRandomness?.mutables, { - types: [ "address", ], values: [ curator ], - }); - + types: ["address"], values: [curator], + }) + // Loop on framework domains ... - for (domain in framework) { + for (const domain in framework) { if (!addresses[network][domain]) addresses[network][domain] = {} - + // Loop on domain artifacts ... for (const index in framework[domain]) { const base = framework[domain][index] const impl = networkArtifacts[domain][base] - + if (impl.indexOf(base) < 0) { console.error(`Mismatching inheriting artifact names on settings/artifacts.js: ${base} constructor values: ", encodeCoreTargetConstructorArgs(targetSpecs).slice(2), 64, "\x1b[90m") } await deployCoreTarget(impl, targetSpecs, networkArtifacts) - // save constructor args + // save constructor args constructorArgs[network][impl] = encodeCoreTargetConstructorArgs(targetSpecs).slice(2) await utils.overwriteJsonFile("./migrations/constructorArgs.json", constructorArgs) } - + if (targetSpecs.isUpgradable) { - if (!utils.isNullAddress(targetBaseAddr) && (await web3.eth.getCode(targetBaseAddr)).length > 3) { // a proxy address with deployed code is found in the addresses file... const proxyImplAddr = await getProxyImplementation(targetSpecs.from, targetBaseAddr) @@ -94,11 +92,9 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { utils.isNullAddress(proxyImplAddr) || selection.includes(base) || process.argv.includes("--upgrade-all") ) { implArtifact.address = targetAddr - } else { implArtifact.address = proxyImplAddr } - } else { targetBaseAddr = await deployCoreBase(targetSpecs, targetAddr) implArtifact.address = targetAddr @@ -107,14 +103,14 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) } baseArtifact.address = targetBaseAddr - + // link implementation artifact to external libs so it can get eventually verified for (const index in targetSpecs?.baseLibs) { const libArtifact = artifacts.require(networkArtifacts.libs[targetSpecs.baseLibs[index]]) implArtifact.link(libArtifact) }; - - // determines whether a new implementation is available, and ask the user to upgrade the proxy if so: + + // determines whether a new implementation is available, and ask the user to upgrade the proxy if so: let upgradeProxy = targetAddr !== await getProxyImplementation(targetSpecs.from, targetBaseAddr) if (upgradeProxy) { const target = await implArtifact.at(targetAddr) @@ -123,28 +119,28 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { const legacy = await implArtifact.at(targetBaseAddr) const legacyVersion = await target.version.call({ from: targetSpecs.from }) const legacyGithubTag = legacyVersion.slice(-7) - + if (targetGithubTag === legacyGithubTag && network !== "develop") { - console.info(` > \x1b[41mPlease, commit your latest changes before upgrading.\x1b[0m`) + console.info(" > \x1b[41mPlease, commit your latest changes before upgrading.\x1b[0m") upgradeProxy = false - } else if (!selection.includes(base) && !process.argv.includes("--upgrade-all") && network !== "develop") { - const targetClass = await target.class.call({ from: targetSpecs.from}) - const legacyClass = await legacy.class.call({ from: targetSpecs.from}) + const targetClass = await target.class.call({ from: targetSpecs.from }) + const legacyClass = await legacy.class.call({ from: targetSpecs.from }) if (legacyClass !== targetClass || legacyVersion !== targetVersion) { - upgradeProxy = ["y", "yes", ].includes((await - utils.prompt(` > Upgrade artifact from ${legacyClass}:${legacyVersion} to \x1b[1;39m${targetClass}:${targetVersion}\x1b[0m? (y/N) `) - )) + upgradeProxy = ["y", "yes"].includes((await utils.prompt( + ` > Upgrade artifact from ${legacyClass}:${legacyVersion} to ` + + `\x1b[1;39m${targetClass}:${targetVersion}\x1b[0m? (y/N) ` + ))) } else { const legacyCodeHash = web3.utils.soliditySha3(await web3.eth.getCode(legacy.address)) const targetCodeHash = web3.utils.soliditySha3(await web3.eth.getCode(target.address)) if (legacyCodeHash !== targetCodeHash) { - upgradeProxy = ["y", "yes", ].includes((await - utils.prompt(` > Upgrade artifact to \x1b[1;39mlatest compilation of v${targetVersion.slice(0, 6)}\x1b[0m? (y/N) `) + upgradeProxy = ["y", "yes"].includes((await utils.prompt( + " > Upgrade artifact to \x1b[1;39mlatest compilation of " + + `v${targetVersion.slice(0, 6)}\x1b[0m? (y/N) `) )) } } - } else { upgradeProxy = selection.includes(base) || process.argv.includes("--upgrade-all") } @@ -152,22 +148,23 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { if (upgradeProxy) { utils.traceHeader(`Upgrading '${base}'...`) await upgradeCoreBase(baseArtifact.address, targetSpecs, targetAddr) - } else { utils.traceHeader(`Upgradable '${base}'`) } - + if (implArtifact.address !== targetAddr) { console.info(" ", "> contract address: \x1b[96m", baseArtifact.address, "\x1b[0m") - console.info(" ", " \x1b[96m -->\x1b[36m", implArtifact.address, "!==", `\x1b[30;43m${targetAddr}\x1b[0m`) - + console.info(" ", + " \x1b[96m -->\x1b[36m", + implArtifact.address, + "!==", `\x1b[30;43m${targetAddr}\x1b[0m` + ) } else { - console.info(" ", "> contract address: \x1b[96m", - baseArtifact.address, "-->\x1b[36m", + console.info(" ", "> contract address: \x1b[96m", + baseArtifact.address, "-->\x1b[36m", implArtifact.address, "\x1b[0m" - ); + ) } - } else { utils.traceHeader(`Immutable '${base}'`) // if (targetCode.length > 3) { @@ -177,22 +174,24 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { // utils.traceData(" > constructor values: ", constructorArgs[network][impl], 64, "\x1b[90m") // } // } - if (selection.includes(impl) || utils.isNullAddress(targetBaseAddr) || (await web3.eth.getCode(targetBaseAddr)).length < 3) { + if ( + selection.includes(impl) || utils.isNullAddress(targetBaseAddr) || + (await web3.eth.getCode(targetBaseAddr)).length < 3 + ) { baseArtifact.address = targetAddr implArtifact.address = targetAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { console.info(" ", "> contract address: \x1b[36m", targetBaseAddr, "\x1b[0m==>", `\x1b[96m${targetAddr}\x1b[0m`) } else { console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") - } - + } } else { baseArtifact.address = targetBaseAddr implArtifact.address = targetBaseAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { console.info(" ", "> contract address: \x1b[96m", targetBaseAddr, "\x1b[0m!==", `\x1b[41m${targetAddr}\x1b[0m`) } else { - console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") + console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") } } addresses[network][domain][base] = baseArtifact.address @@ -209,7 +208,6 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { const nextCoreVersion = await nextCore.version.call({ from }) if (implArtifact.address !== targetAddr && coreVersion !== nextCoreVersion) { console.info(" ", "> contract version: \x1b[1;39m", coreVersion, "\x1b[0m!==", `\x1b[33m${nextCoreVersion}\x1b[0m`) - } else { console.info(" ", "> contract version: \x1b[1;39m", coreVersion, "\x1b[0m") } @@ -221,21 +219,21 @@ module.exports = async function (_, network, [, from, reporter, curator, ]) { } async function deployCoreBase (targetSpecs, targetAddr) { const deployer = await WitnetDeployer.deployed() - const proxyInitArgs = targetSpecs.mutables + const proxyInitArgs = targetSpecs.mutables const proxySalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") const proxyAddr = await deployer.determineProxyAddr.call(proxySalt, { from: targetSpecs.from }) - if ((await web3.eth.getCode(proxyAddr)).length < 3) { + if ((await web3.eth.getCode(proxyAddr)).length < 3) { // if no contract is yet deployed on the expected address // proxify to last deployed implementation, and initialize it: - utils.traceHeader(`Deploying new 'WitnetProxy'...`) + utils.traceHeader("Deploying new 'WitnetProxy'...") const initdata = proxyInitArgs ? web3.eth.abi.encodeParameters(proxyInitArgs.types, proxyInitArgs.values) : "0x" if (initdata.length > 2) { console.info(" ", "> initdata types: \x1b[90m", proxyInitArgs.types, "\x1b[0m") utils.traceData(" > initdata values: ", initdata.slice(2), 64, "\x1b[90m") } - utils.traceTx(await deployer.proxify(proxySalt, targetAddr, initdata, { from: targetSpecs.from })) + utils.traceTx(await deployer.proxify(proxySalt, targetAddr, initdata, { from: targetSpecs.from })) } - if ((await web3.eth.getCode(proxyAddr)).length < 3) { + if ((await web3.eth.getCode(proxyAddr)).length < 3) { console.error(`Error: WitnetProxy was not deployed on the expected address: ${proxyAddr}`) process.exit(1) } @@ -243,7 +241,10 @@ async function deployCoreBase (targetSpecs, targetAddr) { } async function upgradeCoreBase (proxyAddr, targetSpecs, targetAddr) { - const initdata = targetSpecs.mutables?.types ? web3.eth.abi.encodeParameters(targetSpecs.mutables.types, targetSpecs.mutables.values) : "0x" + const initdata = (targetSpecs.mutables?.types + ? web3.eth.abi.encodeParameters(targetSpecs.mutables.types, targetSpecs.mutables.values) + : "0x" + ) if (initdata.length > 2) { console.info(" ", "> initdata types: \x1b[90m", targetSpecs.mutables.types, "\x1b[0m") utils.traceData(" > initdata values: ", initdata.slice(2), 64, "\x1b[90m") @@ -253,14 +254,13 @@ async function upgradeCoreBase (proxyAddr, targetSpecs, targetAddr) { return proxyAddr } - async function deployCoreTarget (target, targetSpecs, networkArtifacts) { const deployer = await WitnetDeployer.deployed() console.log(target, targetSpecs) const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") const targetAddr = await deployer.determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) - utils.traceTx(await deployer.deploy(targetInitCode, targetSalt, { from: targetSpecs.from })) + utils.traceTx(await deployer.deploy(targetInitCode, targetSalt, { from: targetSpecs.from })) if ((await web3.eth.getCode(targetAddr)).length <= 3) { console.error(`Error: Contract ${target} was not deployed on the expected address: ${targetAddr}`) process.exit(1) @@ -268,7 +268,7 @@ async function deployCoreTarget (target, targetSpecs, networkArtifacts) { return targetAddr } -async function determineCoreTargetAddr(target, targetSpecs, networkArtifacts) { +async function determineCoreTargetAddr (target, targetSpecs, networkArtifacts) { const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") return (await WitnetDeployer.deployed()).determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) @@ -280,14 +280,14 @@ async function determineProxyAddr (from, nonce) { return await deployer.determineProxyAddr.call(salt, { from }) } -function encodeCoreTargetConstructorArgs(targetSpecs) { +function encodeCoreTargetConstructorArgs (targetSpecs) { return web3.eth.abi.encodeParameters(targetSpecs.constructorArgs.types, targetSpecs.constructorArgs.values) } -function encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) { +function encodeCoreTargetInitCode (target, targetSpecs, networkArtifacts) { // extract bytecode from target's artifact, replacing lib references to actual addresses const targetCode = linkBaseLibs( - artifacts.require(target).toJSON().bytecode, + artifacts.require(target).toJSON().bytecode, targetSpecs.baseLibs, networkArtifacts ) @@ -297,7 +297,7 @@ function encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) { `Error: artifact ${target} depends on library`, targetCode.substring(targetCode.indexOf("__"), 42), "which is not known or has not been deployed." - ); + ) process.exit(1) } const targetConstructorArgsEncoded = encodeCoreTargetConstructorArgs(targetSpecs) @@ -321,28 +321,28 @@ function linkBaseLibs (bytecode, baseLibs, networkArtifacts) { return bytecode } -async function unfoldCoreTargetSpecs(domain, target, targetBase, from, network, networkArtifacts, networkSpecs, ancestors) { - if (!ancestors) ancestors = []; +async function unfoldCoreTargetSpecs (domain, target, targetBase, from, network, networkArtifacts, networkSpecs, ancestors) { + if (!ancestors) ancestors = [] else if (ancestors.includes(targetBase)) { - console.error(`Core dependencies loop detected: '${targetBase}' in ${ancestors}`, ) + console.error(`Core dependencies loop detected: '${targetBase}' in ${ancestors}`,) process.exit(1) } const specs = { baseDeps: [], baseLibs: [], - from, - mutables: { types: [], values: [], }, - immutables: { types: [], values: [], }, - intrinsics: { types: [], values: [], }, + from, + mutables: { types: [], values: [] }, + immutables: { types: [], values: [] }, + intrinsics: { types: [], values: [] }, isUpgradable: utils.isUpgradableArtifact(target), vanity: networkSpecs[targetBase]?.vanity || 0, - }; + } // Iterate inheritance tree from `base` to `impl` as to settle deployment specs target.split(/(?=[A-Z])/).reduce((split, part) => { split = split + part if (split.indexOf(targetBase) > -1) { - specs.baseDeps = merge(specs.baseDeps, networkSpecs[split]?.baseDeps); - specs.baseLibs = merge(specs.baseLibs, networkSpecs[split]?.baseLibs); + specs.baseDeps = merge(specs.baseDeps, networkSpecs[split]?.baseDeps) + specs.baseLibs = merge(specs.baseLibs, networkSpecs[split]?.baseLibs) if (networkSpecs[split]?.from && !utils.isDryRun(network)) { specs.from = networkSpecs[split].from } @@ -350,42 +350,47 @@ async function unfoldCoreTargetSpecs(domain, target, targetBase, from, network, specs.vanity = networkSpecs[split].vanity } if (networkSpecs[split]?.immutables) { - specs.immutables.types.push(...networkSpecs[split]?.immutables.types); - specs.immutables.values.push(...networkSpecs[split]?.immutables.values); + specs.immutables.types.push(...networkSpecs[split]?.immutables.types) + specs.immutables.values.push(...networkSpecs[split]?.immutables.values) } if (networkSpecs[split]?.mutables) { - specs.mutables.types.push(...networkSpecs[split]?.mutables.types); - specs.mutables.values.push(...networkSpecs[split]?.mutables.values); + specs.mutables.types.push(...networkSpecs[split]?.mutables.types) + specs.mutables.values.push(...networkSpecs[split]?.mutables.values) } } return split }) if (specs.baseDeps.length > 0) { // Iterate specs.baseDeps as to add deterministic addresses as first intrinsical constructor args - specs.intrinsics.types.push(...new Array(specs.baseDeps.length).fill("address")); + specs.intrinsics.types.push(...new Array(specs.baseDeps.length).fill("address")) for (const index in specs.baseDeps) { const depsBase = specs.baseDeps[index] const depsImpl = networkArtifacts.core[depsBase] if (utils.isUpgradableArtifact(depsImpl)) { - const depsVanity = networkSpecs[depsBase]?.vanity || Object.keys(networkArtifacts[domain]).indexOf(depsBase); - const depsProxySalt = depsVanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(depsVanity), 32).toString("hex") : "0x0" - specs.intrinsics.values.push(await determineProxyAddr(specs.from, depsProxySalt)); - + const depsVanity = networkSpecs[depsBase]?.vanity || Object.keys(networkArtifacts[domain]).indexOf(depsBase) + const depsProxySalt = (depsVanity + ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(depsVanity), 32).toString("hex") + : "0x0" + ) + specs.intrinsics.values.push(await determineProxyAddr(specs.from, depsProxySalt)) } else { - const depsImplSpecs = await unfoldCoreTargetSpecs(domain, depsImpl, depsBase, specs.from, network, networkArtifacts, networkSpecs, [...ancestors, targetBase]) + const depsImplSpecs = await unfoldCoreTargetSpecs( + domain, depsImpl, depsBase, specs.from, network, networkArtifacts, networkSpecs, + [...ancestors, targetBase] + ) const depsImplAddr = await determineCoreTargetAddr(depsImpl, depsImplSpecs, networkArtifacts) - specs.intrinsics.values.push(depsImplAddr); + specs.intrinsics.values.push(depsImplAddr) } } } if (specs.isUpgradable) { // Add version tag to intrinsical constructor args if target artifact is expected to be upgradable - specs.intrinsics.types.push("bytes32"); - specs.intrinsics.values.push(utils.fromAscii(version)); + specs.intrinsics.types.push("bytes32") + specs.intrinsics.values.push(utils.fromAscii(version)) if (target.indexOf("Trustable") < 0) { // Add _upgradable constructor args on non-trustable (ergo trustless) but yet upgradable targets - specs.intrinsics.types.push("bool"); - specs.intrinsics.values.push(true); + specs.intrinsics.types.push("bool") + specs.intrinsics.values.push(true) } } specs.constructorArgs = { @@ -393,12 +398,12 @@ async function unfoldCoreTargetSpecs(domain, target, targetBase, from, network, values: specs?.immutables?.values || [], } if (specs?.intrinsics) { - specs.constructorArgs.types.push(...specs.intrinsics.types); - specs.constructorArgs.values.push(...specs.intrinsics.values); + specs.constructorArgs.types.push(...specs.intrinsics.types) + specs.constructorArgs.values.push(...specs.intrinsics.values) } if (specs?.mutables && !specs.isUpgradable) { - specs.constructorArgs.types.push(...specs.mutables.types); - specs.constructorArgs.values.push(...specs.mutables.values); + specs.constructorArgs.types.push(...specs.mutables.types) + specs.constructorArgs.values.push(...specs.mutables.values) } return specs } diff --git a/settings/artifacts.js b/settings/artifacts.js index 084def56..633148bc 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -19,47 +19,47 @@ module.exports = { }, "polygon:amoy": { core: { - WitOracleRequestFactory: "WitOracleRequestFactoryDefaultV21" - } + WitOracleRequestFactory: "WitOracleRequestFactoryDefaultV21", + }, }, base: { - core: { WitOracle: "WitOracleTrustableOvm2", }, + core: { WitOracle: "WitOracleTrustableOvm2" }, }, boba: { - core: { WitOracle: "WitOracleTrustableOvm2", }, + core: { WitOracle: "WitOracleTrustableOvm2" }, }, "conflux:core": { WitnetDeployer: "WitnetDeployerConfluxCore", - core: { - WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore", + core: { + WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore", }, }, mantle: { - core: { WitOracle: "WitOracleTrustableOvm2", }, + core: { WitOracle: "WitOracleTrustableOvm2" }, }, meter: { WitnetDeployer: "WitnetDeployerMeter", - core: { WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore", }, + core: { WitOracleRequestFactory: "WitOracleRequestFactoryUpgradableConfluxCore" }, }, optimism: { - core: { WitOracle: "WitOracleTrustableOvm2", }, + core: { WitOracle: "WitOracleTrustableOvm2" }, }, "okx:x1": { - core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256" }, }, "polygon:zkevm": { - core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256" }, }, reef: { - core: { WitOracle: "WitOracleTrustableReef", }, + core: { WitOracle: "WitOracleTrustableReef" }, }, scroll: { - core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256", }, + core: { WitOracleRadonRegistry: "WitOracleRadonRegistryUpgradableNoSha256" }, }, "syscoin:rollux": { - core: { WitOracle: "WitOracleTrustableOvm2", }, + core: { WitOracle: "WitOracleTrustableOvm2" }, }, ten: { - core: { WitOracle: "WitOracleTrustableObscuro", }, + core: { WitOracle: "WitOracleTrustableObscuro" }, }, } diff --git a/settings/index.js b/settings/index.js index 6d1920c1..9e0e239d 100644 --- a/settings/index.js +++ b/settings/index.js @@ -7,18 +7,18 @@ const utils = require("../src/utils") module.exports = { getArtifacts: (network) => { - let res = artifacts.default; + let res = artifacts.default utils.getNetworkTagsFromString(network).forEach(net => { res = merge(res, artifacts[net]) - }); - return res; + }) + return res }, getCompilers: (network) => { - let res = solidity.default; + let res = solidity.default utils.getNetworkTagsFromString(network).forEach(net => { res = merge(res, solidity[net]) - }); - return res; + }) + return res }, getNetworks: () => { return Object.fromEntries(Object.entries(networks) @@ -36,11 +36,11 @@ module.exports = { ) }, getSpecs: (network) => { - let res = specs.default; + let res = specs.default utils.getNetworkTagsFromString(network).forEach(net => { res = merge(res, specs[net]) - }); - return res; + }) + return res }, artifacts, solidity, diff --git a/settings/specs.js b/settings/specs.js index 1e3225db..c5c114bc 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -1,29 +1,29 @@ module.exports = { default: { WitOracle: { - baseDeps: [ - "WitOracleRadonRegistry", + baseDeps: [ + "WitOracleRadonRegistry", ], - baseLibs: [ + baseLibs: [ "WitOracleDataLib", "WitOracleResultErrorsLib", ], immutables: { - types: [ "(uint32, uint32, uint32, uint32)", ], + types: ["(uint32, uint32, uint32, uint32)"], values: [ [ /* _reportResultGasBase */ 58282, /* _reportResultWithCallbackGasBase */ 65273, /* _reportResultWithCallbackRevertGasBase */ 69546, /* _sstoreFromZeroGas */ 20000, - ] + ], ], }, vanity: 13710368043, // 0x77703aE126B971c9946d562F41Dd47071dA00777 }, WitOracleTrustless: { immutables: { - types: ["uint256", "uint256", ], + types: ["uint256", "uint256"], values: [ /* _evmQueryAwaitingBlocks */ 16, /* _evmQueryReportingStake */ "1000000000000000000", @@ -31,14 +31,14 @@ module.exports = { }, }, WitOracleRadonRegistry: { - baseLibs: [ - "WitOracleRadonEncodingLib", + baseLibs: [ + "WitOracleRadonEncodingLib", ], vanity: 6765579443, // 0x000B61Fe075F545fd37767f40391658275900000 }, WitOracleRequestFactory: { - baseDeps: [ - "WitOracle", + baseDeps: [ + "WitOracle", ], vanity: 1240014136, // 0x000DB36997AF1F02209A6F995883B9B699900000 }, diff --git a/src/utils.js b/src/utils.js index e7b366c5..b0319535 100644 --- a/src/utils.js +++ b/src/utils.js @@ -38,7 +38,7 @@ function fromAscii (str) { return "0x" + arr1.join("") } -function getNetworkAppsArtifactAddress(network, addresses, artifact) { +function getNetworkAppsArtifactAddress (network, addresses, artifact) { const tags = getNetworkTagsFromString(network) for (const index in tags) { const network = tags[index] @@ -49,7 +49,7 @@ function getNetworkAppsArtifactAddress(network, addresses, artifact) { return addresses?.default?.apps[artifact] ?? "" } -function getNetworkBaseArtifactAddress(network, addresses, artifact) { +function getNetworkBaseArtifactAddress (network, addresses, artifact) { const tags = getNetworkTagsFromString(network) for (const index in tags) { const network = tags[index] @@ -60,7 +60,7 @@ function getNetworkBaseArtifactAddress(network, addresses, artifact) { return addresses?.default[artifact] ?? "" } -function getNetworkArtifactAddress(network, domain, addresses, artifact) { +function getNetworkArtifactAddress (network, domain, addresses, artifact) { const tags = getNetworkTagsFromString(network) for (const index in tags) { const network = tags[index] @@ -71,7 +71,7 @@ function getNetworkArtifactAddress(network, domain, addresses, artifact) { return addresses?.default?.core[artifact] ?? "" } -function getNetworkCoreArtifactAddress(network, addresses, artifact) { +function getNetworkCoreArtifactAddress (network, addresses, artifact) { const tags = getNetworkTagsFromString(network) for (const index in tags) { const network = tags[index] @@ -82,7 +82,7 @@ function getNetworkCoreArtifactAddress(network, addresses, artifact) { return addresses?.default?.core[artifact] ?? "" } -function getNetworkLibsArtifactAddress(network, addresses, artifact) { +function getNetworkLibsArtifactAddress (network, addresses, artifact) { const tags = getNetworkTagsFromString(network) for (const index in tags) { const network = tags[index] @@ -90,14 +90,14 @@ function getNetworkLibsArtifactAddress(network, addresses, artifact) { return addresses[network].libs[artifact] } } - return addresses?.default?.libs?.[artifact] ?? "" + return addresses?.default?.libs?.[artifact] ?? "" } function getNetworkTagsFromString (network) { network = network ? network.toLowerCase() : "development" const tags = [] const parts = network.split(":") - for (ix = 0; ix < parts.length; ix ++) { + for (let ix = 0; ix < parts.length; ix++) { tags.push(parts.slice(0, ix + 1).join(":")) } return tags @@ -146,7 +146,7 @@ function getWitnetArtifactsFromArgs () { } return argv }) - if (selection.length == 0) { + if (selection.length === 0) { process.argv[2]?.split(" ").map((argv, index, args) => { if (argv === "--artifacts") { selection = args[index + 1].split(",") @@ -167,10 +167,10 @@ function isNullAddress (addr) { addr === "0x0000000000000000000000000000000000000000" } -function isUpgradableArtifact(impl) { +function isUpgradableArtifact (impl) { return ( impl.indexOf("Upgradable") > -1 || impl.indexOf("Trustable") > -1 - ); + ) } function padLeft (str, char, size) { @@ -215,14 +215,14 @@ async function overwriteJsonFile (filename, extra) { lockfile.unlockSync(filename) } -function traceData(header, data, width, color) { +function traceData (header, data, width, color) { process.stdout.write(header) - if (color) process.stdout.write(color); - for (let ix = 0; ix < data.length / width; ix ++) { + if (color) process.stdout.write(color) + for (let ix = 0; ix < data.length / width; ix++) { if (ix > 0) process.stdout.write(" ".repeat(header.length)) process.stdout.write(data.slice(width * ix, width * (ix + 1))) process.stdout.write("\n") - } + } if (color) process.stdout.write("\x1b[0m") } @@ -235,12 +235,14 @@ function traceHeader (header) { function traceTx (tx) { console.info(" ", "> EVM tx sender: \x1b[93m", tx.receipt.from, "\x1b[0m") console.info(" ", "> EVM tx hash: \x1b[33m", tx.receipt.transactionHash.slice(2), "\x1b[0m") - console.info(" ", "> EVM tx gas used: ", `\x1b[33m${tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}\x1b[0m`) + console.info(" ", "> EVM tx gas used: ", + `\x1b[33m${tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")}\x1b[0m` + ) if (tx.receipt?.effectiveGasPrice) { console.info(" ", "> EVM tx gas price: ", `\x1b[33m${tx.receipt.effectiveGasPrice / 10 ** 9}`, "gwei\x1b[0m") console.info(" ", "> EVM tx total cost: ", `\x1b[33m${parseFloat( - (BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice)) - / BigInt(10 ** 18) + (BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice)) / + BigInt(10 ** 18) ).toString()}`, "ETH\x1b[0m" ) From bd1a73a4b8e54034a5d1459d435c4dd22e62a7d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:00:47 +0200 Subject: [PATCH 19/24] refactor: Upgradable --> WitOracle*Upgradable* --- contracts/apps/WitPriceFeedsUpgradable.sol | 49 +++++-------------- contracts/core/WitnetUpgradableBase.sol | 26 +++++++++- .../core/base/WitOracleBaseTrustable.sol | 43 +--------------- .../core/base/WitOracleBaseUpgradable.sol | 49 +++---------------- .../WitOracleRadonRegistryBaseUpgradable.sol | 32 ++---------- .../core/base/WitOracleRequestFactoryBase.sol | 2 + .../WitOracleRequestFactoryBaseUpgradable.sol | 46 +++-------------- contracts/patterns/Upgradeable.sol | 1 + 8 files changed, 60 insertions(+), 188 deletions(-) diff --git a/contracts/apps/WitPriceFeedsUpgradable.sol b/contracts/apps/WitPriceFeedsUpgradable.sol index 285b72d6..1dc01d35 100644 --- a/contracts/apps/WitPriceFeedsUpgradable.sol +++ b/contracts/apps/WitPriceFeedsUpgradable.sol @@ -91,53 +91,28 @@ contract WitPriceFeedsUpgradable // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - public - override - { - address _owner = owner(); - if (_owner == address(0)) { - // set owner as specified by first argument in _initData - _owner = abi.decode(_initData, (address)); - _transferOwnership(_owner); - // settle default Radon SLA upon first initialization + function __initializeUpgradableData(bytes memory _initData) virtual override internal { + if (__proxiable().codehash == bytes32(0)) { __defaultRadonSLA = Witnet.RadonSLA({ witNumWitnesses: 10, - witUnitaryReward: 2 * 10 ** 8, // 0.2 $WIT + witUnitaryReward: 2 * 10 ** 8, maxTallyResultSize: 16 }); // settle default base fee overhead percentage __baseFeeOverheadPercentage = 10; } else { - // only the owner can initialize: - _require( - msg.sender == _owner, - "not the owner" - ); + // otherwise, store beacon read from _initData, if any + if (_initData.length > 0) { + (uint16 _baseFeeOverheadPercentage, Witnet.RadonSLA memory _defaultRadonSLA) = abi.decode( + _initData, (uint16, Witnet.RadonSLA) + ); + __baseFeeOverheadPercentage = _baseFeeOverheadPercentage; + __defaultRadonSLA = _defaultRadonSLA; + } } - - if ( - __proxiable().codehash != bytes32(0) - && __proxiable().codehash == codehash() - ) { - _revert("already upgraded"); - } - __proxiable().codehash = codehash(); - - _require( - address(witOracle).code.length > 0, - "inexistent oracle" - ); - _require( - witOracle.specs() == ( - type(IWitAppliance).interfaceId - ^ type(IWitOracle).interfaceId - ), "uncompliant oracle" - ); - emit Upgraded(_owner, base(), codehash(), version()); } + /// Tells whether provided address could eventually upgrade the contract. function isUpgradableFrom(address _from) external view override returns (bool) { address _owner = owner(); diff --git a/contracts/core/WitnetUpgradableBase.sol b/contracts/core/WitnetUpgradableBase.sol index df162530..765821ab 100644 --- a/contracts/core/WitnetUpgradableBase.sol +++ b/contracts/core/WitnetUpgradableBase.sol @@ -56,7 +56,31 @@ abstract contract WitnetUpgradableBase // ================================================================================================================ - // --- Overrides 'Upgradeable' -------------------------------------------------------------------------------------- + // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ + + /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. + /// @dev Must fail when trying to upgrade to same logic contract more than once. + function initialize(bytes memory _initData) virtual override public { + address _owner = owner(); + if (_owner == address(0)) { + // upon first upgrade, extract decode owner address from _intidata + (_owner, _initData) = abi.decode(_initData, (address, bytes)); + _transferOwnership(_owner); + + } else { + // only owner can initialize an existing proxy: + require(msg.sender == _owner, "not the owner"); + } + __initializeUpgradableData(_initData); + if ( + __proxiable().codehash != bytes32(0) + && __proxiable().codehash == codehash() + ) { + revert("already initialized codehash"); + } + __proxiable().codehash = codehash(); + emit Upgraded(owner(), base(), codehash(), version()); + } /// Tells whether provided address could eventually upgrade the contract. function isUpgradableFrom(address _from) external view virtual override returns (bool) { diff --git a/contracts/core/base/WitOracleBaseTrustable.sol b/contracts/core/base/WitOracleBaseTrustable.sol index 95c4e868..cb17954b 100644 --- a/contracts/core/base/WitOracleBaseTrustable.sol +++ b/contracts/core/base/WitOracleBaseTrustable.sol @@ -44,47 +44,8 @@ abstract contract WitOracleBaseTrustable // --- Upgradeable ------------------------------------------------------------------------------------------------ /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) virtual override public { - address _owner = owner(); - address[] memory _newReporters; - - if (_owner == address(0)) { - // get owner (and reporters) from _initData - bytes memory _newReportersRaw; - (_owner, _newReportersRaw) = abi.decode(_initData, (address, bytes)); - _transferOwnership(_owner); - _newReporters = abi.decode(_newReportersRaw, (address[])); - } else { - // only owner can initialize: - _require( - msg.sender == _owner, - "not the owner" - ); - // get reporters from _initData - _newReporters = abi.decode(_initData, (address[])); - } - - if ( - __proxiable().codehash != bytes32(0) - && __proxiable().codehash == codehash() - ) { - _revert("already upgraded"); - } - __proxiable().codehash = codehash(); - - _require(address(registry).code.length > 0, "inexistent registry"); - _require( - registry.specs() == ( - type(IWitAppliance).interfaceId - ^ type(IWitOracleRadonRegistry).interfaceId - ), "uncompliant registry" - ); - - // Set reporters, if any - WitOracleDataLib.setReporters(_newReporters); - - emit Upgraded(_owner, base(), codehash(), version()); + function __initializeUpgradableData(bytes memory _initData) virtual override internal { + WitOracleDataLib.setReporters(abi.decode(_initData, (address[]))); } diff --git a/contracts/core/base/WitOracleBaseUpgradable.sol b/contracts/core/base/WitOracleBaseUpgradable.sol index 19ed3ada..f33cdfba 100644 --- a/contracts/core/base/WitOracleBaseUpgradable.sol +++ b/contracts/core/base/WitOracleBaseUpgradable.sol @@ -31,17 +31,9 @@ abstract contract WitOracleBaseUpgradable // ---Upgradeable ------------------------------------------------------------------------------------------------- /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) virtual override public { - address _owner = owner(); - - if (_owner == address(0)) { - // initializing for the first time... - - // transfer ownership to first initializer - _transferOwnership(_owner); - - // save into storage genesis beacon + function __initializeUpgradableData(bytes memory _initData) virtual override internal { + if (__proxiable().codehash == bytes32(0)) { + // upon first initialization, store genesis beacon WitOracleDataLib.data().beacons[ Witnet.WIT_2_GENESIS_BEACON_INDEX ] = Witnet.Beacon({ @@ -57,37 +49,12 @@ abstract contract WitOracleBaseUpgradable Witnet.WIT_2_GENESIS_BEACON_NEXT_COMMITTEE_AGG_PUBKEY_3 ] }); - } else { - // only owner can initialize a new upgrade: - _require( - msg.sender == _owner, - "not the owner" - ); + // otherwise, store beacon read from _initData, if any + if (_initData.length > 0) { + Witnet.Beacon memory _initBeacon = abi.decode(_initData, (Witnet.Beacon)); + WitOracleDataLib.data().beacons[_initBeacon.index] = _initBeacon; + } } - - if ( - __proxiable().codehash != bytes32(0) - && __proxiable().codehash == codehash() - ) { - _revert("already upgraded"); - } - __proxiable().codehash = codehash(); - - _require(address(registry).code.length > 0, "inexistent registry"); - _require( - registry.specs() == ( - type(IWitAppliance).interfaceId - ^ type(IWitOracleRadonRegistry).interfaceId - ), "uncompliant registry" - ); - - // Settle given beacon, if any: - if (_initData.length > 0) { - Witnet.Beacon memory _beacon = abi.decode(_initData, (Witnet.Beacon)); - WitOracleDataLib.data().beacons[_beacon.index] = _beacon; - } - - emit Upgraded(_owner, base(), codehash(), version()); } } diff --git a/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol b/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol index 98555b2e..d328c716 100644 --- a/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol +++ b/contracts/core/base/WitOracleRadonRegistryBaseUpgradable.sol @@ -27,37 +27,11 @@ abstract contract WitOracleRadonRegistryBaseUpgradable ) {} - // ================================================================================================================ - // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- - /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - public - override - { - address _owner = __bytecodes().owner; - if (_owner == address(0)) { - // set owner from the one specified in _initData - _owner = abi.decode(_initData, (address)); - __bytecodes().owner = _owner; - } else { - // only owner can initialize: - if (msg.sender != _owner) { - _revert("not the owner"); - } - } - - if (__bytecodes().base != address(0)) { - // current implementation cannot be initialized more than once: - if(__bytecodes().base == base()) { - _revert("already initialized"); - } - } - __bytecodes().base = base(); + // ================================================================================================================ + // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ - emit Upgraded(_owner, base(), codehash(), version()); - } + function __initializeUpgradableData(bytes memory) virtual override internal {} // ================================================================================================================ // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- diff --git a/contracts/core/base/WitOracleRequestFactoryBase.sol b/contracts/core/base/WitOracleRequestFactoryBase.sol index 116f4b17..a44312ce 100644 --- a/contracts/core/base/WitOracleRequestFactoryBase.sol +++ b/contracts/core/base/WitOracleRequestFactoryBase.sol @@ -117,8 +117,10 @@ abstract contract WitOracleRequestFactoryBase function class() virtual override public view returns (string memory) { if (__witOracleRequest().radHash != bytes32(0)) { return type(WitOracleRequest).name; + } else if (__witOracleRequestTemplate().tallyReduceHash != bytes16(0)) { return type(WitOracleRequestTemplate).name; + } else { return type(WitOracleRequestFactory).name; } diff --git a/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol b/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol index f836a9b5..31856d82 100644 --- a/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol +++ b/contracts/core/base/WitOracleRequestFactoryBaseUpgradable.sol @@ -63,51 +63,19 @@ abstract contract WitOracleRequestFactoryBaseUpgradable return WitnetUpgradableBase.version(); } + // ================================================================================================================ - // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- + // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. - /// @dev Must fail when trying to upgrade to same logic contract more than once. - function initialize(bytes memory _initData) - virtual override public - onlyDelegateCalls - { - _require(!initialized(), "already initialized"); - - // Trying to intialize an upgradable factory instance... - { - address _owner = __witOracleRequestFactory().owner; - if (_owner == address(0)) { - // Upon first initialization of an upgradable factory, - // set owner from the one specified in _initData - _owner = abi.decode(_initData, (address)); - __witOracleRequestFactory().owner = _owner; - } else { - // only the owner can upgrade an upgradable factory - _require( - msg.sender == _owner, - "not the owner" - ); - } - - if (__proxiable().proxy == address(0)) { - // first initialization of the proxy - __proxiable().proxy = address(this); - } - __proxiable().implementation = base(); - - _require(address(witOracle).code.length > 0, "inexistent request board"); - _require( - witOracle.specs() == ( - type(IWitAppliance).interfaceId - ^ type(IWitOracle).interfaceId - ), "uncompliant request board" - ); - - emit Upgraded(msg.sender, base(), codehash(), version()); + function __initializeUpgradableData(bytes memory) virtual override internal { + if (__proxiable().codehash == bytes32(0)) { + __proxiable().proxy = address(this); } + __proxiable().implementation = base(); } + // ================================================================================================================ // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- diff --git a/contracts/patterns/Upgradeable.sol b/contracts/patterns/Upgradeable.sol index 20eec288..8e741f20 100644 --- a/contracts/patterns/Upgradeable.sol +++ b/contracts/patterns/Upgradeable.sol @@ -65,6 +65,7 @@ abstract contract Upgradeable is Initializable, Proxiable { /// @notice Re-initialize contract's storage context upon a new upgrade from a proxy. /// @dev Must fail when trying to upgrade to same logic contract more than once. function initialize(bytes memory) virtual external; + function __initializeUpgradableData(bytes memory _initData) virtual internal; /// @dev Retrieves human-redable named version of current implementation. function version() virtual public view returns (string memory); From 39cf7dc8f010d315468d3146318a2b72818ec89f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:03:33 +0200 Subject: [PATCH 20/24] chore: move deps compliancy to base constructors --- contracts/apps/WitPriceFeedsUpgradable.sol | 10 ++++++++++ contracts/core/base/WitOracleBase.sol | 12 ++++++++++-- contracts/core/base/WitOracleRequestFactoryBase.sol | 10 ++++++++++ .../core/trustable/WitOracleTrustableDefault.sol | 2 -- .../core/trustable/WitOracleTrustableObscuro.sol | 2 -- contracts/core/trustable/WitOracleTrustableOvm2.sol | 2 -- contracts/core/trustable/WitOracleTrustableReef.sol | 2 -- .../core/trustless/WitOracleTrustlessDefaultV21.sol | 11 +---------- .../WitOracleTrustlessUpgradableDefault.sol | 4 +--- 9 files changed, 32 insertions(+), 23 deletions(-) diff --git a/contracts/apps/WitPriceFeedsUpgradable.sol b/contracts/apps/WitPriceFeedsUpgradable.sol index 1dc01d35..739f943c 100644 --- a/contracts/apps/WitPriceFeedsUpgradable.sol +++ b/contracts/apps/WitPriceFeedsUpgradable.sol @@ -53,6 +53,16 @@ contract WitPriceFeedsUpgradable "io.witnet.proxiable.feeds.price" ) { + _require( + address(_witOracle).code.length > 0, + "inexistent oracle" + ); + _require( + _witOracle.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ), "uncompliant oracle" + ); witOracle = _witOracle; } diff --git a/contracts/core/base/WitOracleBase.sol b/contracts/core/base/WitOracleBase.sol index 685ed710..88e7a732 100644 --- a/contracts/core/base/WitOracleBase.sol +++ b/contracts/core/base/WitOracleBase.sol @@ -93,11 +93,19 @@ abstract contract WitOracleBase constructor( EvmImmutables memory _immutables, WitOracleRadonRegistry _registry - // WitOracleRequestFactory _factory ) { + _require( + address(_registry).code.length > 0, + "inexistent registry" + ); + _require( + _registry.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracleRadonRegistry).interfaceId + ), "uncompliant registry" + ); registry = _registry; - // factory = _factory; __reportResultGasBase = _immutables.reportResultGasBase; __reportResultWithCallbackGasBase = _immutables.reportResultWithCallbackGasBase; diff --git a/contracts/core/base/WitOracleRequestFactoryBase.sol b/contracts/core/base/WitOracleRequestFactoryBase.sol index a44312ce..78123d9a 100644 --- a/contracts/core/base/WitOracleRequestFactoryBase.sol +++ b/contracts/core/base/WitOracleRequestFactoryBase.sol @@ -48,6 +48,16 @@ abstract contract WitOracleRequestFactoryBase } constructor(WitOracle _witOracle) { + _require( + address(_witOracle).code.length > 0, + "inexistent oracle" + ); + _require( + _witOracle.specs() == ( + type(IWitAppliance).interfaceId + ^ type(IWitOracle).interfaceId + ), "uncompliant WitOracle" + ); witOracle = _witOracle; } diff --git a/contracts/core/trustable/WitOracleTrustableDefault.sol b/contracts/core/trustable/WitOracleTrustableDefault.sol index 8fb08ff8..d015effa 100644 --- a/contracts/core/trustable/WitOracleTrustableDefault.sol +++ b/contracts/core/trustable/WitOracleTrustableDefault.sol @@ -20,13 +20,11 @@ contract WitOracleTrustableDefault constructor( EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - // WitOracleRequestFactory _factory, bytes32 _versionTag ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustable(_versionTag) {} diff --git a/contracts/core/trustable/WitOracleTrustableObscuro.sol b/contracts/core/trustable/WitOracleTrustableObscuro.sol index cdb506b8..fc9fee61 100644 --- a/contracts/core/trustable/WitOracleTrustableObscuro.sol +++ b/contracts/core/trustable/WitOracleTrustableObscuro.sol @@ -20,13 +20,11 @@ contract WitOracleTrustableObscuro constructor( EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - // WitOracleRequestFactory _factory, bytes32 _versionTag ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustable(_versionTag) {} diff --git a/contracts/core/trustable/WitOracleTrustableOvm2.sol b/contracts/core/trustable/WitOracleTrustableOvm2.sol index 76bdaa71..d52e930a 100644 --- a/contracts/core/trustable/WitOracleTrustableOvm2.sol +++ b/contracts/core/trustable/WitOracleTrustableOvm2.sol @@ -25,13 +25,11 @@ contract WitOracleTrustableOvm2 constructor( EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - // WitOracleRequestFactory _factory, bytes32 _versionTag ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustable(_versionTag) { diff --git a/contracts/core/trustable/WitOracleTrustableReef.sol b/contracts/core/trustable/WitOracleTrustableReef.sol index def29053..d0b2aa43 100644 --- a/contracts/core/trustable/WitOracleTrustableReef.sol +++ b/contracts/core/trustable/WitOracleTrustableReef.sol @@ -22,13 +22,11 @@ contract WitOracleTrustableReef constructor( EvmImmutables memory _immutables, WitOracleRadonRegistry _registry, - // WitOracleRequestFactory _factory, bytes32 _versionTag ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustable(_versionTag) {} diff --git a/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol b/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol index 2ae1edfe..42c96ef6 100644 --- a/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol +++ b/contracts/core/trustless/WitOracleTrustlessDefaultV21.sol @@ -22,23 +22,14 @@ contract WitOracleTrustlessDefaultV21 uint256 _queryAwaitingBlocks, uint256 _queryReportingStake, WitOracleRadonRegistry _registry - // WitOracleRequestFactory _factory ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustless( _queryAwaitingBlocks, _queryReportingStake ) - { - // _require( - // _registry.specs() == ( - // type(IWitAppliance).interfaceId - // ^ type(IWitOracleRadonRegistry).interfaceId - // ), "uncompliant registry" - // ); - } + {} } diff --git a/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol b/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol index 3f9e70e7..3e1f4850 100644 --- a/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol +++ b/contracts/core/upgradable/WitOracleTrustlessUpgradableDefault.sol @@ -10,7 +10,7 @@ import "../base/WitOracleBaseUpgradable.sol"; /// @dev This contract enables posting requests that Witnet bridges will insert into the Witnet network. /// The result of the requests will be posted back to this contract by the bridge nodes too. /// @author The Witnet Foundation -abstract contract WitOracleTrustlessUpgradableDefault +contract WitOracleTrustlessUpgradableDefault is WitOracleBaseUpgradable { @@ -23,14 +23,12 @@ abstract contract WitOracleTrustlessUpgradableDefault uint256 _queryAwaitingBlocks, uint256 _queryReportingStake, WitOracleRadonRegistry _registry, - // WitOracleRequestFactory _factory, bytes32 _versionTag, bool _upgradable ) WitOracleBase( _immutables, _registry - // _factory ) WitOracleBaseTrustless( _queryAwaitingBlocks, From 90e1eab791e35a61ce32ef39d142e9d9b35a2d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:04:21 +0200 Subject: [PATCH 21/24] chore: polish migrations console colors --- migrations/scripts/1_base.js | 3 +- migrations/scripts/3_framework.js | 101 +++++++++++++++++------------- 2 files changed, 60 insertions(+), 44 deletions(-) diff --git a/migrations/scripts/1_base.js b/migrations/scripts/1_base.js index 5c11355f..9adf4196 100644 --- a/migrations/scripts/1_base.js +++ b/migrations/scripts/1_base.js @@ -27,7 +27,6 @@ module.exports = async function (truffleDeployer, network, [,,, master]) { console.info(" ", "> optimizer: ", JSON.stringify(metadata.settings.optimizer)) console.info(" ", "> evm version: ", metadata.settings.evmVersion.toUpperCase()) console.info(" ", "> artifact codehash: ", web3.utils.soliditySha3(WitnetDeployer.toJSON().deployedBytecode)) - await truffleDeployer.deploy(WitnetDeployer, { from: settings.getSpecs(network)?.WitnetDeployer?.from || web3.utils.toChecksumAddress(master), }) @@ -36,7 +35,7 @@ module.exports = async function (truffleDeployer, network, [,,, master]) { } else { WitnetDeployer.address = addresses[network].WitnetDeployer utils.traceHeader("Deployed 'WitnetDeployer'") - console.info(" ", "> contract address: \x1b[95m", WitnetDeployer.address, "\x1b[0m") + console.info(" ", "> contract address: \x1b[93m", WitnetDeployer.address, "\x1b[0m") console.info() } diff --git a/migrations/scripts/3_framework.js b/migrations/scripts/3_framework.js index b344c2b6..5a23274d 100644 --- a/migrations/scripts/3_framework.js +++ b/migrations/scripts/3_framework.js @@ -41,16 +41,19 @@ module.exports = async function (_, network, [, from, reporter, curator]) { }) // Loop on framework domains ... + const palette = [ 6, 4, ] for (const domain in framework) { if (!addresses[network][domain]) addresses[network][domain] = {} - + const color = palette[Object.keys(framework).indexOf(domain)] + + let first = true // Loop on domain artifacts ... for (const index in framework[domain]) { const base = framework[domain][index] const impl = networkArtifacts[domain][base] if (impl.indexOf(base) < 0) { - console.error(`Mismatching inheriting artifact names on settings/artifacts.js: ${base} 0) { - console.info(" ", "> constructor types: \x1b[90m", targetSpecs.constructorArgs.types, "\x1b[0m") - utils.traceData(" > constructor values: ", encodeCoreTargetConstructorArgs(targetSpecs).slice(2), 64, "\x1b[90m") + console.info(" ", "> constructor types: \x1b[90m", JSON.stringify(targetSpecs.constructorArgs.types), "\x1b[0m") + utils.traceData(" > constructor values: ", encodeTargetConstructorArgs(targetSpecs).slice(2), 64, "\x1b[90m") } - await deployCoreTarget(impl, targetSpecs, networkArtifacts) + await deployTarget(impl, targetSpecs, networkArtifacts) // save constructor args - constructorArgs[network][impl] = encodeCoreTargetConstructorArgs(targetSpecs).slice(2) + constructorArgs[network][impl] = encodeTargetConstructorArgs(targetSpecs).slice(2) await utils.overwriteJsonFile("./migrations/constructorArgs.json", constructorArgs) } if (targetSpecs.isUpgradable) { if (!utils.isNullAddress(targetBaseAddr) && (await web3.eth.getCode(targetBaseAddr)).length > 3) { // a proxy address with deployed code is found in the addresses file... - const proxyImplAddr = await getProxyImplementation(targetSpecs.from, targetBaseAddr) - if ( - proxyImplAddr === targetAddr || - utils.isNullAddress(proxyImplAddr) || selection.includes(base) || process.argv.includes("--upgrade-all") - ) { - implArtifact.address = targetAddr - } else { - implArtifact.address = proxyImplAddr + try { + const proxyImplAddr = await getProxyImplementation(targetSpecs.from, targetBaseAddr) + if ( + proxyImplAddr === targetAddr || + utils.isNullAddress(proxyImplAddr) || selection.includes(base) || process.argv.includes("--upgrade-all") + ) { + implArtifact.address = targetAddr + } else { + implArtifact.address = proxyImplAddr + } + } catch (ex) { + console.info("Error: trying to upgrade from non-upgradable artifact?") + console.info(ex) + process.exit(1) } } else { targetBaseAddr = await deployCoreBase(targetSpecs, targetAddr) @@ -153,15 +167,14 @@ module.exports = async function (_, network, [, from, reporter, curator]) { } if (implArtifact.address !== targetAddr) { - console.info(" ", "> contract address: \x1b[96m", baseArtifact.address, "\x1b[0m") + console.info(" ", `> contract address: \x1b[9${color}m${baseArtifact.address} \x1b[0m`) console.info(" ", - " \x1b[96m -->\x1b[36m", + ` \x1b[9${color}m -->\x1b[3${color}m`, implArtifact.address, "!==", `\x1b[30;43m${targetAddr}\x1b[0m` ) } else { - console.info(" ", "> contract address: \x1b[96m", - baseArtifact.address, "-->\x1b[36m", + console.info(" ", `> contract address: \x1b[9${color}m ${baseArtifact.address} -->\x1b[3${color}m`, implArtifact.address, "\x1b[0m" ) } @@ -181,17 +194,17 @@ module.exports = async function (_, network, [, from, reporter, curator]) { baseArtifact.address = targetAddr implArtifact.address = targetAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { - console.info(" ", "> contract address: \x1b[36m", targetBaseAddr, "\x1b[0m==>", `\x1b[96m${targetAddr}\x1b[0m`) + console.info(" ", `> contract address: \x1b[3${color}m ${targetBaseAddr} \x1b[0m==> \x1b[9${color}m${targetAddr}\x1b[0m`) } else { - console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") + console.info(" ", `> contract address: \x1b[9${color}m`, targetAddr, "\x1b[0m") } } else { baseArtifact.address = targetBaseAddr implArtifact.address = targetBaseAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { - console.info(" ", "> contract address: \x1b[96m", targetBaseAddr, "\x1b[0m!==", `\x1b[41m${targetAddr}\x1b[0m`) + console.info(" ", `> contract address: \x1b[9${color}m ${targetBaseAddr}\x1b[0m !==`, `\x1b[41m${targetAddr}\x1b[0m`) } else { - console.info(" ", "> contract address: \x1b[96m", targetAddr, "\x1b[0m") + console.info(" ", `> contract address: \x1b[9${color}m ${targetAddr}\x1b[0m`) } } addresses[network][domain][base] = baseArtifact.address @@ -199,7 +212,7 @@ module.exports = async function (_, network, [, from, reporter, curator]) { } const core = await implArtifact.at(baseArtifact.address) try { - console.info(" ", "> contract curator: \x1b[95m", await core.owner.call({ from }), "\x1b[0m") + console.info(" ", "> contract curator: \x1b[33m", await core.owner.call({ from }), "\x1b[0m") } catch {} console.info(" ", "> contract class: \x1b[1;39m", await core.class.call({ from }), "\x1b[0m") if (targetSpecs.isUpgradable) { @@ -234,7 +247,7 @@ async function deployCoreBase (targetSpecs, targetAddr) { utils.traceTx(await deployer.proxify(proxySalt, targetAddr, initdata, { from: targetSpecs.from })) } if ((await web3.eth.getCode(proxyAddr)).length < 3) { - console.error(`Error: WitnetProxy was not deployed on the expected address: ${proxyAddr}`) + console.info(`Error: WitnetProxy was not deployed on the expected address: ${proxyAddr}`) process.exit(1) } return proxyAddr @@ -254,22 +267,21 @@ async function upgradeCoreBase (proxyAddr, targetSpecs, targetAddr) { return proxyAddr } -async function deployCoreTarget (target, targetSpecs, networkArtifacts) { +async function deployTarget (target, targetSpecs, networkArtifacts) { const deployer = await WitnetDeployer.deployed() - console.log(target, targetSpecs) - const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) + const targetInitCode = encodeTargetInitCode(target, targetSpecs, networkArtifacts) const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") const targetAddr = await deployer.determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) utils.traceTx(await deployer.deploy(targetInitCode, targetSalt, { from: targetSpecs.from })) if ((await web3.eth.getCode(targetAddr)).length <= 3) { - console.error(`Error: Contract ${target} was not deployed on the expected address: ${targetAddr}`) + console.info(`Error: Contract ${target} was not deployed on the expected address: ${targetAddr}`) process.exit(1) } return targetAddr } -async function determineCoreTargetAddr (target, targetSpecs, networkArtifacts) { - const targetInitCode = encodeCoreTargetInitCode(target, targetSpecs, networkArtifacts) +async function determineTargetAddr (target, targetSpecs, networkArtifacts) { + const targetInitCode = encodeTargetInitCode(target, targetSpecs, networkArtifacts) const targetSalt = "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(targetSpecs.vanity), 32).toString("hex") return (await WitnetDeployer.deployed()).determineAddr.call(targetInitCode, targetSalt, { from: targetSpecs.from }) } @@ -280,27 +292,32 @@ async function determineProxyAddr (from, nonce) { return await deployer.determineProxyAddr.call(salt, { from }) } -function encodeCoreTargetConstructorArgs (targetSpecs) { +function encodeTargetConstructorArgs (targetSpecs) { return web3.eth.abi.encodeParameters(targetSpecs.constructorArgs.types, targetSpecs.constructorArgs.values) } -function encodeCoreTargetInitCode (target, targetSpecs, networkArtifacts) { +function encodeTargetInitCode (target, targetSpecs, networkArtifacts) { // extract bytecode from target's artifact, replacing lib references to actual addresses + const targetCodeUnlinked = artifacts.require(target).toJSON().bytecode + if (targetCodeUnlinked.length < 3) { + console.info(`Error: cannot deploy abstract arfifact ${target}.`) + process.exit(1) + } const targetCode = linkBaseLibs( - artifacts.require(target).toJSON().bytecode, + targetCodeUnlinked, targetSpecs.baseLibs, networkArtifacts ) if (targetCode.indexOf("__") > -1) { - console.info(targetCode) - console.error( + // console.info(targetCode) + console.info( `Error: artifact ${target} depends on library`, targetCode.substring(targetCode.indexOf("__"), 42), "which is not known or has not been deployed." ) process.exit(1) } - const targetConstructorArgsEncoded = encodeCoreTargetConstructorArgs(targetSpecs) + const targetConstructorArgsEncoded = encodeTargetConstructorArgs(targetSpecs) return targetCode + targetConstructorArgsEncoded.slice(2) } @@ -321,10 +338,10 @@ function linkBaseLibs (bytecode, baseLibs, networkArtifacts) { return bytecode } -async function unfoldCoreTargetSpecs (domain, target, targetBase, from, network, networkArtifacts, networkSpecs, ancestors) { +async function unfoldTargetSpecs (domain, target, targetBase, from, network, networkArtifacts, networkSpecs, ancestors) { if (!ancestors) ancestors = [] else if (ancestors.includes(targetBase)) { - console.error(`Core dependencies loop detected: '${targetBase}' in ${ancestors}`,) + console.info(`Core dependencies loop detected: '${targetBase}' in ${ancestors}`,) process.exit(1) } const specs = { @@ -374,11 +391,11 @@ async function unfoldCoreTargetSpecs (domain, target, targetBase, from, network, ) specs.intrinsics.values.push(await determineProxyAddr(specs.from, depsProxySalt)) } else { - const depsImplSpecs = await unfoldCoreTargetSpecs( + const depsImplSpecs = await unfoldTargetSpecs( domain, depsImpl, depsBase, specs.from, network, networkArtifacts, networkSpecs, [...ancestors, targetBase] ) - const depsImplAddr = await determineCoreTargetAddr(depsImpl, depsImplSpecs, networkArtifacts) + const depsImplAddr = await determineTargetAddr(depsImpl, depsImplSpecs, networkArtifacts) specs.intrinsics.values.push(depsImplAddr) } } From 7b408915d99798db6d12f1f10f9f44b0ee1315a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:05:02 +0200 Subject: [PATCH 22/24] chore: vanity2gen: read constructorArgs from file if not specified on CLI --- scripts/vanity2gen.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index 05597990..697f5117 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -3,6 +3,7 @@ const fs = require("fs") const utils = require("../src/utils") const addresses = require("../migrations/addresses") +const constructorArgs = require("../migrations/constructorArgs.json") module.exports = async function () { let artifact @@ -46,6 +47,9 @@ module.exports = async function () { }) try { from = from || addresses[network]?.WitnetDeployer || addresses.default.WitnetDeployer + if (hexArgs === "" && artifact !== "") { + hextArgs = constructorArgs[network][artifact] + } } catch { console.error(`WitnetDeployer must have been previously deployed on network '${network}'.\n`) console.info("Usage:\n") From ade4534e90b2e50a20cdddcafed3937d174b28ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:05:31 +0200 Subject: [PATCH 23/24] chore: fix tests --- package.json | 2 +- test/TestWitnet.sol | 3 ++- test/mocks/WitMockedOracle.sol | 6 ++---- test/mocks/WitMockedPriceFeeds.sol | 4 ++-- test/mocks/WitMockedRadonRegistry.sol | 10 +++++----- test/mocks/WitMockedRequestFactory.sol | 10 +++++----- 6 files changed, 17 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 100b4863..9deba75c 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "networks": "node ./scripts/networks.js 2>&1", "ops:rng:sla": "npx truffle migrate --migrations_directory ./migrations/ops/rng/sla --network", "prepare": "npx truffle compile --all && npx hardhat compile --force && node ./scripts/prepare.js", - "test": "pnpm run clean && npx truffle test", + "test": "npx truffle test", "verify:apps": "node ./scripts/verify-apps.js 2>&1", "verify:core": "node ./scripts/verify-core.js 2>&1", "verify:libs": "node ./scripts/verify-libs.js 2>&1", diff --git a/test/TestWitnet.sol b/test/TestWitnet.sol index d415e163..edecd732 100644 --- a/test/TestWitnet.sol +++ b/test/TestWitnet.sol @@ -65,7 +65,8 @@ contract TestWitnetV2 { finality: uint64(block.number), resultTimestamp: uint32(block.timestamp), resultDrTxHash: blockhash(block.number - 1), - resultCborBytes: hex"010203040506" + resultCborBytes: hex"010203040506", + disputer: address(0) }); } diff --git a/test/mocks/WitMockedOracle.sol b/test/mocks/WitMockedOracle.sol index 6578cadf..d18d3c29 100644 --- a/test/mocks/WitMockedOracle.sol +++ b/test/mocks/WitMockedOracle.sol @@ -21,11 +21,9 @@ contract WitMockedOracle { constructor(WitMockedRadonRegistry _registry) WitOracleTrustableDefault( + EvmImmutables(60000, 65000, 70000, 20000), WitOracleRadonRegistry(_registry), - WitOracleRequestFactory(address(0)), - false, - bytes32("mocked"), - 60000, 65000, 70000, 20000 + bytes32("mocked") ) { address[] memory _reporters = new address[](1); diff --git a/test/mocks/WitMockedPriceFeeds.sol b/test/mocks/WitMockedPriceFeeds.sol index 02ec2bef..89f67f94 100644 --- a/test/mocks/WitMockedPriceFeeds.sol +++ b/test/mocks/WitMockedPriceFeeds.sol @@ -15,8 +15,8 @@ contract WitMockedPriceFeeds is WitPriceFeedsUpgradable { constructor(WitMockedOracle _witOracle) WitPriceFeedsUpgradable( _witOracle, - false, - bytes32("mocked") + bytes32("mocked"), + false ) {} } diff --git a/test/mocks/WitMockedRadonRegistry.sol b/test/mocks/WitMockedRadonRegistry.sol index b829094b..93ef0699 100644 --- a/test/mocks/WitMockedRadonRegistry.sol +++ b/test/mocks/WitMockedRadonRegistry.sol @@ -3,18 +3,18 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../../contracts/core/trustless/WitOracleRadonRegistryBaseUpgradableDefault.sol"; +import "../../contracts/core/upgradable/WitOracleRadonRegistryUpgradableDefault.sol"; /// @title Mocked implementation of `WitOracleRadonRegistry`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE /// @dev THE `WitOracleRadonRegistry` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. -contract WitMockedRadonRegistry is WitOracleRadonRegistryBaseUpgradableDefault { +contract WitMockedRadonRegistry is WitOracleRadonRegistryUpgradableDefault { constructor() - WitOracleRadonRegistryBaseUpgradableDefault( - false, - bytes32("mocked") + WitOracleRadonRegistryUpgradableDefault( + bytes32("mocked"), + false ) {} } diff --git a/test/mocks/WitMockedRequestFactory.sol b/test/mocks/WitMockedRequestFactory.sol index 67d23258..ca68b3f1 100644 --- a/test/mocks/WitMockedRequestFactory.sol +++ b/test/mocks/WitMockedRequestFactory.sol @@ -4,7 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitMockedOracle.sol"; -import "../../contracts/core/trustless/WitOracleRequestFactoryDefault.sol"; +import "../../contracts/core/upgradable/WitOracleRequestFactoryUpgradableDefault.sol"; /// @title Mocked implementation of `WitOracleRequestFactory`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. @@ -13,13 +13,13 @@ import "../../contracts/core/trustless/WitOracleRequestFactoryDefault.sol"; /// @dev BY THE WITNET FOUNDATION. contract WitMockedRequestFactory is - WitOracleRequestFactoryDefault + WitOracleRequestFactoryUpgradableDefault { constructor (WitMockedOracle _witOracle) - WitOracleRequestFactoryDefault( + WitOracleRequestFactoryUpgradableDefault( WitOracle(address(_witOracle)), - false, - bytes32("mocked") + bytes32("mocked"), + false ) {} } \ No newline at end of file From 72ad7ebcde16255611867776ed60932189d3a949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 21 Oct 2024 15:11:40 +0200 Subject: [PATCH 24/24] chore: fmt! --- migrations/scripts/3_framework.js | 14 ++++++++++---- scripts/vanity2gen.js | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/migrations/scripts/3_framework.js b/migrations/scripts/3_framework.js index 5a23274d..e466c4a0 100644 --- a/migrations/scripts/3_framework.js +++ b/migrations/scripts/3_framework.js @@ -41,11 +41,11 @@ module.exports = async function (_, network, [, from, reporter, curator]) { }) // Loop on framework domains ... - const palette = [ 6, 4, ] + const palette = [6, 4] for (const domain in framework) { if (!addresses[network][domain]) addresses[network][domain] = {} const color = palette[Object.keys(framework).indexOf(domain)] - + let first = true // Loop on domain artifacts ... for (const index in framework[domain]) { @@ -194,7 +194,10 @@ module.exports = async function (_, network, [, from, reporter, curator]) { baseArtifact.address = targetAddr implArtifact.address = targetAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { - console.info(" ", `> contract address: \x1b[3${color}m ${targetBaseAddr} \x1b[0m==> \x1b[9${color}m${targetAddr}\x1b[0m`) + console.info(" ", + `> contract address: \x1b[3${color}m ${targetBaseAddr} \x1b[0m==>`, + `\x1b[9${color}m${targetAddr}\x1b[0m` + ) } else { console.info(" ", `> contract address: \x1b[9${color}m`, targetAddr, "\x1b[0m") } @@ -202,7 +205,10 @@ module.exports = async function (_, network, [, from, reporter, curator]) { baseArtifact.address = targetBaseAddr implArtifact.address = targetBaseAddr if (!utils.isNullAddress(targetBaseAddr) && targetBaseAddr !== targetAddr) { - console.info(" ", `> contract address: \x1b[9${color}m ${targetBaseAddr}\x1b[0m !==`, `\x1b[41m${targetAddr}\x1b[0m`) + console.info(" ", + `> contract address: \x1b[9${color}m ${targetBaseAddr}\x1b[0m !==`, + `\x1b[41m${targetAddr}\x1b[0m` + ) } else { console.info(" ", `> contract address: \x1b[9${color}m ${targetAddr}\x1b[0m`) } diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index 697f5117..e535b72a 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -47,8 +47,8 @@ module.exports = async function () { }) try { from = from || addresses[network]?.WitnetDeployer || addresses.default.WitnetDeployer - if (hexArgs === "" && artifact !== "") { - hextArgs = constructorArgs[network][artifact] + if (hexArgs === "" && artifact !== "") { + hexArgs = constructorArgs[network][artifact] } } catch { console.error(`WitnetDeployer must have been previously deployed on network '${network}'.\n`)