From 0d79109e5bdae5f7edf8150dea4c43cfd42c44be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 17:43:52 +0100 Subject: [PATCH 001/149] feat: WitnetBytecodes.class() --- contracts/impls/core/WitnetBytecodesDefault.sol | 4 +++- contracts/interfaces/V2/IWitnetBytecodes.sol | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/contracts/impls/core/WitnetBytecodesDefault.sol b/contracts/impls/core/WitnetBytecodesDefault.sol index d4a2c93f9..29a8da4b7 100644 --- a/contracts/impls/core/WitnetBytecodesDefault.sol +++ b/contracts/impls/core/WitnetBytecodesDefault.sol @@ -31,7 +31,9 @@ contract WitnetBytecodesDefault using WitnetEncodingLib for WitnetV2.RadonRetrieval[]; using WitnetEncodingLib for WitnetV2.RadonReducer; using WitnetEncodingLib for WitnetV2.RadonSLA; - using WitnetEncodingLib for WitnetV2.RadonDataTypes; + using WitnetEncodingLib for WitnetV2.RadonDataTypes; + + bytes4 public immutable override class = type(IWitnetBytecodes).interfaceId; constructor( bool _upgradable, diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 10d7f2c8c..4a0af9d62 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -9,6 +9,8 @@ interface IWitnetBytecodes { function bytecodeOf(bytes32 radHash) external view returns (bytes memory); function bytecodeOf(bytes32 radHash, bytes32 slahHash) external view returns (bytes memory); + function class() external view returns (bytes4); + function hashOf( bytes32[] calldata sources, bytes32 aggregator, From 232944da67b6d17c387e6e11cb638d37e2d93fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 17:51:12 +0100 Subject: [PATCH 002/149] refactor: WitnetRequestFactory, WitnetRequestTemplate --- contracts/data/WitnetRequestFactoryData.sol | 2 +- contracts/impls/core/WitnetRequestFactoryDefault.sol | 12 ++++-------- .../core/customs/WitnetRequestFactoryCfxCore.sol | 2 +- contracts/interfaces/V2/IWitnetRequestFactory.sol | 6 +++--- contracts/requests/WitnetRequestTemplate.sol | 6 +++--- 5 files changed, 12 insertions(+), 16 deletions(-) diff --git a/contracts/data/WitnetRequestFactoryData.sol b/contracts/data/WitnetRequestFactoryData.sol index b7e04459c..daa0e3d08 100644 --- a/contracts/data/WitnetRequestFactoryData.sol +++ b/contracts/data/WitnetRequestFactoryData.sol @@ -37,7 +37,7 @@ contract WitnetRequestFactoryData { /// @notice Aggregator reducer hash. bytes32 aggregator; /// @notice Parent IWitnetRequestFactory from which this template was built. - WitnetRequestFactory factory; + IWitnetRequestFactory factory; /// Whether any of the sources is parameterized. bool parameterized; /// @notice Tally reducer hash. diff --git a/contracts/impls/core/WitnetRequestFactoryDefault.sol b/contracts/impls/core/WitnetRequestFactoryDefault.sol index c13eb0294..bc95c6f93 100644 --- a/contracts/impls/core/WitnetRequestFactoryDefault.sol +++ b/contracts/impls/core/WitnetRequestFactoryDefault.sol @@ -3,8 +3,6 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; - import "../../WitnetBytecodes.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestFactoryData.sol"; @@ -20,10 +18,8 @@ contract WitnetRequestFactoryDefault WitnetRequestFactoryData, WitnetUpgradableBase { - using ERC165Checker for address; - /// @notice Reference to Witnet Data Requests Bytecode Registry - WitnetBytecodes immutable public override(IWitnetRequestFactory, WitnetRequestTemplate) registry; + IWitnetBytecodes immutable public override(IWitnetRequestFactory, WitnetRequestTemplate) registry; modifier onlyDelegateCalls override(Clonable, Upgradeable) { require( @@ -51,7 +47,7 @@ contract WitnetRequestFactoryDefault } constructor( - WitnetBytecodes _registry, + IWitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag ) @@ -62,7 +58,7 @@ contract WitnetRequestFactoryDefault ) { require( - address(_registry).supportsInterface(type(WitnetBytecodes).interfaceId), + _registry.class() == type(WitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant registry" ); registry = _registry; @@ -415,7 +411,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (WitnetRequestFactory) + returns (IWitnetRequestFactory) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { diff --git a/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol index 87090fb62..faa836f73 100644 --- a/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol @@ -7,7 +7,7 @@ import "../WitnetRequestFactoryDefault.sol"; contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { constructor( - WitnetBytecodes _registry, + IWitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag ) diff --git a/contracts/interfaces/V2/IWitnetRequestFactory.sol b/contracts/interfaces/V2/IWitnetRequestFactory.sol index d706ae9a7..81890a095 100644 --- a/contracts/interfaces/V2/IWitnetRequestFactory.sol +++ b/contracts/interfaces/V2/IWitnetRequestFactory.sol @@ -2,7 +2,7 @@ pragma solidity >=0.7.0 <0.9.0; -import "../../WitnetBytecodes.sol"; +import "./IWitnetBytecodes.sol"; interface IWitnetRequestFactory { event WitnetRequestTemplateBuilt(address template, bool parameterized); @@ -13,5 +13,5 @@ interface IWitnetRequestFactory { uint16 resultDataMaxSize ) external returns (address template); function class() external view returns (bytes4); - function registry() external view returns (WitnetBytecodes); -} \ No newline at end of file + function registry() external view returns (IWitnetBytecodes); +} diff --git a/contracts/requests/WitnetRequestTemplate.sol b/contracts/requests/WitnetRequestTemplate.sol index f180e5060..34cdd3e3f 100644 --- a/contracts/requests/WitnetRequestTemplate.sol +++ b/contracts/requests/WitnetRequestTemplate.sol @@ -3,15 +3,15 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../WitnetRequestFactory.sol"; +import "../interfaces/V2/IWitnetRequestFactory.sol"; abstract contract WitnetRequestTemplate { event WitnetRequestBuilt(address indexed request, bytes32 indexed radHash, string[][] args); function class() virtual external view returns (bytes4); - function factory() virtual external view returns (WitnetRequestFactory); - function registry() virtual external view returns (WitnetBytecodes); + function factory() virtual external view returns (IWitnetRequestFactory); + function registry() virtual external view returns (IWitnetBytecodes); function version() virtual external view returns (string memory); function aggregator() virtual external view returns (bytes32); From 089dd5f6ffd0b30473660b573b6a9550e2f2dacb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 18:03:31 +0100 Subject: [PATCH 003/149] feat: WitnetRequestBoard.{class(), factory(), registry()} --- contracts/WitnetRequestBoard.sol | 29 ++++++------------- .../WitnetRequestBoardTrustableDefault.sol | 4 ++- .../WitnetRequestBoardTrustableBase.sol | 10 +++++-- .../WitnetRequestBoardTrustableBoba.sol | 2 +- .../WitnetRequestBoardTrustableOvm2.sol | 2 +- .../WitnetRequestBoardTrustableReef.sol | 2 +- .../interfaces/V2/IWitnetRequestBoard.sol | 24 +++++++++++++++ 7 files changed, 46 insertions(+), 27 deletions(-) create mode 100644 contracts/interfaces/V2/IWitnetRequestBoard.sol diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 315d15c78..9f003e5e9 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -3,33 +3,22 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetBytecodes.sol"; -import "./WitnetRequestFactory.sol"; - -import "./interfaces/IWitnetRequestBoardEvents.sol"; -import "./interfaces/IWitnetRequestBoardReporter.sol"; -import "./interfaces/IWitnetRequestBoardRequestor.sol"; -import "./interfaces/IWitnetRequestBoardView.sol"; - -import "./interfaces/IWitnetRequestBoardDeprecating.sol"; +import "./interfaces/V2/IWitnetRequestBoard.sol"; +import "./interfaces/V2/IWitnetRequestFactory.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. -abstract contract WitnetRequestBoard is - IWitnetRequestBoardDeprecating, - IWitnetRequestBoardEvents, - IWitnetRequestBoardReporter, - IWitnetRequestBoardRequestor, - IWitnetRequestBoardView +abstract contract WitnetRequestBoard + is + IWitnetRequestBoard { - WitnetRequestFactory immutable public factory; - WitnetBytecodes immutable public registry; - constructor (WitnetRequestFactory _factory) { + IWitnetRequestFactory immutable public override factory; + + constructor (IWitnetRequestFactory _factory) { require( - _factory.class() == type(WitnetRequestFactory).interfaceId, + _factory.class() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoard: uncompliant factory" ); factory = _factory; - registry = _factory.registry(); } } \ No newline at end of file diff --git a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol b/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol index bde65694f..e28bb19c4 100644 --- a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol @@ -20,8 +20,10 @@ contract WitnetRequestBoardTrustableDefault { uint256 internal immutable _ESTIMATED_REPORT_RESULT_GAS; + bytes4 public immutable override class = type(WitnetRequestBoard).interfaceId; + constructor( - WitnetRequestFactory _factory, + IWitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol b/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol index 4a992376f..6417686d0 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol +++ b/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol @@ -28,7 +28,7 @@ abstract contract WitnetRequestBoardTrustableBase using Witnet for Witnet.Result; constructor( - WitnetRequestFactory _factory, + IWitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, address _currency @@ -42,6 +42,10 @@ abstract contract WitnetRequestBoardTrustableBase WitnetRequestBoard(_factory) {} + function registry() public view virtual override returns (IWitnetBytecodes) { + return factory.registry(); + } + receive() external payable { revert("WitnetRequestBoardTrustableBase: no transfers accepted"); } @@ -540,7 +544,7 @@ abstract contract WitnetRequestBoardTrustableBase { return postRequest( _radHash, - registry.verifyRadonSLA(_slaParams) + registry().verifyRadonSLA(_slaParams) ); } @@ -646,7 +650,7 @@ abstract contract WitnetRequestBoardTrustableBase if (_request.addr != address(0)) { _bytecode = IWitnetRequest(_request.addr).bytecode(); } else if (_request.radHash != bytes32(0)) { - _bytecode = registry.bytecodeOf( + _bytecode = registry().bytecodeOf( _request.radHash, _request.slaHash ); diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol b/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol index e6c3a33f4..e917dcb7c 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol +++ b/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol @@ -33,7 +33,7 @@ contract WitnetRequestBoardTrustableBoba } constructor( - WitnetRequestFactory _factory, + IWitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _layer2ReportResultGasLimit, diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol index 369bd398b..e5b1ae03b 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -25,7 +25,7 @@ contract WitnetRequestBoardTrustableOvm2 OVM_GasPriceOracle immutable public gasPriceOracleL1; constructor( - WitnetRequestFactory _factory, + IWitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol index f99ec4628..f3d688928 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol @@ -18,7 +18,7 @@ contract WitnetRequestBoardTrustableReef WitnetRequestBoardTrustableDefault { constructor( - WitnetRequestFactory _factory, + IWitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol new file mode 100644 index 000000000..140441018 --- /dev/null +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; + +import "../IWitnetRequestBoardDeprecating.sol"; +import "../IWitnetRequestBoardEvents.sol"; +import "../IWitnetRequestBoardReporter.sol"; +import "../IWitnetRequestBoardRequestor.sol"; +import "../IWitnetRequestBoardView.sol"; + +import "./IWitnetRequestFactory.sol"; + +abstract contract IWitnetRequestBoard + is + IWitnetRequestBoardDeprecating, + IWitnetRequestBoardEvents, + IWitnetRequestBoardReporter, + IWitnetRequestBoardRequestor, + IWitnetRequestBoardView +{ + function class() virtual external view returns (bytes4); + function factory() virtual external view returns (IWitnetRequestFactory); + function registry() virtual external view returns (IWitnetBytecodes); +} From 478ab18c1ea11f62e47940b9015a069cf55a2cb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 18:06:15 +0100 Subject: [PATCH 004/149] refactor: WitnetRandomness --- contracts/impls/apps/WitnetRandomnessProxiable.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/impls/apps/WitnetRandomnessProxiable.sol b/contracts/impls/apps/WitnetRandomnessProxiable.sol index 678c3dd8c..12a11c13b 100644 --- a/contracts/impls/apps/WitnetRandomnessProxiable.sol +++ b/contracts/impls/apps/WitnetRandomnessProxiable.sol @@ -68,8 +68,8 @@ contract WitnetRandomnessProxiable || address(_wrb).supportsInterface(type(WitnetRequestBoard).interfaceId), "WitnetRandomnessProxiable: uncompliant request board" ); - WitnetBytecodes _registry = witnet().registry(); - WitnetRequestFactory _factory = witnet().factory(); + IWitnetRequestFactory _factory = witnet().factory(); + IWitnetBytecodes _registry = _factory.registry(); { // Build own Witnet Randomness Request: bytes32[] memory _retrievals = new bytes32[](1); From c9ca54d8ed46adebf50f7b6c41da596567a8f553 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 18:07:57 +0100 Subject: [PATCH 005/149] refactor: WitnetFeeds, WitnetPriceFeeds --- contracts/WitnetFeeds.sol | 6 ++---- contracts/WitnetPriceFeeds.sol | 2 +- .../impls/apps/WitnetPriceFeedsUpgradable.sol | 20 +++++++++++-------- contracts/interfaces/V2/IWitnetFeeds.sol | 7 ++++--- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/contracts/WitnetFeeds.sol b/contracts/WitnetFeeds.sol index 616b25489..594a59615 100644 --- a/contracts/WitnetFeeds.sol +++ b/contracts/WitnetFeeds.sol @@ -15,19 +15,17 @@ abstract contract WitnetFeeds IWitnetFeedsEvents { WitnetV2.RadonDataTypes immutable public override dataType; - WitnetBytecodes immutable public override registry; - WitnetRequestBoard immutable public override witnet; + IWitnetRequestBoard immutable public override witnet; bytes32 immutable internal __prefix; constructor( - WitnetRequestBoard _wrb, + IWitnetRequestBoard _wrb, WitnetV2.RadonDataTypes _dataType, string memory _prefix ) { witnet = _wrb; - registry = witnet.registry(); dataType = _dataType; __prefix = Witnet.toBytes32(bytes(_prefix)); } diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol index 60fda9612..ec14897e9 100644 --- a/contracts/WitnetPriceFeeds.sol +++ b/contracts/WitnetPriceFeeds.sol @@ -14,7 +14,7 @@ abstract contract WitnetPriceFeeds IWitnetPriceSolverDeployer, WitnetFeeds { - constructor(WitnetRequestBoard _wrb) + constructor(IWitnetRequestBoard _wrb) WitnetFeeds( _wrb, WitnetV2.RadonDataTypes.Integer, diff --git a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol b/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol index 515a640c9..c97da1925 100644 --- a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol +++ b/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol @@ -22,7 +22,7 @@ contract WitnetPriceFeedsUpgradable using WitnetV2 for WitnetV2.RadonSLA; constructor( - WitnetRequestBoard _wrb, + IWitnetRequestBoard _wrb, bool _upgradable, bytes32 _version ) @@ -174,7 +174,7 @@ contract WitnetPriceFeedsUpgradable public view returns (WitnetV2.RadonSLA memory) { - return registry.lookupRadonSLA(__storage().defaultSlaHash); + return registry().lookupRadonSLA(__storage().defaultSlaHash); } function estimateUpdateBaseFee(bytes4, uint256 _evmGasPrice, uint256) @@ -253,7 +253,7 @@ contract WitnetPriceFeedsUpgradable __record.radHash != 0, "WitnetPriceFeedsUpgradable: no RAD hash" ); - return registry.bytecodeOf( + return registry().bytecodeOf( __record.radHash, __storage().defaultSlaHash ); @@ -270,13 +270,17 @@ contract WitnetPriceFeedsUpgradable override external view returns (WitnetV2.RadonRetrieval[] memory _retrievals) { - bytes32[] memory _hashes = registry.lookupRadonRequestSources(lookupRadHash(feedId)); + bytes32[] memory _hashes = registry().lookupRadonRequestSources(lookupRadHash(feedId)); _retrievals = new WitnetV2.RadonRetrieval[](_hashes.length); for (uint _ix = 0; _ix < _retrievals.length; _ix ++) { - _retrievals[_ix] = registry.lookupRadonRetrieval(_hashes[_ix]); + _retrievals[_ix] = registry().lookupRadonRetrieval(_hashes[_ix]); } } + function registry() public view virtual override returns (IWitnetBytecodes) { + return witnet.registry(); + } + function requestUpdate(bytes4 feedId) external payable virtual override @@ -291,7 +295,7 @@ contract WitnetPriceFeedsUpgradable returns (uint256 _usedFunds) { require( - registry.lookupRadonSLA(_slaHash).equalOrGreaterThan(defaultRadonSLA()), + registry().lookupRadonSLA(_slaHash).equalOrGreaterThan(defaultRadonSLA()), "WitnetPriceFeedsUpgradable: unsecure update" ); return _requestUpdate(feedId, _slaHash); @@ -385,7 +389,7 @@ contract WitnetPriceFeedsUpgradable override public onlyOwner { - __storage().defaultSlaHash = registry.verifyRadonSLA(sla); + __storage().defaultSlaHash = registry().verifyRadonSLA(sla); } function settleFeedRequest(string calldata caption, bytes32 radHash) @@ -393,7 +397,7 @@ contract WitnetPriceFeedsUpgradable onlyOwner { require( - registry.lookupRadonRequestResultDataType(radHash) == dataType, + registry().lookupRadonRequestResultDataType(radHash) == dataType, "WitnetPriceFeedsUpgradable: bad result data type" ); bytes4 feedId = hash(caption); diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 56dfa705c..b1300ff4f 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -2,13 +2,14 @@ pragma solidity >=0.8.0 <0.9.0; -import "../../WitnetRequestBoard.sol"; +import "./IWitnetBytecodes.sol"; +import "./IWitnetRequestBoard.sol"; interface IWitnetFeeds { function dataType() external view returns (WitnetV2.RadonDataTypes); function prefix() external view returns (string memory); - function registry() external view returns (WitnetBytecodes); - function witnet() external view returns (WitnetRequestBoard); + function registry() external view returns (IWitnetBytecodes); + function witnet() external view returns (IWitnetRequestBoard); function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); From 3f820b9c346284c9ce78867459612fcb32385eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 18:47:16 +0100 Subject: [PATCH 006/149] chore: make migration script work w/ latest refactorings --- contracts/WitnetFeeds.sol | 3 --- contracts/WitnetPriceFeeds.sol | 3 +-- contracts/WitnetRequestBoard.sol | 13 +------------ .../impls/apps/WitnetPriceFeedsUpgradable.sol | 12 ++++++++++-- .../impls/core/WitnetBytecodesDefault.sol | 2 +- .../WitnetRequestBoardTrustableDefault.sol | 2 -- .../WitnetRequestBoardTrustableBase.sol | 19 ++++++++++++++----- 7 files changed, 27 insertions(+), 27 deletions(-) diff --git a/contracts/WitnetFeeds.sol b/contracts/WitnetFeeds.sol index 594a59615..39c4be992 100644 --- a/contracts/WitnetFeeds.sol +++ b/contracts/WitnetFeeds.sol @@ -15,17 +15,14 @@ abstract contract WitnetFeeds IWitnetFeedsEvents { WitnetV2.RadonDataTypes immutable public override dataType; - IWitnetRequestBoard immutable public override witnet; bytes32 immutable internal __prefix; constructor( - IWitnetRequestBoard _wrb, WitnetV2.RadonDataTypes _dataType, string memory _prefix ) { - witnet = _wrb; dataType = _dataType; __prefix = Witnet.toBytes32(bytes(_prefix)); } diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol index ec14897e9..930dde290 100644 --- a/contracts/WitnetPriceFeeds.sol +++ b/contracts/WitnetPriceFeeds.sol @@ -14,9 +14,8 @@ abstract contract WitnetPriceFeeds IWitnetPriceSolverDeployer, WitnetFeeds { - constructor(IWitnetRequestBoard _wrb) + constructor() WitnetFeeds( - _wrb, WitnetV2.RadonDataTypes.Integer, "Price-" ) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 9f003e5e9..6e146857e 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -4,21 +4,10 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./interfaces/V2/IWitnetRequestBoard.sol"; -import "./interfaces/V2/IWitnetRequestFactory.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. abstract contract WitnetRequestBoard is IWitnetRequestBoard -{ - IWitnetRequestFactory immutable public override factory; - - constructor (IWitnetRequestFactory _factory) { - require( - _factory.class() == type(IWitnetRequestFactory).interfaceId, - "WitnetRequestBoard: uncompliant factory" - ); - factory = _factory; - } -} \ No newline at end of file +{} \ No newline at end of file diff --git a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol b/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol index c97da1925..7647677c0 100644 --- a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol +++ b/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol @@ -4,6 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "../../WitnetPriceFeeds.sol"; +import "../../WitnetRequestBoard.sol"; import "../../data/WitnetPriceFeedsData.sol"; import "../../impls/WitnetUpgradableBase.sol"; @@ -20,19 +21,26 @@ contract WitnetPriceFeedsUpgradable { using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.RadonSLA; + + IWitnetRequestBoard immutable public override witnet; constructor( IWitnetRequestBoard _wrb, bool _upgradable, bytes32 _version ) - WitnetPriceFeeds(_wrb) WitnetUpgradableBase( _upgradable, _version, "io.witnet.proxiable.router" ) - {} + { + require( + _wrb.class() == type(WitnetRequestBoard).interfaceId, + "WitnetPriceFeedsUpgradable: uncompliant request board" + ); + witnet = _wrb; + } // solhint-disable-next-line payable-fallback fallback() override external { diff --git a/contracts/impls/core/WitnetBytecodesDefault.sol b/contracts/impls/core/WitnetBytecodesDefault.sol index 29a8da4b7..94f6723a4 100644 --- a/contracts/impls/core/WitnetBytecodesDefault.sol +++ b/contracts/impls/core/WitnetBytecodesDefault.sol @@ -33,7 +33,7 @@ contract WitnetBytecodesDefault using WitnetEncodingLib for WitnetV2.RadonSLA; using WitnetEncodingLib for WitnetV2.RadonDataTypes; - bytes4 public immutable override class = type(IWitnetBytecodes).interfaceId; + bytes4 public immutable override class = type(WitnetBytecodes).interfaceId; constructor( bool _upgradable, diff --git a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol b/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol index e28bb19c4..d51221db4 100644 --- a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol @@ -20,8 +20,6 @@ contract WitnetRequestBoardTrustableDefault { uint256 internal immutable _ESTIMATED_REPORT_RESULT_GAS; - bytes4 public immutable override class = type(WitnetRequestBoard).interfaceId; - constructor( IWitnetRequestFactory _factory, bool _upgradable, diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol b/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol index 6417686d0..8fcd213d7 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol +++ b/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol @@ -5,11 +5,12 @@ pragma experimental ABIEncoderV2; import "../../WitnetUpgradableBase.sol"; import "../../../WitnetRequestBoard.sol"; +import "../../../WitnetRequestFactory.sol"; + import "../../../data/WitnetBoardDataACLs.sol"; import "../../../interfaces/IWitnetRequestBoardAdminACLs.sol"; -import "../../../patterns/Payable.sol"; - import "../../../libs/WitnetErrorsLib.sol"; +import "../../../patterns/Payable.sol"; /// @title Witnet Request Board "trustable" base implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -26,6 +27,9 @@ abstract contract WitnetRequestBoardTrustableBase { using Witnet for bytes; using Witnet for Witnet.Result; + + bytes4 public immutable override class = type(WitnetRequestBoard).interfaceId; + IWitnetRequestFactory immutable public override factory; constructor( IWitnetRequestFactory _factory, @@ -39,8 +43,13 @@ abstract contract WitnetRequestBoardTrustableBase _versionTag, "io.witnet.proxiable.board" ) - WitnetRequestBoard(_factory) - {} + { + require( + _factory.class() == type(WitnetRequestFactory).interfaceId, + "WitnetRequestBoard: uncompliant factory" + ); + factory = _factory; + } function registry() public view virtual override returns (IWitnetBytecodes) { return factory.registry(); @@ -838,4 +847,4 @@ abstract contract WitnetRequestBoardTrustableBase // Request data won't be needed anymore, so it can just get deleted right now: delete _query.request; } -} +} \ No newline at end of file From d98ea965408557fd5e2c0c072e1c50300d373eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 6 Nov 2023 18:48:57 +0100 Subject: [PATCH 007/149] chore: bump package version to 2.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb87efad1..6923e900d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "witnet-solidity-bridge", - "version": "0.7.16", + "version": "2.0.0", "description": "Witnet Solidity Bridge contracts for EVM-compatible chains", "main": "", "scripts": { From 2290209070b2fe79413cfc19086ec2b69c7893bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:08:24 +0100 Subject: [PATCH 008/149] feat: counter-factually bind core artifacts --- contracts/WitnetBytecodes.sol | 10 +- contracts/{requests => }/WitnetRequest.sol | 0 contracts/WitnetRequestBoard.sol | 11 +- contracts/WitnetRequestFactory.sol | 6 +- .../{requests => }/WitnetRequestTemplate.sol | 7 +- contracts/core/WitnetDeployer.sol | 86 +++++++++ contracts/{impls => core}/WitnetProxy.sol | 20 +- .../{impls => core}/WitnetUpgradableBase.sol | 26 +-- contracts/data/WitnetRequestFactoryData.sol | 4 +- contracts/interfaces/IWitnetRequestBoard.sol | 177 ++++++++++++++++++ .../IWitnetRequestBoardDeprecating.sol | 41 ---- .../interfaces/IWitnetRequestBoardEvents.sol | 17 -- .../IWitnetRequestBoardRequestor.sol | 73 -------- .../interfaces/IWitnetRequestBoardView.sol | 75 -------- contracts/interfaces/V2/IWitnetBytecodes.sol | 13 +- .../interfaces/V2/IWitnetBytecodesErrors.sol | 10 - .../interfaces/V2/IWitnetBytecodesEvents.sol | 11 -- .../interfaces/V2/IWitnetRequestBoard.sol | 24 --- .../interfaces/V2/IWitnetRequestFactory.sol | 9 +- contracts/libs/Create3.sol | 113 +++++++++++ contracts/patterns/Create2Factory.sol | 44 ----- contracts/patterns/Destructible.sol | 8 - 22 files changed, 432 insertions(+), 353 deletions(-) rename contracts/{requests => }/WitnetRequest.sol (100%) rename contracts/{requests => }/WitnetRequestTemplate.sol (86%) create mode 100644 contracts/core/WitnetDeployer.sol rename contracts/{impls => core}/WitnetProxy.sol (87%) rename contracts/{impls => core}/WitnetUpgradableBase.sol (78%) create mode 100644 contracts/interfaces/IWitnetRequestBoard.sol delete mode 100644 contracts/interfaces/IWitnetRequestBoardDeprecating.sol delete mode 100644 contracts/interfaces/IWitnetRequestBoardEvents.sol delete mode 100644 contracts/interfaces/IWitnetRequestBoardRequestor.sol delete mode 100644 contracts/interfaces/IWitnetRequestBoardView.sol delete mode 100644 contracts/interfaces/V2/IWitnetBytecodesErrors.sol delete mode 100644 contracts/interfaces/V2/IWitnetBytecodesEvents.sol delete mode 100644 contracts/interfaces/V2/IWitnetRequestBoard.sol create mode 100644 contracts/libs/Create3.sol delete mode 100644 contracts/patterns/Create2Factory.sol delete mode 100644 contracts/patterns/Destructible.sol diff --git a/contracts/WitnetBytecodes.sol b/contracts/WitnetBytecodes.sol index 3752d0dbe..f96fc4c10 100644 --- a/contracts/WitnetBytecodes.sol +++ b/contracts/WitnetBytecodes.sol @@ -4,12 +4,10 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./interfaces/V2/IWitnetBytecodes.sol"; -import "./interfaces/V2/IWitnetBytecodesErrors.sol"; -import "./interfaces/V2/IWitnetBytecodesEvents.sol"; abstract contract WitnetBytecodes is - IWitnetBytecodes, - IWitnetBytecodesErrors, - IWitnetBytecodesEvents -{} \ No newline at end of file + IWitnetBytecodes +{ + function class() virtual external view returns (bytes4); +} \ No newline at end of file diff --git a/contracts/requests/WitnetRequest.sol b/contracts/WitnetRequest.sol similarity index 100% rename from contracts/requests/WitnetRequest.sol rename to contracts/WitnetRequest.sol diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 6e146857e..8f47e1ba5 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -1,13 +1,18 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; -import "./interfaces/V2/IWitnetRequestBoard.sol"; +import "./WitnetBytecodes.sol"; +import "./WitnetRequestFactory.sol"; +import "./interfaces/IWitnetRequestBoard.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. abstract contract WitnetRequestBoard is IWitnetRequestBoard -{} \ No newline at end of file +{ + function class() virtual external view returns (bytes4); + function factory() virtual external view returns (WitnetRequestFactory); + function registry() virtual external view returns (WitnetBytecodes); +} \ No newline at end of file diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 221e74134..83bcf5a77 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -3,9 +3,13 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; +import "./WitnetBytecodes.sol"; import "./interfaces/V2/IWitnetRequestFactory.sol"; abstract contract WitnetRequestFactory is IWitnetRequestFactory -{} \ No newline at end of file +{ + function class() virtual external view returns (bytes4); + function registry() virtual external view returns (WitnetBytecodes); +} \ No newline at end of file diff --git a/contracts/requests/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol similarity index 86% rename from contracts/requests/WitnetRequestTemplate.sol rename to contracts/WitnetRequestTemplate.sol index 34cdd3e3f..54a3d9a3a 100644 --- a/contracts/requests/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -3,15 +3,16 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../interfaces/V2/IWitnetRequestFactory.sol"; +import "./WitnetBytecodes.sol"; +import "./WitnetRequestFactory.sol"; abstract contract WitnetRequestTemplate { event WitnetRequestBuilt(address indexed request, bytes32 indexed radHash, string[][] args); function class() virtual external view returns (bytes4); - function factory() virtual external view returns (IWitnetRequestFactory); - function registry() virtual external view returns (IWitnetBytecodes); + function factory() virtual external view returns (WitnetRequestFactory); + function registry() virtual external view returns (WitnetBytecodes); function version() virtual external view returns (string memory); function aggregator() virtual external view returns (bytes32); diff --git a/contracts/core/WitnetDeployer.sol b/contracts/core/WitnetDeployer.sol new file mode 100644 index 000000000..99250caf4 --- /dev/null +++ b/contracts/core/WitnetDeployer.sol @@ -0,0 +1,86 @@ +// SPDX-License-Identifier: MIT + +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, +/// @notice and CREATE3 (EIP-3171) factory for Witnet proxies. +/// @author Guillermo Díaz + +contract WitnetDeployer { + + /// @notice Use given `_initCode` and `_salt` to deploy a contract into a deterministic address. + /// @dev The address of deployed address will be determined by both the `_initCode` and the `_salt`, but not the address + /// @dev nor the nonce of the caller (i.e. see EIP-1014). + /// @param _initCode Creation code, including construction logic and input parameters. + /// @param _salt Arbitrary value to modify resulting address. + /// @return _deployed Just deployed contract address. + function deploy(bytes memory _initCode, bytes32 _salt) + external + returns (address _deployed) + { + _deployed = determineAddr(_initCode, _salt); + if (_deployed.code.length == 0) { + // address _justDeployed; + assembly { + _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) + } + require(_deployed != address(0), "WitnetDeployer: deployment failed"); + } + } + + /// @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. + /// @param _salt Arbitrary value to modify resulting address. + /// @return Deterministic contract address. + function determineAddr(bytes memory _initCode, bytes32 _salt) + public view + returns (address) + { + return address( + uint160(uint(keccak256( + abi.encodePacked( + bytes1(0xff), + address(this), + _salt, + keccak256(_initCode) + ) + ))) + ); + } + + function determineProxyAddr(bytes32 _salt) + public view + returns (address) + { + return Create3.determineAddr(_salt); + } + + function proxify(bytes32 _proxySalt, address _firstImplementation, bytes memory _initData) + external + returns (WitnetProxy) + { + address _proxyAddr = determineProxyAddr(_proxySalt); + if (_proxyAddr.code.length == 0) { + // deploy the WitnetProxy + Create3.deploy(_proxySalt, type(WitnetProxy).creationCode); + // settle first implementation address, + WitnetProxy(payable(_proxyAddr)).upgradeTo( + _firstImplementation, + // and initialize it, providing + abi.encode( + // the owner (i.e. the caller of this function) + msg.sender, + // and some (optional) initialization data + _initData + ) + ); + return WitnetProxy(payable(_proxyAddr)); + } else { + revert("WitnetDeployer: already proxified"); + } + } + +} \ No newline at end of file diff --git a/contracts/impls/WitnetProxy.sol b/contracts/core/WitnetProxy.sol similarity index 87% rename from contracts/impls/WitnetProxy.sol rename to contracts/core/WitnetProxy.sol index d640592a8..fb5249e1d 100644 --- a/contracts/impls/WitnetProxy.sol +++ b/contracts/core/WitnetProxy.sol @@ -6,7 +6,7 @@ pragma experimental ABIEncoderV2; import "../patterns/Upgradeable.sol"; /// @title WitnetProxy: upgradable delegate-proxy contract. -/// @author The Witnet Foundation. +/// @author Guillermo Díaz contract WitnetProxy { /// Event emitted every time the implementation gets updated. @@ -75,7 +75,7 @@ contract WitnetProxy { msg.sender ) ); - require(_wasCalled, "WitnetProxy: not compliant"); + require(_wasCalled, "WitnetProxy: uncompliant implementation"); require(abi.decode(_result, (bool)), "WitnetProxy: not authorized"); require( Upgradeable(_oldImplementation).proxiableUUID() == Upgradeable(_newImplementation).proxiableUUID(), @@ -84,16 +84,26 @@ contract WitnetProxy { } // Initialize new implementation within proxy-context storage: - (bool _wasInitialized,) = _newImplementation.delegatecall( + (bool _wasInitialized, bytes memory _returnData) = _newImplementation.delegatecall( abi.encodeWithSignature( "initialize(bytes)", _initData ) ); - require(_wasInitialized, "WitnetProxy: unable to initialize"); + if (!_wasInitialized) { + if (_returnData.length < 68) { + revert("WitnetProxy: initialization failed"); + } else { + assembly { + _returnData := add(_returnData, 0x04) + } + revert(abi.decode(_returnData, (string))); + } + } // If all checks and initialization pass, update implementation address: __proxySlot().implementation = _newImplementation; + emit Upgraded(_newImplementation); // Asserts new implementation complies w/ minimal implementation of Upgradeable interface: @@ -101,7 +111,7 @@ contract WitnetProxy { return _isUpgradable; } catch { - revert ("WitnetProxy: not compliant"); + revert ("WitnetProxy: uncompliant implementation"); } } diff --git a/contracts/impls/WitnetUpgradableBase.sol b/contracts/core/WitnetUpgradableBase.sol similarity index 78% rename from contracts/impls/WitnetUpgradableBase.sol rename to contracts/core/WitnetUpgradableBase.sol index 5d6bc17a6..57b316272 100644 --- a/contracts/impls/WitnetUpgradableBase.sol +++ b/contracts/core/WitnetUpgradableBase.sol @@ -4,7 +4,6 @@ pragma solidity >=0.8.0 <0.9.0; -import "../patterns/ERC165.sol"; import "../patterns/Ownable2Step.sol"; import "../patterns/ReentrancyGuard.sol"; import "../patterns/Upgradeable.sol"; @@ -12,20 +11,16 @@ import "../patterns/Upgradeable.sol"; import "./WitnetProxy.sol"; /// @title Witnet Request Board base contract, with an Upgradeable (and Destructible) touch. -/// @author The Witnet Foundation. +/// @author Guillermo Díaz abstract contract WitnetUpgradableBase is - ERC165, Ownable2Step, Upgradeable, ReentrancyGuard { bytes32 internal immutable _WITNET_UPGRADABLE_VERSION; - error AlreadyUpgraded(address implementation); - error NotCompliant(bytes4 interfaceId); - error NotUpgradable(address self); - error OnlyOwner(address owner); + address public immutable deployer = msg.sender; constructor( bool _upgradable, @@ -43,22 +38,7 @@ abstract contract WitnetUpgradableBase revert("WitnetUpgradableBase: not implemented"); } - - // ================================================================================================================ - // --- Overrides IERC165 interface -------------------------------------------------------------------------------- - - /// @dev See {IERC165-supportsInterface}. - function supportsInterface(bytes4 _interfaceId) - public view - virtual override - returns (bool) - { - return _interfaceId == type(Ownable2Step).interfaceId - || _interfaceId == type(Upgradeable).interfaceId - || super.supportsInterface(_interfaceId); - } - - + // ================================================================================================================ // --- Overrides 'Proxiable' -------------------------------------------------------------------------------------- diff --git a/contracts/data/WitnetRequestFactoryData.sol b/contracts/data/WitnetRequestFactoryData.sol index daa0e3d08..c2111fd30 100644 --- a/contracts/data/WitnetRequestFactoryData.sol +++ b/contracts/data/WitnetRequestFactoryData.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../requests/WitnetRequest.sol"; +import "../WitnetRequest.sol"; contract WitnetRequestFactoryData { @@ -37,7 +37,7 @@ contract WitnetRequestFactoryData { /// @notice Aggregator reducer hash. bytes32 aggregator; /// @notice Parent IWitnetRequestFactory from which this template was built. - IWitnetRequestFactory factory; + WitnetRequestFactory factory; /// Whether any of the sources is parameterized. bool parameterized; /// @notice Tally reducer hash. diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol new file mode 100644 index 000000000..a4a61fcbf --- /dev/null +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; + +import "../libs/WitnetV2.sol"; + +interface IWitnetRequestBoard { + + /// Emitted when a Witnet Data Request is posted to the WRB. + event PostedRequest(uint256 queryId, address from); + + /// Emitted when a Witnet-solved result is reported to the WRB. + event PostedResult(uint256 queryId, address from); + + /// Emitted when all data related to given query is deleted from the WRB. + event DeletedQuery(uint256 queryId, address from); + + + /// =============================================================================================================== + /// --- Requestor interface --------------------------------------------------------------------------------------- + + /// @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 checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); + + /// @notice Gets error code identifying some possible failure on the resolution of the given query. + /// @param _queryId The unique query identifier. + function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); + + /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param _queryId The unique query identifier. + function deleteQuery(uint256 _queryId) external returns (Witnet.Response memory); + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if: + /// @dev - provided reward is too low. + /// @dev - provided script is zero address. + /// @dev - provided script bytecode is empty. + /// @param addr The address of the IWitnetRequest contract that can provide the actual Data Request bytecode. + /// @return _queryId Unique query identifier. + function postRequest(IWitnetRequest addr) external payable returns (uint256 _queryId); + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @param slaHash The SLA hash of the data request to be solved by Witnet. + /// @return _queryId Unique query identifier. + function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @param slaParams The SLA params of the data request to be solved by Witnet. + /// @return _queryId Unique query identifier. + function postRequest(bytes32 radHash, WitnetV2.RadonSLA calldata slaParams) external payable returns (uint256 _queryId); + + /// @notice Increments the reward of a previously posted request by adding the transaction value to it. + /// @dev Updates request `gasPrice` in case this method is called with a higher + /// @dev gas price value than the one used in previous calls to `postRequest` or + /// @dev `upgradeReward`. + /// @dev Fails if the `_queryId` is not in 'Posted' status. + /// @dev Fails also in case the request `gasPrice` is increased, and the new + /// @dev reward value gets below new recalculated threshold. + /// @param _queryId The unique query identifier. + function upgradeReward(uint256 _queryId) external payable; + + + /// =============================================================================================================== + /// --- Reader interface ------------------------------------------------------------------------------------------ + + /// @notice Estimates the amount of reward we need to insert for a given gas price. + /// @param _gasPrice The gas price for which we need to calculate the rewards. + function estimateReward(uint256 _gasPrice) external view returns (uint256); + + /// @notice Returns next query id to be generated by the Witnet Request Board. + function getNextQueryId() external view returns (uint256); + + /// @notice Gets the whole Query data contents, if any, no matter its current status. + function getQueryData(uint256 _queryId) external view returns (Witnet.Query memory); + + /// @notice Gets current status of given query. + function getQueryStatus(uint256 _queryId) external view returns (Witnet.QueryStatus); + + /// @notice Retrieves the whole Request record posted to the Witnet Request Board. + /// @dev Fails if the `_queryId` is not valid or, if it has already been reported + /// @dev or deleted. + /// @param _queryId The unique identifier of a previously posted query. + function readRequest(uint256 _queryId) external view returns (Witnet.Request memory); + + /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. + /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode + /// @dev got changed after being posted. Returns empty array once it gets reported, + /// @dev or deleted. + /// @param _queryId The unique query identifier. + function readRequestBytecode(uint256 _queryId) external view returns (bytes memory); + + /// @notice Retrieves the gas price that any assigned reporter will have to pay when reporting + /// result to a previously posted Witnet data request. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifie + function readRequestGasPrice(uint256 _queryId) external view returns (uint256); + + /// @notice Retrieves the reward currently set for the referred query. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifier. + function readRequestReward(uint256 _queryId) external view returns (uint256); + + /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier. + function readResponse(uint256 _queryId) external view returns (Witnet.Response memory); + + /// @notice Retrieves error codes of given query. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or if no actual error. + /// @param _queryId The unique query identifier. + function readResponseDrTxHash(uint256 _queryId) external view returns (bytes32); + + /// @notice Retrieves the address that reported the result to a previously-posted request. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier. + function readResponseReporter(uint256 _queryId) external view returns (address); + + /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier. + function readResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); + + /// @notice Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier. + function readResponseTimestamp(uint256 _queryId) external view returns (uint256); + + + /// =============================================================================================================== + /// --- Deprecating funcionality v0.5 ----------------------------------------------------------------------------- + + /// Tell if a Witnet.Result is successful. + /// @param _result An instance of Witnet.Result. + /// @return `true` if successful, `false` if errored. + function isOk(Witnet.Result memory _result) external pure returns (bool); + + /// Decode a bytes value from a Witnet.Result as a `bytes32` value. + /// @param _result An instance of Witnet.Result. + /// @return The `bytes32` decoded from the Witnet.Result. + function asBytes32(Witnet.Result memory _result) external pure returns (bytes32); + + /// Generate a suitable error message for a member of `Witnet.ResultErrorCodes` and its corresponding arguments. + /// @dev WARN: Note that client contracts should wrap this function into a try-catch foreseing potential errors generated in this function + /// @param _result An instance of `Witnet.Result`. + /// @return A tuple containing the `CBORValue.Error memory` decoded from the `Witnet.Result`, plus a loggable error message. + function asErrorMessage(Witnet.Result memory _result) external pure returns (Witnet.ResultErrorCodes, string memory); + + /// Decode a natural numeric value from a Witnet.Result as a `uint` value. + /// @param _result An instance of Witnet.Result. + /// @return The `uint` decoded from the Witnet.Result. + function asUint64(Witnet.Result memory _result) external pure returns (uint64); + + /// Decode raw CBOR bytes into a Witnet.Result instance. + /// @param _cborBytes Raw bytes representing a CBOR-encoded value. + /// @return A `Witnet.Result` instance. + function resultFromCborBytes(bytes memory _cborBytes) external pure returns (Witnet.Result memory); + +} diff --git a/contracts/interfaces/IWitnetRequestBoardDeprecating.sol b/contracts/interfaces/IWitnetRequestBoardDeprecating.sol deleted file mode 100644 index 7e9a6cd09..000000000 --- a/contracts/interfaces/IWitnetRequestBoardDeprecating.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../libs/Witnet.sol"; - -/// @title Witnet Request Board info interface. -/// @author The Witnet Foundation. -interface IWitnetRequestBoardDeprecating { - - /// =============================================================================================================== - /// --- Deprecating funcionality v0.5 ----------------------------------------------------------------------------- - - /// Tell if a Witnet.Result is successful. - /// @param _result An instance of Witnet.Result. - /// @return `true` if successful, `false` if errored. - function isOk(Witnet.Result memory _result) external pure returns (bool); - - /// Decode a bytes value from a Witnet.Result as a `bytes32` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bytes32` decoded from the Witnet.Result. - function asBytes32(Witnet.Result memory _result) external pure returns (bytes32); - - /// Generate a suitable error message for a member of `Witnet.ResultErrorCodes` and its corresponding arguments. - /// @dev WARN: Note that client contracts should wrap this function into a try-catch foreseing potential errors generated in this function - /// @param _result An instance of `Witnet.Result`. - /// @return A tuple containing the `CBORValue.Error memory` decoded from the `Witnet.Result`, plus a loggable error message. - function asErrorMessage(Witnet.Result memory _result) external pure returns (Witnet.ResultErrorCodes, string memory); - - /// Decode a natural numeric value from a Witnet.Result as a `uint` value. - /// @param _result An instance of Witnet.Result. - /// @return The `uint` decoded from the Witnet.Result. - function asUint64(Witnet.Result memory _result) external pure returns (uint64); - - /// Decode raw CBOR bytes into a Witnet.Result instance. - /// @param _cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory _cborBytes) external pure returns (Witnet.Result memory); - -} diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/IWitnetRequestBoardEvents.sol deleted file mode 100644 index 54eb31ab4..000000000 --- a/contracts/interfaces/IWitnetRequestBoardEvents.sol +++ /dev/null @@ -1,17 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/// @title Witnet Request Board emitting events interface. -/// @author The Witnet Foundation. -interface IWitnetRequestBoardEvents { - - /// Emitted when a Witnet Data Request is posted to the WRB. - event PostedRequest(uint256 queryId, address from); - - /// Emitted when a Witnet-solved result is reported to the WRB. - event PostedResult(uint256 queryId, address from); - - /// Emitted when all data related to given query is deleted from the WRB. - event DeletedQuery(uint256 queryId, address from); -} diff --git a/contracts/interfaces/IWitnetRequestBoardRequestor.sol b/contracts/interfaces/IWitnetRequestBoardRequestor.sol deleted file mode 100644 index 2dbb46537..000000000 --- a/contracts/interfaces/IWitnetRequestBoardRequestor.sol +++ /dev/null @@ -1,73 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../libs/WitnetV2.sol"; - -/// @title Witnet Requestor Interface -/// @notice It defines how to interact with the Witnet Request Board in order to: -/// - request the execution of Witnet Radon scripts (data request); -/// - upgrade the resolution reward of any previously posted request, in case gas price raises in mainnet; -/// - read the result of any previously posted request, eventually reported by the Witnet DON. -/// - remove from storage all data related to past and solved data requests, and results. -/// @author The Witnet Foundation. -interface IWitnetRequestBoardRequestor { - - /// @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 checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); - - /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param _queryId The unique query identifier. - function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); - - /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function deleteQuery(uint256 _queryId) external returns (Witnet.Response memory); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @dev - provided script is zero address. - /// @dev - provided script bytecode is empty. - /// @param addr The address of the IWitnetRequest contract that can provide the actual Data Request bytecode. - /// @return _queryId Unique query identifier. - function postRequest(IWitnetRequest addr) external payable returns (uint256 _queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. - /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaHash The SLA hash of the data request to be solved by Witnet. - /// @return _queryId Unique query identifier. - function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. - /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaParams The SLA params of the data request to be solved by Witnet. - /// @return _queryId Unique query identifier. - function postRequest(bytes32 radHash, WitnetV2.RadonSLA calldata slaParams) external payable returns (uint256 _queryId); - - /// @notice Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Updates request `gasPrice` in case this method is called with a higher - /// @dev gas price value than the one used in previous calls to `postRequest` or - /// @dev `upgradeReward`. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @dev Fails also in case the request `gasPrice` is increased, and the new - /// @dev reward value gets below new recalculated threshold. - /// @param _queryId The unique query identifier. - function upgradeReward(uint256 _queryId) external payable; -} diff --git a/contracts/interfaces/IWitnetRequestBoardView.sol b/contracts/interfaces/IWitnetRequestBoardView.sol deleted file mode 100644 index d86000ee5..000000000 --- a/contracts/interfaces/IWitnetRequestBoardView.sol +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../libs/Witnet.sol"; - -/// @title Witnet Request Board info interface. -/// @author The Witnet Foundation. -interface IWitnetRequestBoardView { - - /// @notice Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) external view returns (uint256); - - /// @notice Returns next query id to be generated by the Witnet Request Board. - function getNextQueryId() external view returns (uint256); - - /// @notice Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 _queryId) external view returns (Witnet.Query memory); - - /// @notice Gets current status of given query. - function getQueryStatus(uint256 _queryId) external view returns (Witnet.QueryStatus); - - /// @notice Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `_queryId` is not valid or, if it has already been reported - /// @dev or deleted. - /// @param _queryId The unique identifier of a previously posted query. - function readRequest(uint256 _queryId) external view returns (Witnet.Request memory); - - /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode - /// @dev got changed after being posted. Returns empty array once it gets reported, - /// @dev or deleted. - /// @param _queryId The unique query identifier. - function readRequestBytecode(uint256 _queryId) external view returns (bytes memory); - - /// @notice Retrieves the gas price that any assigned reporter will have to pay when reporting - /// result to a previously posted Witnet data request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifie - function readRequestGasPrice(uint256 _queryId) external view returns (uint256); - - /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier. - function readRequestReward(uint256 _queryId) external view returns (uint256); - - /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponse(uint256 _queryId) external view returns (Witnet.Response memory); - - /// @notice Retrieves error codes of given query. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or if no actual error. - /// @param _queryId The unique query identifier. - function readResponseDrTxHash(uint256 _queryId) external view returns (bytes32); - - /// @notice Retrieves the address that reported the result to a previously-posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseReporter(uint256 _queryId) external view returns (address); - - /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); - - /// @notice Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseTimestamp(uint256 _queryId) external view returns (uint256); -} diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 4a0af9d62..938a61d80 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -6,11 +6,20 @@ import "../../libs/WitnetV2.sol"; interface IWitnetBytecodes { + error UnknownRadonRetrieval(bytes32 hash); + error UnknownRadonReducer(bytes32 hash); + error UnknownRadonRequest(bytes32 hash); + error UnknownRadonSLA(bytes32 hash); + + event NewDataProvider(uint256 index); + event NewRadonRetrievalHash(bytes32 hash); + event NewRadonReducerHash(bytes32 hash); + event NewRadHash(bytes32 hash); + event NewSlaHash(bytes32 hash); + function bytecodeOf(bytes32 radHash) external view returns (bytes memory); function bytecodeOf(bytes32 radHash, bytes32 slahHash) external view returns (bytes memory); - function class() external view returns (bytes4); - function hashOf( bytes32[] calldata sources, bytes32 aggregator, diff --git a/contracts/interfaces/V2/IWitnetBytecodesErrors.sol b/contracts/interfaces/V2/IWitnetBytecodesErrors.sol deleted file mode 100644 index 84d72e671..000000000 --- a/contracts/interfaces/V2/IWitnetBytecodesErrors.sol +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -interface IWitnetBytecodesErrors { - error UnknownRadonRetrieval(bytes32 hash); - error UnknownRadonReducer(bytes32 hash); - error UnknownRadonRequest(bytes32 hash); - error UnknownRadonSLA(bytes32 hash); -} \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetBytecodesEvents.sol b/contracts/interfaces/V2/IWitnetBytecodesEvents.sol deleted file mode 100644 index 35924f6d8..000000000 --- a/contracts/interfaces/V2/IWitnetBytecodesEvents.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -interface IWitnetBytecodesEvents { - event NewDataProvider(uint256 index); - event NewRadonRetrievalHash(bytes32 hash); - event NewRadonReducerHash(bytes32 hash); - event NewRadHash(bytes32 hash); - event NewSlaHash(bytes32 hash); -} \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol deleted file mode 100644 index 140441018..000000000 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -import "../IWitnetRequestBoardDeprecating.sol"; -import "../IWitnetRequestBoardEvents.sol"; -import "../IWitnetRequestBoardReporter.sol"; -import "../IWitnetRequestBoardRequestor.sol"; -import "../IWitnetRequestBoardView.sol"; - -import "./IWitnetRequestFactory.sol"; - -abstract contract IWitnetRequestBoard - is - IWitnetRequestBoardDeprecating, - IWitnetRequestBoardEvents, - IWitnetRequestBoardReporter, - IWitnetRequestBoardRequestor, - IWitnetRequestBoardView -{ - function class() virtual external view returns (bytes4); - function factory() virtual external view returns (IWitnetRequestFactory); - function registry() virtual external view returns (IWitnetBytecodes); -} diff --git a/contracts/interfaces/V2/IWitnetRequestFactory.sol b/contracts/interfaces/V2/IWitnetRequestFactory.sol index 81890a095..6a48ff8e1 100644 --- a/contracts/interfaces/V2/IWitnetRequestFactory.sol +++ b/contracts/interfaces/V2/IWitnetRequestFactory.sol @@ -2,16 +2,15 @@ pragma solidity >=0.7.0 <0.9.0; -import "./IWitnetBytecodes.sol"; - interface IWitnetRequestFactory { + event WitnetRequestTemplateBuilt(address template, bool parameterized); + function buildRequestTemplate( bytes32[] memory sourcesIds, bytes32 aggregatorId, bytes32 tallyId, uint16 resultDataMaxSize ) external returns (address template); - function class() external view returns (bytes4); - function registry() external view returns (IWitnetBytecodes); -} + +} \ No newline at end of file diff --git a/contracts/libs/Create3.sol b/contracts/libs/Create3.sol new file mode 100644 index 000000000..103f02026 --- /dev/null +++ b/contracts/libs/Create3.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity ^0.8.0; + +/// @notice Deploy to deterministic addresses without an initcode factor. +/// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/CREATE3.sol) +/// @author 0xSequence (https://github.com/0xSequence/create3/blob/master/contracts/Create3.sol) + +library Create3 { + + //--------------------------------------------------------------------------------// + // Opcode | Opcode + Arguments | Description | Stack View // + //--------------------------------------------------------------------------------// + // 0x36 | 0x36 | CALLDATASIZE | size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 0 size // + // 0x37 | 0x37 | CALLDATACOPY | // + // 0x36 | 0x36 | CALLDATASIZE | size // + // 0x3d | 0x3d | RETURNDATASIZE | 0 size // + // 0x34 | 0x34 | CALLVALUE | value 0 size // + // 0xf0 | 0xf0 | CREATE | newContract // + //--------------------------------------------------------------------------------// + // Opcode | Opcode + Arguments | Description | Stack View // + //--------------------------------------------------------------------------------// + // 0x67 | 0x67XXXXXXXXXXXXXXXX | PUSH8 bytecode | bytecode // + // 0x3d | 0x3d | RETURNDATASIZE | 0 bytecode // + // 0x52 | 0x52 | MSTORE | // + // 0x60 | 0x6008 | PUSH1 08 | 8 // + // 0x60 | 0x6018 | PUSH1 18 | 24 8 // + // 0xf3 | 0xf3 | RETURN | // + //--------------------------------------------------------------------------------// + + bytes internal constant CREATE3_FACTORY_BYTECODE = hex"67_36_3d_3d_37_36_3d_34_f0_3d_52_60_08_60_18_f3"; + bytes32 internal constant CREATE3_FACTORY_CODEHASH = keccak256(CREATE3_FACTORY_BYTECODE); + + /// @notice Creates a new contract with given `_creationCode` and `_salt` + /// @param _salt Salt of the contract creation, resulting address will be derivated from this value only + /// @param _creationCode Creation code (constructor) of the contract to be deployed, this value doesn't affect the resulting address + /// @return addr of the deployed contract, reverts on error + function deploy(bytes32 _salt, bytes memory _creationCode) + internal + returns (address) + { + return deploy(_salt, _creationCode, 0); + } + + /// @notice Creates a new contract with given `_creationCode`, `_salt` and `_value`. + /// @param _salt Salt of the contract creation, resulting address will be derivated from this value only + /// @param _creationCode Creation code (constructor) of the contract to be deployed, this value doesn't affect the resulting address + /// @param _value In WEI of ETH to be forwarded to child contract + /// @return _deployed The address of the deployed contract. + function deploy(bytes32 _salt, bytes memory _creationCode, uint256 _value) + internal + returns (address _deployed) + { + // Get target final address + _deployed = determineAddr(_salt); + if (_deployed.code.length != 0) revert("Create3: target already exists"); + + // Create factory + address _factory; + bytes memory _factoryBytecode = CREATE3_FACTORY_BYTECODE; + /// @solidity memory-safe-assembly + assembly { + // Deploy a factory contract with our pre-made bytecode via CREATE2. + // We start 32 bytes into the code to avoid copying the byte length. + _factory := create2(0, add(_factoryBytecode, 32), mload(_factoryBytecode), _salt) + } + require(_factory != address(0), "Create3: error creating factory"); + + // Use factory to deploy target + (bool _success, ) = _factory.call{value: _value}(_creationCode); + require(_success && _deployed.code.length != 0, "Create3: error creating target"); + } + + /// @notice Computes the resulting address of a contract deployed using address(this) and the given `_salt` + /// @param _salt Salt of the contract creation, resulting address will be derivated from this value only + /// @return addr of the deployed contract, reverts on error + /// @dev The address creation formula is: keccak256(rlp([keccak256(0xff ++ address(this) ++ _salt ++ keccak256(childBytecode))[12:], 0x01])) + function determineAddr(bytes32 _salt) internal view returns (address) { + address _factory = address( + uint160( + uint256( + keccak256( + abi.encodePacked( + hex'ff', + address(this), + _salt, + CREATE3_FACTORY_CODEHASH + ) + ) + ) + ) + ); + return address( + uint160( + uint256( + keccak256( + abi.encodePacked( + // 0xd6 = 0xc0 (short RLP prefix) + 0x16 (length of: 0x94 ++ _factory ++ 0x01) + // 0x94 = 0x80 + 0x14 (0x14 = the length of an address, 20 bytes, in hex) + hex"d6_94", + _factory, + // _factory's nonce on which the target is created: 0x1 + hex"01" + ) + ) + ) + ) + ); + } + +} \ No newline at end of file diff --git a/contracts/patterns/Create2Factory.sol b/contracts/patterns/Create2Factory.sol deleted file mode 100644 index 8456e590a..000000000 --- a/contracts/patterns/Create2Factory.sol +++ /dev/null @@ -1,44 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -/// @title Based on Singleton Factory (EIP-2470), authored by Guilherme Schmidt (Status Research & Development GmbH) -/// @notice Exposes CREATE2 (EIP-1014) to deploy bytecode on deterministic addresses based on initialization code and salt. - -contract Create2Factory { - - /// @notice Deploys `_initCode` using `_salt` for defining the deterministic address. - /// @param _initCode Initialization code. - /// @param _salt Arbitrary value to modify resulting address. - /// @return createdContract Created contract address. - function deploy(bytes memory _initCode, bytes32 _salt) - public - returns (address payable createdContract) - { - assembly { - createdContract := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) - } - } - - /// @notice Determine singleton contract address that might be created from this factory, given its `_initCode` and a `_salt`. - /// @param _initCode Initialization code. - /// @param _salt Arbitrary value to modify resulting address. - /// @return expectedAddr Expected contract address. - function determineAddr(bytes memory _initCode, bytes32 _salt) - public - view - returns (address) - { - return address( - uint160(uint(keccak256( - abi.encodePacked( - bytes1(0xff), - address(this), - _salt, - keccak256(_initCode) - ) - ))) - ); - } - -} \ No newline at end of file diff --git a/contracts/patterns/Destructible.sol b/contracts/patterns/Destructible.sol deleted file mode 100644 index 08b5f0669..000000000 --- a/contracts/patterns/Destructible.sol +++ /dev/null @@ -1,8 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.6.0 <0.9.0; - -interface Destructible { - /// @dev Self-destruct the whole contract. - function destruct() external; -} From 59a163f8ccdd32c70dc89477a6a9c8b65127d8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:10:37 +0100 Subject: [PATCH 009/149] chore: deprecate WPR --- contracts/impls/apps/WitnetPriceRouter.sol | 266 -------------------- contracts/interfaces/IWitnetPriceFeed.sol | 72 ------ contracts/interfaces/IWitnetPriceRouter.sol | 56 ----- 3 files changed, 394 deletions(-) delete mode 100644 contracts/impls/apps/WitnetPriceRouter.sol delete mode 100644 contracts/interfaces/IWitnetPriceFeed.sol delete mode 100644 contracts/interfaces/IWitnetPriceRouter.sol diff --git a/contracts/impls/apps/WitnetPriceRouter.sol b/contracts/impls/apps/WitnetPriceRouter.sol deleted file mode 100644 index 48fd600df..000000000 --- a/contracts/impls/apps/WitnetPriceRouter.sol +++ /dev/null @@ -1,266 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "@openzeppelin/contracts/utils/Strings.sol"; -import "../../interfaces/IWitnetPriceFeed.sol"; - -import "../../impls/WitnetUpgradableBase.sol"; -import "../../interfaces/IWitnetPriceRouter.sol"; - -contract WitnetPriceRouter - is - WitnetUpgradableBase, - IWitnetPriceRouter -{ - using Strings for uint256; - - struct Pair { - IERC165 pricefeed; - uint256 decimals; - string base; - string quote; - } - - struct Storage { - mapping (bytes4 => Pair) pairs; - mapping (address => bytes32) pricefeedId_; - bytes32[] supportedCurrencyPairs; - } - - constructor( - bool _upgradable, - bytes32 _versionTag - ) - WitnetUpgradableBase( - _upgradable, - _versionTag, - "io.witnet.proxiable.router" - ) - {} - - // ================================================================================================================ - // --- 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) - public - override - { - address _owner = owner(); - if (_owner == address(0)) { - // set owner if none set yet - _owner = msg.sender; - _transferOwnership(_owner); - } else { - // only owner can initialize: - if (msg.sender != _owner) { - revert WitnetUpgradableBase.OnlyOwner(_owner); - } - } - - if (__proxiable().implementation != address(0)) { - // current implementation cannot be initialized more than once: - if(__proxiable().implementation == base()) { - revert WitnetUpgradableBase.AlreadyUpgraded(base()); - } - } - __proxiable().implementation = base(); - - 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 = owner(); - return ( - // false if the WRB is intrinsically not upgradable, or `_from` is no owner - isUpgradable() - && _owner == _from - ); - } - - // ======================================================================== - // --- Implementation of 'IERC2362' --------------------------------------- - - /// Returns last valid price value and timestamp, as well as status of - /// the latest update request that got posted to the Witnet Request Board. - /// @dev Fails if the given currency pair is not currently supported. - /// @param _erc2362id Price pair identifier as specified in https://github.com/adoracles/ADOIPs/blob/main/adoip-0010.md - /// @return _lastPrice Last valid price reported back from the Witnet oracle. - /// @return _lastTimestamp EVM-timestamp of the last valid price. - /// @return _latestUpdateStatus Status code of latest update request that got posted to the Witnet Request Board: - /// - 200: latest update request was succesfully solved with no errors - /// - 400: latest update request was solved with errors - /// - 404: latest update request is still pending to be solved - function valueFor(bytes32 _erc2362id) - external view - virtual override - returns ( - int256 _lastPrice, - uint256 _lastTimestamp, - uint256 _latestUpdateStatus - ) - { - IWitnetPriceFeed _pricefeed = IWitnetPriceFeed(address(getPriceFeed(_erc2362id))); - require(address(_pricefeed) != address(0), "WitnetPriceRouter: unsupported currency pair"); - (_lastPrice, _lastTimestamp,, _latestUpdateStatus) = _pricefeed.lastValue(); - } - - - // ======================================================================== - // --- Implementation of 'IWitnetPriceRouter' --------------------------- - - /// Helper pure function: returns hash of the provided ERC2362-compliant currency pair caption (aka ID). - function currencyPairId(string memory _caption) - public pure - virtual override - returns (bytes32) - { - return keccak256(bytes(_caption)); - } - - /// Returns the ERC-165-compliant price feed contract currently serving - /// updates on the given currency pair. - function getPriceFeed(bytes32 _erc2362id) - public view - virtual override - returns (IERC165) - { - return __storage().pairs[bytes4(_erc2362id)].pricefeed; - } - - /// Returns human-readable ERC2362-based caption of the currency pair being - /// served by the given price feed contract address. - /// @dev Fails if the given price feed contract address is not currently - /// @dev registered in the router. - function getPriceFeedCaption(IERC165 _pricefeed) - public view - virtual override - returns (string memory) - { - require(supportsPriceFeed(_pricefeed), "WitnetPriceRouter: unknown"); - return lookupERC2362ID(__storage().pricefeedId_[address(_pricefeed)]); - } - - /// Returns human-readable caption of the ERC2362-based currency pair identifier, if known. - function lookupERC2362ID(bytes32 _erc2362id) - public view - virtual override - returns (string memory _caption) - { - Pair storage _pair = __storage().pairs[bytes4(_erc2362id)]; - if ( - bytes(_pair.base).length > 0 - && bytes(_pair.quote).length > 0 - ) { - _caption = string(abi.encodePacked( - "Price-", - _pair.base, - "/", - _pair.quote, - "-", - _pair.decimals.toString() - )); - } - } - - /// Register a price feed contract that will serve updates for the given currency pair. - /// @dev Setting zero address to a currency pair implies that it will not be served any longer. - /// @dev Otherwise, fails if the price feed contract does not support the `IWitnetPriceFeed` interface, - /// @dev or if given price feed is already serving another currency pair (within this WitnetPriceRouter instance). - function setPriceFeed( - IERC165 _pricefeed, - uint256 _decimals, - string calldata _base, - string calldata _quote - ) - public - virtual override - onlyOwner - { - if (address(_pricefeed) != address(0)) { - require( - _pricefeed.supportsInterface(type(IWitnetPriceFeed).interfaceId), - "WitnetPriceRouter: feed contract is not compliant with IWitnetPriceFeed" - ); - require( - __storage().pricefeedId_[address(_pricefeed)] == bytes32(0), - "WitnetPriceRouter: already serving a currency pair" - ); - } - bytes memory _caption = abi.encodePacked( - "Price-", - bytes(_base), - "/", - bytes(_quote), - "-", - _decimals.toString() - ); - bytes32 _erc2362id = keccak256(_caption); - - Pair storage _record = __storage().pairs[bytes4(_erc2362id)]; - address _currentPriceFeed = address(_record.pricefeed); - if (bytes(_record.base).length == 0) { - _record.base = _base; - _record.quote = _quote; - _record.decimals = _decimals; - __storage().supportedCurrencyPairs.push(_erc2362id); - } - else if (_currentPriceFeed != address(0)) { - __storage().pricefeedId_[_currentPriceFeed] = bytes32(0); - } - if (address(_pricefeed) != _currentPriceFeed) { - __storage().pricefeedId_[address(_pricefeed)] = _erc2362id; - } - _record.pricefeed = _pricefeed; - emit CurrencyPairSet(_erc2362id, _pricefeed); - } - - /// Returns list of known currency pairs IDs. - function supportedCurrencyPairs() - external view - virtual override - returns (bytes32[] memory) - { - return __storage().supportedCurrencyPairs; - } - - /// Returns `true` if given pair is currently being served by a compliant price feed contract. - function supportsCurrencyPair(bytes32 _erc2362id) - public view - virtual override - returns (bool) - { - return address(__storage().pairs[bytes4(_erc2362id)].pricefeed) != address(0); - } - - /// Returns `true` if given price feed contract is currently serving updates to any known currency pair. - function supportsPriceFeed(IERC165 _pricefeed) - public view - virtual override - returns (bool) - { - return __storage().pairs[bytes4(__storage().pricefeedId_[address(_pricefeed)])].pricefeed == _pricefeed; - } - - - /// ======================================================================= - /// --- Internal methods -------------------------------------------------- - - bytes32 internal constant _WITNET_PRICE_ROUTER_SLOTHASH = - /* keccak256("io.witnet.router.data") */ - 0x1ab0a3400242e9b47752f01347893fa91d77046d73895ccd575be9dd5025abd9; - - function __storage() internal pure returns (Storage storage ptr) { - assembly { - ptr.slot := _WITNET_PRICE_ROUTER_SLOTHASH - } - } -} diff --git a/contracts/interfaces/IWitnetPriceFeed.sol b/contracts/interfaces/IWitnetPriceFeed.sol deleted file mode 100644 index d5865f3da..000000000 --- a/contracts/interfaces/IWitnetPriceFeed.sol +++ /dev/null @@ -1,72 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -/// @title The Witnet Price Feed basic interface. -/// @dev Guides implementation of active price feed polling contracts. -/// @author The Witnet Foundation. - -interface IWitnetPriceFeed { - - /// Signals that a new price update request is being posted to the Witnet Request Board - event PriceFeeding(address indexed from, uint256 queryId, uint256 extraFee); - - /// @notice Estimates minimum fee amount in native currency to be paid when - /// @notice requesting a new price update. - /// @dev Actual fee depends on the gas price of the `requestUpdate()` transaction. - /// @param _gasPrice Gas price expected to be paid when calling `requestUpdate()` - function estimateUpdateFee(uint256 _gasPrice) external view returns (uint256); - - /// @notice Returns result of the last valid price update request successfully solved by the Witnet oracle. - function lastPrice() external view returns (int256); - - /// @notice Returns the EVM-timestamp when last valid price was reported back from the Witnet oracle. - function lastTimestamp() external view returns (uint256); - - /// @notice Returns tuple containing last valid price and timestamp, as well as status code of latest update - /// @notice request that got posted to the Witnet Request Board. - /// @return _lastPrice Last valid price reported back from the Witnet oracle. - /// @return _lastTimestamp EVM-timestamp of the last valid price. - /// @return _lastDrTxHash Hash of the Witnet Data Request that solved the last valid price. - /// @return _latestUpdateStatus Status code of the latest update request. - function lastValue() external view returns ( - int _lastPrice, - uint _lastTimestamp, - bytes32 _lastDrTxHash, - uint _latestUpdateStatus - ); - - /// @notice Returns identifier of the latest update request posted to the Witnet Request Board. - function latestQueryId() external view returns (uint256); - - /// @notice Returns hash of the Witnet Data Request that solved the latest update request. - /// @dev Returning 0 while the latest update request remains unsolved. - function latestUpdateDrTxHash() external view returns (bytes32); - - /// @notice Returns error message of latest update request posted to the Witnet Request Board. - /// @dev Returning empty string if the latest update request remains unsolved, or - /// @dev if it was succesfully solved with no errors. - function latestUpdateErrorMessage() external view returns (string memory); - - /// @notice Returns status code of latest update request posted to the Witnet Request Board: - /// @dev Status codes: - /// @dev - 200: update request was succesfully solved with no errors - /// @dev - 400: update request was solved with errors - /// @dev - 404: update request was not solved yet - function latestUpdateStatus() external view returns (uint256); - - /// @notice Returns `true` if latest update request posted to the Witnet Request Board - /// @notice has not been solved yet by the Witnet oracle. - function pendingUpdate() external view returns (bool); - - /// @notice Posts a new price update request to the Witnet Request Board. Requires payment of a fee - /// @notice that depends on the value of `tx.gasprice`. See `estimateUpdateFee(uint256)`. - /// @dev If previous update request was not solved yet, calling this method again allows - /// @dev upgrading the update fee if called with a higher `tx.gasprice` value. - function requestUpdate() external payable; - - /// @notice Tells whether this contract implements the interface defined by `interfaceId`. - /// @dev See the corresponding https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] - /// @dev to learn more about how these ids are created. - function supportsInterface(bytes4) external view returns (bool); -} diff --git a/contracts/interfaces/IWitnetPriceRouter.sol b/contracts/interfaces/IWitnetPriceRouter.sol deleted file mode 100644 index 23b25cfaa..000000000 --- a/contracts/interfaces/IWitnetPriceRouter.sol +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "ado-contracts/contracts/interfaces/IERC2362.sol"; -import "./IERC165.sol"; - -/// @title The Witnet Price Router basic interface. -/// @dev Guides implementation of price feeds aggregation contracts. -/// @author The Witnet Foundation. -abstract contract IWitnetPriceRouter - is - IERC2362 -{ - /// Emitted everytime a currency pair is attached to a new price feed contract - /// @dev See https://github.com/adoracles/ADOIPs/blob/main/adoip-0010.md - /// @dev to learn how these ids are created. - event CurrencyPairSet(bytes32 indexed erc2362ID, IERC165 pricefeed); - - /// @notice Helper pure function: returns hash of the provided ERC2362-compliant currency pair caption (aka ID). - function currencyPairId(string memory) external pure virtual returns (bytes32); - - /// @notice Returns the ERC-165-compliant price feed contract currently serving - /// @notice updates on the given currency pair. - function getPriceFeed(bytes32 _erc2362id) external view virtual returns (IERC165); - - /// @notice Returns human-readable ERC2362-based caption of the currency pair being - /// @notice served by the given price feed contract address. - /// @dev Should fail if the given price feed contract address is not currently - /// @dev registered in the router. - function getPriceFeedCaption(IERC165) external view virtual returns (string memory); - - /// @notice Returns human-readable caption of the ERC2362-based currency pair identifier, if known. - function lookupERC2362ID(bytes32 _erc2362id) external view virtual returns (string memory); - - /// @notice Register a price feed contract that will serve updates for the given currency pair. - /// @dev Setting zero address to a currency pair implies that it will not be served any longer. - /// @dev Otherwise, should fail if the price feed contract does not support the `IWitnetPriceFeed` interface, - /// @dev or if given price feed is already serving another currency pair (within this WitnetPriceRouter instance). - function setPriceFeed( - IERC165 _pricefeed, - uint256 _decimals, - string calldata _base, - string calldata _quote - ) - external virtual; - - /// @notice Returns list of known currency pairs IDs. - function supportedCurrencyPairs() external view virtual returns (bytes32[] memory); - - /// @notice Returns `true` if given pair is currently being served by a compliant price feed contract. - function supportsCurrencyPair(bytes32 _erc2362id) external view virtual returns (bool); - - /// @notice Returns `true` if given price feed contract is currently serving updates to any known currency pair. - function supportsPriceFeed(IERC165 _priceFeed) external view virtual returns (bool); -} From c9f68cde8b03bb371741697f374b28191878cd7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:13:06 +0100 Subject: [PATCH 010/149] chore/feat: refactor contracts folder and impl counter-factual binding --- .../core/customs/WitnetBytecodesNoSha256.sol | 7 +- .../WitnetRequestBoardTrustableBase.sol | 98 +++++++++---------- .../WitnetRequestBoardTrustableBoba.sol | 4 +- .../WitnetRequestBoardTrustableOvm2.sol | 5 +- .../WitnetRequestBoardTrustableReef.sol | 4 +- .../customs/WitnetRequestFactoryCfxCore.sol | 4 +- .../defaults}/WitnetBytecodesDefault.sol | 52 +++------- .../WitnetRequestBoardTrustableDefault.sol | 15 +-- .../defaults}/WitnetRequestFactoryDefault.sol | 58 +++-------- contracts/interfaces/IERC165.sol | 3 - contracts/interfaces/IERC20.sol | 3 - .../mocks/WitnetRandomnessMock.sol | 9 +- contracts/patterns/Payable.sol | 3 +- 13 files changed, 92 insertions(+), 173 deletions(-) rename contracts/{impls => }/core/customs/WitnetBytecodesNoSha256.sol (74%) rename contracts/{impls => }/core/customs/WitnetRequestBoardTrustableBase.sol (93%) rename contracts/{impls => }/core/customs/WitnetRequestBoardTrustableBoba.sol (97%) rename contracts/{impls => }/core/customs/WitnetRequestBoardTrustableOvm2.sol (95%) rename contracts/{impls => }/core/customs/WitnetRequestBoardTrustableReef.sol (94%) rename contracts/{impls => }/core/customs/WitnetRequestFactoryCfxCore.sol (88%) rename contracts/{impls/core => core/defaults}/WitnetBytecodesDefault.sol (93%) rename contracts/{impls/core => core/defaults}/WitnetRequestBoardTrustableDefault.sol (81%) rename contracts/{impls/core => core/defaults}/WitnetRequestFactoryDefault.sol (91%) delete mode 100644 contracts/interfaces/IERC165.sol delete mode 100644 contracts/interfaces/IERC20.sol rename contracts/{impls => }/mocks/WitnetRandomnessMock.sol (97%) diff --git a/contracts/impls/core/customs/WitnetBytecodesNoSha256.sol b/contracts/core/customs/WitnetBytecodesNoSha256.sol similarity index 74% rename from contracts/impls/core/customs/WitnetBytecodesNoSha256.sol rename to contracts/core/customs/WitnetBytecodesNoSha256.sol index 0d50f2621..684f27268 100644 --- a/contracts/impls/core/customs/WitnetBytecodesNoSha256.sol +++ b/contracts/core/customs/WitnetBytecodesNoSha256.sol @@ -3,14 +3,11 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../WitnetBytecodesDefault.sol"; +import "../defaults/WitnetBytecodesDefault.sol"; contract WitnetBytecodesNoSha256 is WitnetBytecodesDefault { - constructor( - bool _upgradable, - bytes32 _versionTag - ) + constructor(bool _upgradable, bytes32 _versionTag) WitnetBytecodesDefault(_upgradable, _versionTag) {} diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol b/contracts/core/customs/WitnetRequestBoardTrustableBase.sol similarity index 93% rename from contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol rename to contracts/core/customs/WitnetRequestBoardTrustableBase.sol index 8fcd213d7..927301e33 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableBase.sol @@ -3,14 +3,15 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../../WitnetUpgradableBase.sol"; -import "../../../WitnetRequestBoard.sol"; -import "../../../WitnetRequestFactory.sol"; +import "../WitnetUpgradableBase.sol"; +import "../../WitnetRequestBoard.sol"; +import "../../WitnetRequestFactory.sol"; -import "../../../data/WitnetBoardDataACLs.sol"; -import "../../../interfaces/IWitnetRequestBoardAdminACLs.sol"; -import "../../../libs/WitnetErrorsLib.sol"; -import "../../../patterns/Payable.sol"; +import "../../data/WitnetBoardDataACLs.sol"; +import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; +import "../../interfaces/IWitnetRequestBoardReporter.sol"; +import "../../libs/WitnetErrorsLib.sol"; +import "../../patterns/Payable.sol"; /// @title Witnet Request Board "trustable" base implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -22,17 +23,18 @@ abstract contract WitnetRequestBoardTrustableBase WitnetUpgradableBase, WitnetRequestBoard, WitnetBoardDataACLs, + IWitnetRequestBoardReporter, IWitnetRequestBoardAdminACLs, Payable { using Witnet for bytes; using Witnet for Witnet.Result; - bytes4 public immutable override class = type(WitnetRequestBoard).interfaceId; - IWitnetRequestFactory immutable public override factory; + bytes4 public immutable override class = type(IWitnetRequestBoard).interfaceId; + WitnetRequestFactory immutable public override factory; constructor( - IWitnetRequestFactory _factory, + WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, address _currency @@ -44,14 +46,10 @@ abstract contract WitnetRequestBoardTrustableBase "io.witnet.proxiable.board" ) { - require( - _factory.class() == type(WitnetRequestFactory).interfaceId, - "WitnetRequestBoard: uncompliant factory" - ); factory = _factory; } - function registry() public view virtual override returns (IWitnetBytecodes) { + function registry() public view virtual override returns (WitnetBytecodes) { return factory.registry(); } @@ -60,23 +58,23 @@ abstract contract WitnetRequestBoardTrustableBase } /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 - /// @dev (i.e. calling methods in IWitnetRequestBoardDeprecating) + /// @dev (i.e. calling methods in IWitnetRequestBoard) /// @dev (Until 'function ... abi(...)' modifier is allegedly supported in solc versions >= 0.9.1) // solhint-disable-next-line payable-fallback fallback() override external { /* solhint-disable no-complex-fallback */ bytes4 _newSig = msg.sig; if (msg.sig == 0xA8604C1A) { - // IWitnetRequestParser.isOk({bool,CBOR}) --> IWitnetRequestBoardDeprecating.isOk({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoardDeprecating.isOk.selector; + // IWitnetRequestParser.isOk({bool,CBOR}) --> IWitnetRequestBoard.isOk({bool,WitnetCBOR.CBOR}) + _newSig = IWitnetRequestBoard.isOk.selector; } else if (msg.sig == 0xCF62D115) { - // IWitnetRequestParser.asBytes32({bool,CBOR}) --> IWitnetRequestBoardDeprecating.asBytes32({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoardDeprecating.asBytes32.selector; + // IWitnetRequestParser.asBytes32({bool,CBOR}) --> IWitnetRequestBoard.asBytes32({bool,WitnetCBOR.CBOR}) + _newSig = IWitnetRequestBoard.asBytes32.selector; } else if (msg.sig == 0xBC7E25FF) { - // IWitnetRequestParser.asUint64({bool,CBOR}) --> IWitnetRequestBoardDeprecating.asUint64({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoardDeprecating.asUint64.selector; + // IWitnetRequestParser.asUint64({bool,CBOR}) --> IWitnetRequestBoard.asUint64({bool,WitnetCBOR.CBOR}) + _newSig = IWitnetRequestBoard.asUint64.selector; } else if (msg.sig == 0xD74803BE) { - // IWitnetRequestParser.asErrorMessage({bool,CBOR}) --> IWitnetRequestBoardDeprecating.asErrorMessage({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoardDeprecating.asErrorMessage.selector; + // IWitnetRequestParser.asErrorMessage({bool,CBOR}) --> IWitnetRequestBoard.asErrorMessage({bool,WitnetCBOR.CBOR}) + _newSig = IWitnetRequestBoard.asErrorMessage.selector; } if (_newSig != msg.sig) { address _self = address(this); @@ -103,21 +101,6 @@ abstract contract WitnetRequestBoardTrustableBase } - // ================================================================================================================ - // --- Overrides IERC165 interface -------------------------------------------------------------------------------- - - /// @dev See {IERC165-supportsInterface}. - function supportsInterface(bytes4 _interfaceId) - public view - virtual override - returns (bool) - { - return _interfaceId == type(WitnetRequestBoard).interfaceId - || _interfaceId == type(IWitnetRequestBoardAdminACLs).interfaceId - || super.supportsInterface(_interfaceId); - } - - // ================================================================================================================ // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------- @@ -128,16 +111,22 @@ abstract contract WitnetRequestBoardTrustableBase override { address _owner = __storage().owner; + address[] memory _reporters; + if (_owner == address(0)) { - // set owner if none set yet - _owner = msg.sender; + // get owner (and reporters) from _initData + bytes memory _reportersRaw; + (_owner, _reportersRaw) = abi.decode(_initData, (address, bytes)); __storage().owner = _owner; + _reporters = abi.decode(_reportersRaw, (address[])); } else { // only owner can initialize: require( msg.sender == _owner, - "WitnetRequestBoardTrustableBase: only owner" + "WitnetRequestBoardTrustableBase: not the owner" ); + // get reporters from _initData + _reporters = abi.decode(_initData, (address[])); } if (__storage().base != address(0)) { @@ -149,10 +138,13 @@ abstract contract WitnetRequestBoardTrustableBase } __storage().base = base(); - emit Upgraded(msg.sender, base(), codehash(), version()); + require(address(factory).code.length > 0, "WitnetRequestBoardTrustableBase: inexistent factory"); + require(factory.class() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory"); - // Do actual base initialization: - setReporters(abi.decode(_initData, (address[]))); + // Set reporters + __setReporters(_reporters); + + emit Upgraded(_owner, base(), codehash(), version()); } /// Tells whether provided address could eventually upgrade the contract. @@ -210,11 +202,7 @@ abstract contract WitnetRequestBoardTrustableBase override onlyOwner { - for (uint ix = 0; ix < _reporters.length; ix ++) { - address _reporter = _reporters[ix]; - _acls().isReporter_[_reporter] = true; - } - emit ReportersSet(_reporters); + __setReporters(_reporters); } /// Removes given addresses from the active reporters control list. @@ -756,7 +744,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardDeprecating' interface ------------------------------------------ + // --- Full implementation of 'IWitnetRequestBoard' interface ------------------------------------------ /// Tell if a Witnet.Result is successful. /// @param _result An instance of Witnet.Result. @@ -847,4 +835,12 @@ abstract contract WitnetRequestBoardTrustableBase // Request data won't be needed anymore, so it can just get deleted right now: delete _query.request; } + + function __setReporters(address[] memory _reporters) internal { + for (uint ix = 0; ix < _reporters.length; ix ++) { + address _reporter = _reporters[ix]; + _acls().isReporter_[_reporter] = true; + } + emit ReportersSet(_reporters); + } } \ No newline at end of file diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol b/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol similarity index 97% rename from contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol rename to contracts/core/customs/WitnetRequestBoardTrustableBoba.sol index e917dcb7c..372ef5737 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableBoba.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol @@ -9,7 +9,7 @@ pragma experimental ABIEncoderV2; import "./WitnetRequestBoardTrustableBase.sol"; // Uses: -import "../../../interfaces/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title Witnet Request Board OVM-compatible (Optimism) "trustable" implementation. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -33,7 +33,7 @@ contract WitnetRequestBoardTrustableBoba } constructor( - IWitnetRequestFactory _factory, + WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _layer2ReportResultGasLimit, diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol similarity index 95% rename from contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol rename to contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index e5b1ae03b..34e8cc2a2 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -5,7 +5,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../WitnetRequestBoardTrustableDefault.sol"; +import "../defaults/WitnetRequestBoardTrustableDefault.sol"; // solhint-disable-next-line interface OVM_GasPriceOracle { @@ -19,13 +19,12 @@ interface OVM_GasPriceOracle { /// @author The Witnet Foundation contract WitnetRequestBoardTrustableOvm2 is - Destructible, WitnetRequestBoardTrustableDefault { OVM_GasPriceOracle immutable public gasPriceOracleL1; constructor( - IWitnetRequestFactory _factory, + WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit diff --git a/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol similarity index 94% rename from contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol rename to contracts/core/customs/WitnetRequestBoardTrustableReef.sol index f3d688928..ed7ea2fde 100644 --- a/contracts/impls/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -6,7 +6,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; // Inherits from: -import "../WitnetRequestBoardTrustableDefault.sol"; +import "../defaults/WitnetRequestBoardTrustableDefault.sol"; /// @title Witnet Request Board OVM-compatible (Optimism) "trustable" implementation. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -18,7 +18,7 @@ contract WitnetRequestBoardTrustableReef WitnetRequestBoardTrustableDefault { constructor( - IWitnetRequestFactory _factory, + WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit diff --git a/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol similarity index 88% rename from contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol rename to contracts/core/customs/WitnetRequestFactoryCfxCore.sol index faa836f73..da2b86498 100644 --- a/contracts/impls/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol @@ -3,11 +3,11 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../WitnetRequestFactoryDefault.sol"; +import "../defaults/WitnetRequestFactoryDefault.sol"; contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { constructor( - IWitnetBytecodes _registry, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag ) diff --git a/contracts/impls/core/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol similarity index 93% rename from contracts/impls/core/WitnetBytecodesDefault.sol rename to contracts/core/defaults/WitnetBytecodesDefault.sol index 94f6723a4..79f4f7ebb 100644 --- a/contracts/impls/core/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -2,12 +2,9 @@ pragma solidity >=0.8.4 <0.9.0; -import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; - import "../WitnetUpgradableBase.sol"; import "../../WitnetBytecodes.sol"; import "../../data/WitnetBytecodesData.sol"; - import "../../libs/WitnetEncodingLib.sol"; /// @title Witnet Request Board EVM-default implementation contract. @@ -20,9 +17,7 @@ contract WitnetBytecodesDefault WitnetBytecodes, WitnetBytecodesData, WitnetUpgradableBase -{ - using ERC165Checker for address; - +{ using Witnet for bytes; using Witnet for string; @@ -33,12 +28,9 @@ contract WitnetBytecodesDefault using WitnetEncodingLib for WitnetV2.RadonSLA; using WitnetEncodingLib for WitnetV2.RadonDataTypes; - bytes4 public immutable override class = type(WitnetBytecodes).interfaceId; + bytes4 public immutable override class = type(IWitnetBytecodes).interfaceId; - constructor( - bool _upgradable, - bytes32 _versionTag - ) + constructor(bool _upgradable, bytes32 _versionTag) WitnetUpgradableBase( _upgradable, _versionTag, @@ -50,20 +42,6 @@ contract WitnetBytecodesDefault revert("WitnetBytecodesDefault: no transfers"); } - - // ================================================================================================================ - // --- Overrides IERC165 interface -------------------------------------------------------------------------------- - - /// @dev See {IERC165-supportsInterface}. - function supportsInterface(bytes4 _interfaceId) - public view - virtual override - returns (bool) - { - return _interfaceId == type(WitnetBytecodes).interfaceId - || super.supportsInterface(_interfaceId); - } - // ================================================================================================================ // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- @@ -117,32 +95,32 @@ contract WitnetBytecodesDefault /// @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) + function initialize(bytes memory _initData) public override { address _owner = __bytecodes().owner; if (_owner == address(0)) { - // set owner if none set yet - _owner = msg.sender; + // 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 WitnetUpgradableBase.OnlyOwner(_owner); + revert("WitnetBytecodesDefault: not the owner"); } } if (__bytecodes().base != address(0)) { // current implementation cannot be initialized more than once: if(__bytecodes().base == base()) { - revert WitnetUpgradableBase.AlreadyUpgraded(base()); + revert("WitnetBytecodesDefault: already initialized"); } } __bytecodes().base = base(); emit Upgraded( - msg.sender, + _owner, base(), codehash(), version() @@ -177,7 +155,7 @@ contract WitnetBytecodesDefault { WitnetV2.RadonSLA storage __sla = __database().slas[_slaHash]; if (__sla.numWitnesses == 0) { - revert IWitnetBytecodesErrors.UnknownRadonSLA(_slaHash); + revert UnknownRadonSLA(_slaHash); } bytes memory _radBytecode = bytecodeOf(_radHash); return abi.encodePacked( @@ -290,7 +268,7 @@ contract WitnetBytecodesDefault { _source = __database().retrievals[_hash]; if (_source.method == WitnetV2.DataRequestMethods.Unknown) { - revert IWitnetBytecodesErrors.UnknownRadonRetrieval(_hash); + revert UnknownRadonRetrieval(_hash); } } @@ -300,7 +278,7 @@ contract WitnetBytecodesDefault returns (uint8) { if (__database().retrievals[_hash].method == WitnetV2.DataRequestMethods.Unknown) { - revert IWitnetBytecodesErrors.UnknownRadonRetrieval(_hash); + revert UnknownRadonRetrieval(_hash); } return __database().retrievals[_hash].argsCount; } @@ -311,7 +289,7 @@ contract WitnetBytecodesDefault returns (WitnetV2.RadonDataTypes) { if (__database().retrievals[_hash].method == WitnetV2.DataRequestMethods.Unknown) { - revert IWitnetBytecodesErrors.UnknownRadonRetrieval(_hash); + revert UnknownRadonRetrieval(_hash); } return __database().retrievals[_hash].resultDataType; } @@ -323,7 +301,7 @@ contract WitnetBytecodesDefault { _reducer = __database().reducers[_hash]; if (uint8(_reducer.opcode) == 0) { - revert IWitnetBytecodesErrors.UnknownRadonReducer(_hash); + revert UnknownRadonReducer(_hash); } } @@ -386,7 +364,7 @@ contract WitnetBytecodesDefault { sla = __database().slas[_slaHash]; if (sla.numWitnesses == 0) { - revert IWitnetBytecodesErrors.UnknownRadonSLA(_slaHash); + revert UnknownRadonSLA(_slaHash); } } diff --git a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol similarity index 81% rename from contracts/impls/core/WitnetRequestBoardTrustableDefault.sol rename to contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index d51221db4..4cb418ca7 100644 --- a/contracts/impls/core/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -5,8 +5,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./customs/WitnetRequestBoardTrustableBase.sol"; -import "../../patterns/Destructible.sol"; +import "../customs/WitnetRequestBoardTrustableBase.sol"; /// @title Witnet Request Board "trustable" implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. @@ -15,13 +14,12 @@ import "../../patterns/Destructible.sol"; /// @author The Witnet Foundation contract WitnetRequestBoardTrustableDefault is - Destructible, WitnetRequestBoardTrustableBase { uint256 internal immutable _ESTIMATED_REPORT_RESULT_GAS; constructor( - IWitnetRequestFactory _factory, + WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasLimit @@ -51,15 +49,6 @@ contract WitnetRequestBoardTrustableDefault } - // ================================================================================================================ - // --- Overrides 'Destructible' ----------------------------------------------------------------------------------- - - /// Destroys current instance. Only callable by the owner. - function destruct() external override onlyOwner { - selfdestruct(payable(msg.sender)); - } - - // ================================================================================================================ // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- diff --git a/contracts/impls/core/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol similarity index 91% rename from contracts/impls/core/WitnetRequestFactoryDefault.sol rename to contracts/core/defaults/WitnetRequestFactoryDefault.sol index bc95c6f93..9c975deb7 100644 --- a/contracts/impls/core/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -3,12 +3,11 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; +import "../WitnetUpgradableBase.sol"; import "../../WitnetBytecodes.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestFactoryData.sol"; -import "../../impls/WitnetUpgradableBase.sol"; import "../../patterns/Clonable.sol"; -import "../../requests/WitnetRequest.sol"; contract WitnetRequestFactoryDefault is @@ -19,7 +18,7 @@ contract WitnetRequestFactoryDefault WitnetUpgradableBase { /// @notice Reference to Witnet Data Requests Bytecode Registry - IWitnetBytecodes immutable public override(IWitnetRequestFactory, WitnetRequestTemplate) registry; + WitnetBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; modifier onlyDelegateCalls override(Clonable, Upgradeable) { require( @@ -47,7 +46,7 @@ contract WitnetRequestFactoryDefault } constructor( - IWitnetBytecodes _registry, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag ) @@ -57,10 +56,6 @@ contract WitnetRequestFactoryDefault "io.witnet.requests.factory" ) { - require( - _registry.class() == type(WitnetBytecodes).interfaceId, - "WitnetRequestFactoryDefault: uncompliant registry" - ); registry = _registry; // let logic contract be used as a factory, while avoiding further initializations: __proxiable().proxy = address(this); @@ -184,7 +179,7 @@ contract WitnetRequestFactoryDefault } function class() - virtual override(IWitnetRequestFactory, WitnetRequestTemplate) + virtual override(WitnetRequestFactory, WitnetRequestTemplate) external view returns (bytes4) { @@ -192,7 +187,7 @@ contract WitnetRequestFactoryDefault address(this) == _SELF || address(this) == __proxy() ) { - return type(WitnetRequestFactory).interfaceId; + return type(IWitnetRequestFactory).interfaceId; } else if (__witnetRequest().radHash != bytes32(0)) { return type(WitnetRequest).interfaceId; } else { @@ -201,34 +196,6 @@ contract WitnetRequestFactoryDefault } - // ================================================================================================================ - // ---Overrides 'IERC165' ----------------------------------------------------------------------------------------- - - /// @dev See {IERC165-supportsInterface}. - function supportsInterface(bytes4 _interfaceId) - public view - virtual override - returns (bool) - { - if (__witnetRequest().radHash != bytes32(0)) { - return ( - _interfaceId == type(IWitnetRequest).interfaceId - || _interfaceId == type(WitnetRequest).interfaceId - || _interfaceId == type(WitnetRequestTemplate).interfaceId - ); - } - else if (__witnetRequestTemplate().retrievals.length > 0) { - return (_interfaceId == type(WitnetRequestTemplate).interfaceId); - } - else { - return ( - _interfaceId == type(WitnetRequestFactory).interfaceId - || super.supportsInterface(_interfaceId) - ); - } - } - - // ================================================================================================================ // --- Overrides 'Ownable2Step' ----------------------------------------------------------------------------------- @@ -281,7 +248,7 @@ contract WitnetRequestFactoryDefault /// @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) + function initialize(bytes memory _initData) virtual override public onlyDelegateCalls @@ -291,13 +258,13 @@ contract WitnetRequestFactoryDefault address _owner = __witnetRequestFactory().owner; if (_owner == address(0)) { - // set owner if none set yet - _owner = msg.sender; + // set owner from the one specified in _initData + _owner = abi.decode(_initData, (address)); __witnetRequestFactory().owner = _owner; } else { // only owner can initialize the proxy if (msg.sender != _owner) { - revert WitnetUpgradableBase.OnlyOwner(_owner); + revert("WitnetRequestFactoryDefault: not the owner"); } } @@ -309,11 +276,14 @@ contract WitnetRequestFactoryDefault if (__proxiable().implementation != address(0)) { // same implementation cannot be initialized more than once: if(__proxiable().implementation == base()) { - revert WitnetUpgradableBase.AlreadyUpgraded(base()); + revert("WitnetRequestFactoryDefault: already initialized"); } } __proxiable().implementation = base(); + require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent registry"); + require(registry.class() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant registry"); + emit Upgraded(msg.sender, base(), codehash(), version()); } @@ -411,7 +381,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (IWitnetRequestFactory) + returns (WitnetRequestFactory) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { diff --git a/contracts/interfaces/IERC165.sol b/contracts/interfaces/IERC165.sol deleted file mode 100644 index 27d6b9ff4..000000000 --- a/contracts/interfaces/IERC165.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; diff --git a/contracts/interfaces/IERC20.sol b/contracts/interfaces/IERC20.sol deleted file mode 100644 index 35ce7b279..000000000 --- a/contracts/interfaces/IERC20.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/impls/mocks/WitnetRandomnessMock.sol b/contracts/mocks/WitnetRandomnessMock.sol similarity index 97% rename from contracts/impls/mocks/WitnetRandomnessMock.sol rename to contracts/mocks/WitnetRandomnessMock.sol index 3a5232eb9..f13ef281a 100644 --- a/contracts/impls/mocks/WitnetRandomnessMock.sol +++ b/contracts/mocks/WitnetRandomnessMock.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../apps/WitnetRandomnessProxiable.sol"; +import "../apps/WitnetRandomness.sol"; /// @title WitnetRandomness mock contract implementation. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. @@ -13,7 +13,7 @@ import "../apps/WitnetRandomnessProxiable.sol"; /// @author Witnet Foundation. contract WitnetRandomnessMock is - WitnetRandomnessProxiable + WitnetRandomness { uint8 internal __mockRandomizeLatencyBlocks; uint256 internal __mockRandomizeFee; @@ -27,10 +27,7 @@ contract WitnetRandomnessMock uint8 _mockRandomizeLatencyBlocks, uint256 _mockRandomizeFee ) - WitnetRandomnessProxiable( - _wrb, - bytes32("mocked") - ) + WitnetRandomness(msg.sender, _wrb) { __mockRandomizeLatencyBlocks = _mockRandomizeLatencyBlocks; __mockRandomizeFee = _mockRandomizeFee; diff --git a/contracts/patterns/Payable.sol b/contracts/patterns/Payable.sol index 6ff570307..e31a8d1da 100644 --- a/contracts/patterns/Payable.sol +++ b/contracts/patterns/Payable.sol @@ -1,8 +1,7 @@ // SPDX-License-Identifier: MIT - pragma solidity >=0.6.0 <0.9.0; -import "../interfaces/IERC20.sol"; +import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; abstract contract Payable { IERC20 public immutable currency; From cc601b81e7783ba598cb93292dd9c068dfa6fe49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:13:50 +0100 Subject: [PATCH 011/149] chore: refactor app-oracles --- contracts/UsingWitnet.sol | 2 +- contracts/WitnetPriceFeeds.sol | 23 -- contracts/WitnetRandomness.sol | 25 -- contracts/{ => apps}/WitnetFeeds.sol | 12 +- .../WitnetPriceFeeds.sol} | 292 +++++++++--------- .../WitnetRandomness.sol} | 199 +++++------- contracts/interfaces/IWitnetRandomness.sol | 2 +- contracts/interfaces/V2/IWitnetFeeds.sol | 10 +- contracts/interfaces/V2/IWitnetFeedsAdmin.sol | 6 +- .../interfaces/V2/IWitnetFeedsEvents.sol | 12 - contracts/libs/WitnetPriceFeedsLib.sol | 4 +- 11 files changed, 241 insertions(+), 346 deletions(-) delete mode 100644 contracts/WitnetPriceFeeds.sol delete mode 100644 contracts/WitnetRandomness.sol rename contracts/{ => apps}/WitnetFeeds.sol (67%) rename contracts/{impls/apps/WitnetPriceFeedsUpgradable.sol => apps/WitnetPriceFeeds.sol} (82%) rename contracts/{impls/apps/WitnetRandomnessProxiable.sol => apps/WitnetRandomness.sol} (82%) delete mode 100644 contracts/interfaces/V2/IWitnetFeedsEvents.sol diff --git a/contracts/UsingWitnet.sol b/contracts/UsingWitnet.sol index de2ff6ceb..dbd08f8e9 100644 --- a/contracts/UsingWitnet.sol +++ b/contracts/UsingWitnet.sol @@ -16,7 +16,7 @@ abstract contract UsingWitnet { /// @param _wrb The WitnetRequestBoard entry point address. constructor(WitnetRequestBoard _wrb) { - require(address(_wrb) != address(0), "UsingWitnet: no WRB"); + require(address(_wrb) != address(0), "UsingWitnet: no WRB?"); __witnet = _wrb; } diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol deleted file mode 100644 index 930dde290..000000000 --- a/contracts/WitnetPriceFeeds.sol +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "ado-contracts/contracts/interfaces/IERC2362.sol"; -import "./interfaces/V2/IWitnetPriceFeeds.sol"; -import "./interfaces/V2/IWitnetPriceSolverDeployer.sol"; -import "./WitnetFeeds.sol"; - -abstract contract WitnetPriceFeeds - is - IERC2362, - IWitnetPriceFeeds, - IWitnetPriceSolverDeployer, - WitnetFeeds -{ - constructor() - WitnetFeeds( - WitnetV2.RadonDataTypes.Integer, - "Price-" - ) - {} -} \ No newline at end of file diff --git a/contracts/WitnetRandomness.sol b/contracts/WitnetRandomness.sol deleted file mode 100644 index 98fc8384b..000000000 --- a/contracts/WitnetRandomness.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./interfaces/IWitnetRandomness.sol"; -import "./interfaces/IWitnetRandomnessAdmin.sol"; - -abstract contract WitnetRandomness - is - IWitnetRandomness, - IWitnetRandomnessAdmin -{ - /// Deploys a minimal-proxy clone in which the `witnetRandomnessRequest` is owned by the cloner, - /// @dev This function should always provide a new address, no matter how many times - /// @dev is actually called from the same `msg.sender`. - function clone() virtual external returns (WitnetRandomness); - - /// Deploys a minimal-proxy clone in which the `witnetRandomnessRequest` is owned by the cloner, - /// and whose address will be determined by the provided salt. - /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy - /// @dev the clone. Using the same `_salt` multiple time will revert, since - /// @dev no contract can be deployed more than once at the same address. - function cloneDeterministic(bytes32 salt) virtual external returns (WitnetRandomness); -} \ No newline at end of file diff --git a/contracts/WitnetFeeds.sol b/contracts/apps/WitnetFeeds.sol similarity index 67% rename from contracts/WitnetFeeds.sol rename to contracts/apps/WitnetFeeds.sol index 39c4be992..02b5db958 100644 --- a/contracts/WitnetFeeds.sol +++ b/contracts/apps/WitnetFeeds.sol @@ -1,18 +1,16 @@ // SPDX-License-Identifier: MIT -pragma solidity >=0.8.0 <0.9.0; +pragma solidity >=0.7.0 <0.9.0; -import "./interfaces/V2/IFeeds.sol"; -import "./interfaces/V2/IWitnetFeeds.sol"; -import "./interfaces/V2/IWitnetFeedsAdmin.sol"; -import "./interfaces/V2/IWitnetFeedsEvents.sol"; +import "../interfaces/V2/IFeeds.sol"; +import "../interfaces/V2/IWitnetFeeds.sol"; +import "../interfaces/V2/IWitnetFeedsAdmin.sol"; abstract contract WitnetFeeds is IFeeds, IWitnetFeeds, - IWitnetFeedsAdmin, - IWitnetFeedsEvents + IWitnetFeedsAdmin { WitnetV2.RadonDataTypes immutable public override dataType; diff --git a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol b/contracts/apps/WitnetPriceFeeds.sol similarity index 82% rename from contracts/impls/apps/WitnetPriceFeedsUpgradable.sol rename to contracts/apps/WitnetPriceFeeds.sol index 7647677c0..bcf984ab2 100644 --- a/contracts/impls/apps/WitnetPriceFeedsUpgradable.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -3,47 +3,57 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../../WitnetPriceFeeds.sol"; -import "../../WitnetRequestBoard.sol"; -import "../../data/WitnetPriceFeedsData.sol"; -import "../../impls/WitnetUpgradableBase.sol"; +import "ado-contracts/contracts/interfaces/IERC2362.sol"; -import "../../interfaces/V2/IWitnetPriceSolver.sol"; -import "../../libs/WitnetPriceFeedsLib.sol"; +import "./WitnetFeeds.sol"; +import "../WitnetRequestBoard.sol"; +import "../data/WitnetPriceFeedsData.sol"; +import "../interfaces/V2/IWitnetPriceFeeds.sol"; +import "../interfaces/V2/IWitnetPriceSolver.sol"; +import "../interfaces/V2/IWitnetPriceSolverDeployer.sol"; +import "../libs/WitnetPriceFeedsLib.sol"; +import "../patterns/Ownable2Step.sol"; -/// @title WitnetPriceFeedsUpgradable: ... -/// @author Witnet Foundation. -contract WitnetPriceFeedsUpgradable +/// @title WitnetPriceFeeds: Price Feeds oracle reliant on the Witnet Solidity Bridge. +/// @author Guillermo Díaz + +contract WitnetPriceFeeds is - WitnetPriceFeeds, - WitnetPriceFeedsData, - WitnetUpgradableBase + IERC2362, + IWitnetPriceFeeds, + IWitnetPriceSolverDeployer, + Ownable2Step, + WitnetFeeds, + WitnetPriceFeedsData { using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.RadonSLA; IWitnetRequestBoard immutable public override witnet; - constructor( - IWitnetRequestBoard _wrb, - bool _upgradable, - bytes32 _version - ) - WitnetUpgradableBase( - _upgradable, - _version, - "io.witnet.proxiable.router" + constructor(address _operator, WitnetRequestBoard _wrb) + WitnetFeeds( + WitnetV2.RadonDataTypes.Integer, + "Price-" ) { + _transferOwnership(_operator); require( - _wrb.class() == type(WitnetRequestBoard).interfaceId, - "WitnetPriceFeedsUpgradable: uncompliant request board" + _wrb.class() == type(IWitnetRequestBoard).interfaceId, + "WitnetPriceFeeds: uncompliant request board" ); witnet = _wrb; + __settleDefaultRadonSLA(WitnetV2.RadonSLA({ + numWitnesses: 5, + witnessCollateral: 15 * 10 ** 9, + witnessReward: 15 * 10 ** 7, + minerCommitRevealFee: 10 ** 7, + minConsensusPercentage: 51 + })); } // solhint-disable-next-line payable-fallback - fallback() override external { + fallback() external { if ( msg.sig == IWitnetPriceSolver.solve.selector && msg.sender == address(this) @@ -51,7 +61,7 @@ contract WitnetPriceFeedsUpgradable address _solver = __records_(bytes4(bytes8(msg.data) << 32)).solver; require( _solver != address(0), - "WitnetPriceFeedsUpgradable: unsettled solver" + "WitnetPriceFeeds: unsettled solver" ); assembly { let ptr := mload(0x40) @@ -64,64 +74,11 @@ contract WitnetPriceFeedsUpgradable default { return(ptr, size) } } } else { - revert("WitnetPriceFeedsUpgradable: not implemented"); + revert("WitnetPriceFeeds: not implemented"); } } - // ================================================================================================================ - // --- 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) - public override - onlyDelegateCalls // => we don't want the logic base contract to be ever initialized - { - if ( - __proxiable().proxy == address(0) - && __proxiable().implementation == address(0) - ) { - // a proxy is being initialized for the first time... - __proxiable().proxy = address(this); - _transferOwnership(msg.sender); - } else { - // only the owner can initialize: - if (msg.sender != owner()) { - revert("WitnetPriceFeedsUpgradable: not the owner"); - } - } - require( - __proxiable().implementation != base(), - "WitnetPriceFeedsUpgradable: already initialized" - ); - if (__storage().defaultSlaHash == 0) { - settleDefaultRadonSLA(WitnetV2.RadonSLA({ - numWitnesses: 5, - witnessCollateral: 15 * 10 ** 9, - witnessReward: 15 * 10 ** 7, - minerCommitRevealFee: 10 ** 7, - minConsensusPercentage: 51 - })); - } - __proxiable().implementation = base(); - emit Upgraded(msg.sender, base(), codehash(), version()); - } - - /// Tells whether provided address could eventually upgrade the contract. - function isUpgradableFrom(address _from) - override - external view - returns (bool) - { - return ( - // false if the contract is set as not upgradable, or `_from` is not the owner - isUpgradable() - && _from == owner() - ); - } - - // ================================================================================================================ // --- Implements 'IFeeds' ---------------------------------------------------------------------------------------- @@ -259,7 +216,7 @@ contract WitnetPriceFeedsUpgradable Record storage __record = __records_(feedId); require( __record.radHash != 0, - "WitnetPriceFeedsUpgradable: no RAD hash" + "WitnetPriceFeeds: no RAD hash" ); return registry().bytecodeOf( __record.radHash, @@ -286,7 +243,7 @@ contract WitnetPriceFeedsUpgradable } function registry() public view virtual override returns (IWitnetBytecodes) { - return witnet.registry(); + return WitnetRequestBoard(address(witnet)).registry(); } function requestUpdate(bytes4 feedId) @@ -294,7 +251,7 @@ contract WitnetPriceFeedsUpgradable virtual override returns (uint256) { - return _requestUpdate(feedId, __storage().defaultSlaHash); + return __requestUpdate(feedId, __storage().defaultSlaHash); } function requestUpdate(bytes4 feedId, bytes32 _slaHash) @@ -304,75 +261,45 @@ contract WitnetPriceFeedsUpgradable { require( registry().lookupRadonSLA(_slaHash).equalOrGreaterThan(defaultRadonSLA()), - "WitnetPriceFeedsUpgradable: unsecure update" + "WitnetPriceFeeds: unsecure update" ); - return _requestUpdate(feedId, _slaHash); + return __requestUpdate(feedId, _slaHash); } - function _requestUpdate(bytes4[] memory _deps, bytes32 slaHash) - virtual internal - returns (uint256 _usedFunds) + + // ================================================================================================================ + // --- Implements 'IWitnetFeedsAdmin' ----------------------------------------------------------------------------- + + function owner() + virtual override (IWitnetFeedsAdmin, Ownable) + public view + returns (address) { - uint _partial = msg.value / _deps.length; - for (uint _ix = 0; _ix < _deps.length; _ix ++) { - _usedFunds += this.requestUpdate{value: _partial}(_deps[_ix], slaHash); - } + return Ownable.owner(); } - - function _requestUpdate(bytes4 feedId, bytes32 _slaHash) - virtual internal - returns (uint256 _usedFunds) + + function acceptOwnership() + virtual override (IWitnetFeedsAdmin, Ownable2Step) + public { - Record storage __feed = __records_(feedId); - if (__feed.radHash != 0) { - _usedFunds = estimateUpdateBaseFee(feedId, tx.gasprice, 0, _slaHash); - require(msg.value>= _usedFunds, "WitnetPriceFeedsUpgradable: reward too low"); - uint _latestId = __feed.latestUpdateQueryId; - Witnet.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); - if (_latestStatus == Witnet.ResultStatus.Awaiting) { - // latest update is still pending, so just increase the reward - // accordingly to current tx gasprice: - int _deltaReward = int(witnet.readRequestReward(_latestId)) - int(_usedFunds); - if (_deltaReward > 0) { - _usedFunds = uint(_deltaReward); - witnet.upgradeReward{value: _usedFunds}(_latestId); - emit UpdatingFeedReward(msg.sender, feedId, _usedFunds); - } else { - _usedFunds = 0; - } - } else { - // Check if latest update ended successfully: - if (_latestStatus == Witnet.ResultStatus.Ready) { - // If so, remove previous last valid query from the WRB: - if (__feed.latestValidQueryId > 0) { - witnet.deleteQuery(__feed.latestValidQueryId); - } - __feed.latestValidQueryId = _latestId; - } else { - // Otherwise, try to delete latest query, as it was faulty - // and we are about to post a new update request: - try witnet.deleteQuery(_latestId) {} catch {} - } - // Post update request to the WRB: - _latestId = witnet.postRequest{value: _usedFunds}(__feed.radHash, _slaHash); - // Update latest query id: - __feed.latestUpdateQueryId = _latestId; - emit UpdatingFeed(msg.sender, feedId, _slaHash, _usedFunds); - } - } else if (__feed.solver != address(0)) { - _usedFunds = _requestUpdate(_depsOf(feedId), _slaHash); - } else { - revert("WitnetPriceFeedsUpgradable: unknown feed"); - } - if (_usedFunds < msg.value) { - // transfer back unused funds: - payable(msg.sender).transfer(msg.value - _usedFunds); - } + Ownable2Step.acceptOwnership(); } - - // ================================================================================================================ - // --- Implements 'IWitnetFeedsAdmin' ----------------------------------------------------------------------- + function pendingOwner() + virtual override (IWitnetFeedsAdmin, Ownable2Step) + public view + returns (address) + { + return Ownable2Step.pendingOwner(); + } + + function transferOwnership(address _newOwner) + virtual override (IWitnetFeedsAdmin, Ownable2Step) + public + onlyOwner + { + Ownable.transferOwnership(_newOwner); + } function deleteFeed(string calldata caption) virtual override @@ -383,7 +310,7 @@ contract WitnetPriceFeedsUpgradable bytes4[] storage __ids = __storage().ids; Record storage __record = __records_(feedId); uint _index = __record.index; - require(_index != 0, "WitnetPriceFeedsUpgradable: unknown feed"); + require(_index != 0, "WitnetPriceFeeds: unknown feed"); { bytes4 _lastFeedId = __ids[__ids.length - 1]; __ids[_index - 1] = _lastFeedId; @@ -397,7 +324,7 @@ contract WitnetPriceFeedsUpgradable override public onlyOwner { - __storage().defaultSlaHash = registry().verifyRadonSLA(sla); + __settleDefaultRadonSLA(sla); } function settleFeedRequest(string calldata caption, bytes32 radHash) @@ -406,7 +333,7 @@ contract WitnetPriceFeedsUpgradable { require( registry().lookupRadonRequestResultDataType(radHash) == dataType, - "WitnetPriceFeedsUpgradable: bad result data type" + "WitnetPriceFeeds: bad result data type" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -453,7 +380,7 @@ contract WitnetPriceFeedsUpgradable { require( solver != address(0), - "WitnetPriceFeedsUpgradable: no solver address" + "WitnetPriceFeeds: no solver address" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -499,7 +426,7 @@ contract WitnetPriceFeedsUpgradable _reason := add(_reason, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeedsUpgradable: smoke-test failed: ", + "WitnetPriceFeeds: smoke-test failed: ", string(abi.decode(_reason,(string))) ))); } @@ -560,7 +487,7 @@ contract WitnetPriceFeedsUpgradable _result := add(_result, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeedsUpgradable: ", + "WitnetPriceFeeds: ", string(abi.decode(_result, (string))) ))); } else { @@ -673,9 +600,74 @@ contract WitnetPriceFeedsUpgradable return _decimals; } catch Error(string memory reason) { revert(string(abi.encodePacked( - "WitnetPriceFeedsUpgradable: ", + "WitnetPriceFeeds: ", reason ))); } } + + function __requestUpdate(bytes4[] memory _deps, bytes32 slaHash) + virtual internal + returns (uint256 _usedFunds) + { + uint _partial = msg.value / _deps.length; + for (uint _ix = 0; _ix < _deps.length; _ix ++) { + _usedFunds += this.requestUpdate{value: _partial}(_deps[_ix], slaHash); + } + } + + function __requestUpdate(bytes4 feedId, bytes32 _slaHash) + virtual internal + returns (uint256 _usedFunds) + { + Record storage __feed = __records_(feedId); + if (__feed.radHash != 0) { + _usedFunds = estimateUpdateBaseFee(feedId, tx.gasprice, 0, _slaHash); + require(msg.value>= _usedFunds, "WitnetPriceFeeds: reward too low"); + uint _latestId = __feed.latestUpdateQueryId; + Witnet.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); + if (_latestStatus == Witnet.ResultStatus.Awaiting) { + // latest update is still pending, so just increase the reward + // accordingly to current tx gasprice: + int _deltaReward = int(witnet.readRequestReward(_latestId)) - int(_usedFunds); + if (_deltaReward > 0) { + _usedFunds = uint(_deltaReward); + witnet.upgradeReward{value: _usedFunds}(_latestId); + emit UpdatingFeedReward(msg.sender, feedId, _usedFunds); + } else { + _usedFunds = 0; + } + } else { + // Check if latest update ended successfully: + if (_latestStatus == Witnet.ResultStatus.Ready) { + // If so, remove previous last valid query from the WRB: + if (__feed.latestValidQueryId > 0) { + witnet.deleteQuery(__feed.latestValidQueryId); + } + __feed.latestValidQueryId = _latestId; + } else { + // Otherwise, try to delete latest query, as it was faulty + // and we are about to post a new update request: + try witnet.deleteQuery(_latestId) {} catch {} + } + // Post update request to the WRB: + _latestId = witnet.postRequest{value: _usedFunds}(__feed.radHash, _slaHash); + // Update latest query id: + __feed.latestUpdateQueryId = _latestId; + emit UpdatingFeed(msg.sender, feedId, _slaHash, _usedFunds); + } + } else if (__feed.solver != address(0)) { + _usedFunds = __requestUpdate(_depsOf(feedId), _slaHash); + } else { + revert("WitnetPriceFeeds: unknown feed"); + } + if (_usedFunds < msg.value) { + // transfer back unused funds: + payable(msg.sender).transfer(msg.value - _usedFunds); + } + } + + function __settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) internal { + __storage().defaultSlaHash = registry().verifyRadonSLA(sla); + } } diff --git a/contracts/impls/apps/WitnetRandomnessProxiable.sol b/contracts/apps/WitnetRandomness.sol similarity index 82% rename from contracts/impls/apps/WitnetRandomnessProxiable.sol rename to contracts/apps/WitnetRandomness.sol index 12a11c13b..2fabca8e3 100644 --- a/contracts/impls/apps/WitnetRandomnessProxiable.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -3,25 +3,25 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "@openzeppelin/contracts/utils/introspection/ERC165Checker.sol"; - -import "../../UsingWitnet.sol"; -import "../../WitnetRandomness.sol"; -import "../../impls/WitnetUpgradableBase.sol"; -import "../../patterns/Clonable.sol"; - -import "../../requests/WitnetRequest.sol"; - -/// @title WitnetRandomnessProxiable: A trustless randomness generator and registry, using the Witnet oracle. -/// @author Witnet Foundation. -contract WitnetRandomnessProxiable +import "../UsingWitnet.sol"; +import "../WitnetRequest.sol"; +import "../core/WitnetUpgradableBase.sol"; +import "../interfaces/IWitnetRandomness.sol"; +import "../interfaces/IWitnetRandomnessAdmin.sol"; +import "../patterns/Clonable.sol"; +import "../patterns/Ownable2Step.sol"; + +/// @title WitnetRandomness: Randomness oracle reliant on the Witnet Solidity Bridge. +/// @author Guillermo Díaz + +contract WitnetRandomness is + IWitnetRandomness, + IWitnetRandomnessAdmin, Clonable, - UsingWitnet, - WitnetRandomness, - WitnetUpgradableBase + Ownable2Step, + UsingWitnet { - using ERC165Checker for address; using Witnet for Witnet.Result; uint256 public override latestRandomizeBlock; @@ -38,47 +38,19 @@ contract WitnetRandomnessProxiable uint256 witnetQueryId; } - modifier onlyDelegateCalls override(Clonable, Upgradeable) { - require(address(this) != base(), "WitnetRandomnessProxiable: not a delegate call"); - _; - } - - function witnet() - virtual override (IWitnetRandomness, UsingWitnet) - public view returns (WitnetRequestBoard) - { - return UsingWitnet.witnet(); - } - - /// Include an address to specify the immutable WitnetRequestBoard entrypoint address. - /// @param _wrb The WitnetRequestBoard immutable entrypoint address. - constructor( - WitnetRequestBoard _wrb, - bytes32 _version - ) + constructor(address _operator, WitnetRequestBoard _wrb) UsingWitnet(_wrb) - WitnetUpgradableBase( - false, - _version, - "io.witnet.proxiable.randomness" - ) { - require( - address(_wrb) == address(0) - || address(_wrb).supportsInterface(type(WitnetRequestBoard).interfaceId), - "WitnetRandomnessProxiable: uncompliant request board" - ); - IWitnetRequestFactory _factory = witnet().factory(); - IWitnetBytecodes _registry = _factory.registry(); + _transferOwnership(_operator); + assert(_wrb.class() == type(IWitnetRequestBoard).interfaceId); + WitnetRequestFactory _factory = witnet().factory(); + WitnetBytecodes _registry = witnet().registry(); { // Build own Witnet Randomness Request: bytes32[] memory _retrievals = new bytes32[](1); _retrievals[0] = _registry.verifyRadonRetrieval( WitnetV2.DataRequestMethods.Rng, - "", // no schema - "", // no authority - "", // no path - "", // no query + "", // no url "", // no body new string[2][](0), // no headers hex"80" // no retrieval script @@ -106,6 +78,31 @@ contract WitnetRandomnessProxiable __initializeWitnetRandomnessSlaHash(); } + /// Deploys and returns the address of a minimal proxy clone that replicates contract + /// behaviour while using its own EVM storage. + /// @dev This function should always provide a new address, no matter how many times + /// @dev is actually called from the same `msg.sender`. + function clone() + virtual public + wasInitialized + returns (WitnetRandomness) + { + return __afterClone(_clone()); + } + + /// Deploys and returns the address of a minimal proxy clone that replicates contract + /// behaviour while using its own EVM storage. + /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy + /// @dev the clone. Using the same `_salt` multiple time will revert, since + /// @dev no contract can be deployed more than once at the same address. + function cloneDeterministic(bytes32 _salt) + virtual public + wasInitialized + returns (WitnetRandomness) + { + return __afterClone(_cloneDeterministic(_salt)); + } + /// @notice Initializes a cloned instance. /// @dev Every cloned instance can only get initialized once. function initializeClone(bytes memory _initData) @@ -113,12 +110,12 @@ contract WitnetRandomnessProxiable initializer // => ensure a cloned instance can only be initialized once onlyDelegateCalls // => this method can only be called upon cloned instances { - _initialize(_initData); + __initialize(_initData); } /// =============================================================================================================== - /// --- 'WitnetRandomnessAdmin' implementation ------------------------------------------------------------------------- + /// --- 'IWitnetRandomnessAdmin' implementation ------------------------------------------------------------------- function owner() virtual override (IWitnetRandomnessAdmin, Ownable) @@ -155,41 +152,14 @@ contract WitnetRandomnessProxiable virtual override public onlyOwner - returns (bytes32 _radonSlaHash) + returns (bytes32) { - _radonSlaHash = witnet().registry().verifyRadonSLA(_radonSLA); - __witnetRandomnessSlaHash = _radonSlaHash; + return __settleWitnetRandomnessSLA(_radonSLA); } + /// =============================================================================================================== - /// --- 'WitnetRandomness' implementation ------------------------------------------------------------------------- - - /// Deploys and returns the address of a minimal proxy clone that replicates contract - /// behaviour while using its own EVM storage. - /// @dev This function should always provide a new address, no matter how many times - /// @dev is actually called from the same `msg.sender`. - function clone() - virtual override - public - wasInitialized - returns (WitnetRandomness) - { - return _afterClone(_clone()); - } - - /// Deploys and returns the address of a minimal proxy clone that replicates contract - /// behaviour while using its own EVM storage. - /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy - /// @dev the clone. Using the same `_salt` multiple time will revert, since - /// @dev no contract can be deployed more than once at the same address. - function cloneDeterministic(bytes32 _salt) - virtual override - public - wasInitialized - returns (WitnetRandomness) - { - return _afterClone(_cloneDeterministic(_salt)); - } + /// --- 'IWitnetRandomness' implementation ------------------------------------------------------------------------- /// Returns amount of wei required to be paid as a fee when requesting randomization with a /// transaction gas price as the one given. @@ -244,16 +214,16 @@ contract WitnetRandomnessProxiable _block = getRandomnessNextBlock(_block); } uint256 _queryId = __randomize_[_block].witnetQueryId; - require(_queryId != 0, "WitnetRandomnessProxiable: not randomized"); + require(_queryId != 0, "WitnetRandomness: not randomized"); Witnet.ResultStatus _resultStatus = witnet().checkResultStatus(_queryId); if (_resultStatus == Witnet.ResultStatus.Ready) { return witnet().readResponseResult(_queryId).asBytes32(); } else if (_resultStatus == Witnet.ResultStatus.Error) { uint256 _nextRandomizeBlock = __randomize_[_block].nextBlock; - require(_nextRandomizeBlock != 0, "WitnetRandomnessProxiable: faulty randomize"); + require(_nextRandomizeBlock != 0, "WitnetRandomness: faulty randomize"); return getRandomnessAfter(_nextRandomizeBlock); } else { - revert("WitnetRandomnessProxiable: pending randomize"); + revert("WitnetRandomness: pending randomize"); } } @@ -407,6 +377,14 @@ contract WitnetRandomnessProxiable } } + /// @notice Result the WitnetRequestBoard address upon which this contract relies on. + function witnet() + virtual override (IWitnetRandomness, UsingWitnet) + public view returns (WitnetRequestBoard) + { + return UsingWitnet.witnet(); + } + /// @notice Returns SLA parameters that are being used every time there's a new randomness request. function witnetRandomnessSLA() virtual override @@ -417,37 +395,6 @@ contract WitnetRandomnessProxiable } - // ================================================================================================================ - // --- 'Upgradeable' extension ------------------------------------------------------------------------------------ - - /// Initialize storage-context when invoked as delegatecall. - /// @dev Must fail when trying to initialize same instance more than once. - function initialize(bytes memory) - public - virtual override - onlyDelegateCalls // => we don't want the logic base contract to be ever initialized - { - if ( - __proxiable().proxy == address(0) - && __proxiable().implementation == address(0) - ) { - // a proxy is being initilized for the first time ... - __proxiable().proxy = address(this); - _transferOwnership(msg.sender); - __initializeWitnetRandomnessSlaHash(); - } - else if (__proxiable().implementation == base()) { - revert("WitnetRandomnessProxiable: not upgradeable"); - } - __proxiable().implementation = base(); - } - - /// Tells whether provided address could eventually upgrade the contract. - function isUpgradableFrom(address) external pure override returns (bool) { - return false; - } - - // ================================================================================================================ // --- 'Clonable' extension --------------------------------------------------------------------------------------- @@ -465,29 +412,27 @@ contract WitnetRandomnessProxiable // --- INTERNAL FUNCTIONS ----------------------------------------------------------------------------------------- /// @dev Common steps for both deterministic and non-deterministic cloning. - function _afterClone(address _instance) + function __afterClone(address _instance) virtual internal returns (WitnetRandomness) { - WitnetRandomnessProxiable(_instance).initializeClone(hex""); + WitnetRandomness(_instance).initializeClone(hex""); return WitnetRandomness(_instance); } /// @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) + function __initialize(bytes memory) virtual internal { // settle ownership: _transferOwnership(msg.sender); // initialize default Witnet SLA parameters used for every randomness request; __initializeWitnetRandomnessSlaHash(); - // make sure that this clone cannot ever get initialized as a proxy: - __proxiable().implementation = base(); } function __initializeWitnetRandomnessSlaHash() virtual internal { - settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ + __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ numWitnesses: 5, minConsensusPercentage: 51, witnessReward: 10 ** 8, @@ -496,6 +441,14 @@ contract WitnetRandomnessProxiable })); } + function __settleWitnetRandomnessSLA(WitnetV2.RadonSLA memory _radonSLA) + internal + returns (bytes32 _radonSlaHash) + { + _radonSlaHash = witnet().registry().verifyRadonSLA(_radonSLA); + __witnetRandomnessSlaHash = _radonSlaHash; + } + /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. function _msbDeBruijn32(uint32 _v) internal pure diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol index f3759b945..c6e561bce 100644 --- a/contracts/interfaces/IWitnetRandomness.sol +++ b/contracts/interfaces/IWitnetRandomness.sol @@ -2,8 +2,8 @@ pragma solidity >=0.7.0 <0.9.0; +import "../WitnetRequest.sol"; import "../WitnetRequestBoard.sol"; -import "../requests/WitnetRequest.sol"; /// @title The Witnet Randomness generator interface. /// @author Witnet Foundation. diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index b1300ff4f..52dc6bcf2 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -3,9 +3,17 @@ pragma solidity >=0.8.0 <0.9.0; import "./IWitnetBytecodes.sol"; -import "./IWitnetRequestBoard.sol"; +import "../IWitnetRequestBoard.sol"; interface IWitnetFeeds { + + event DeletedFeed(address indexed from, bytes4 indexed feedId, string caption); + event SettledFeed(address indexed from, bytes4 indexed feedId, string caption, bytes32 radHash); + event SettledFeedSolver(address indexed from, bytes4 indexed feedId, string caption, address solver); + event SettledRadonSLA(address indexed from, bytes32 slaHash); + event UpdatingFeed(address indexed from, bytes4 indexed feedId, bytes32 slaHash, uint256 value); + event UpdatingFeedReward(address indexed from, bytes4 indexed feedId, uint256 value); + function dataType() external view returns (WitnetV2.RadonDataTypes); function prefix() external view returns (string memory); function registry() external view returns (IWitnetBytecodes); diff --git a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol index 92f4694fe..9388cddaa 100644 --- a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol +++ b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol @@ -3,13 +3,17 @@ pragma solidity >=0.8.0 <0.9.0; import "../../libs/WitnetV2.sol"; -import "../../requests/WitnetRequest.sol"; +import "../../WitnetRequest.sol"; interface IWitnetFeedsAdmin { + function acceptOwnership() external; function deleteFeed(string calldata caption) external; + function owner() external view returns (address); + function pendingOwner() external returns (address); function settleDefaultRadonSLA(WitnetV2.RadonSLA calldata) external; function settleFeedRequest(string calldata caption, bytes32 radHash) external; function settleFeedRequest(string calldata caption, WitnetRequest request) external; function settleFeedRequest(string calldata caption, WitnetRequestTemplate template, string[][] calldata) external; function settleFeedSolver(string calldata caption, address solver, string[] calldata deps) external; + function transferOwnership(address) external; } \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetFeedsEvents.sol b/contracts/interfaces/V2/IWitnetFeedsEvents.sol deleted file mode 100644 index f619e98ca..000000000 --- a/contracts/interfaces/V2/IWitnetFeedsEvents.sol +++ /dev/null @@ -1,12 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -interface IWitnetFeedsEvents { - event DeletedFeed(address indexed from, bytes4 indexed feedId, string caption); - event SettledFeed(address indexed from, bytes4 indexed feedId, string caption, bytes32 radHash); - event SettledFeedSolver(address indexed from, bytes4 indexed feedId, string caption, address solver); - event SettledRadonSLA(address indexed from, bytes32 slaHash); - event UpdatingFeed(address indexed from, bytes4 indexed feedId, bytes32 slaHash, uint256 value); - event UpdatingFeedReward(address indexed from, bytes4 indexed feedId, uint256 value); -} \ No newline at end of file diff --git a/contracts/libs/WitnetPriceFeedsLib.sol b/contracts/libs/WitnetPriceFeedsLib.sol index 44ed75b09..5d3c0ca62 100644 --- a/contracts/libs/WitnetPriceFeedsLib.sol +++ b/contracts/libs/WitnetPriceFeedsLib.sol @@ -6,9 +6,9 @@ pragma experimental ABIEncoderV2; import "../interfaces/V2/IWitnetPriceSolver.sol"; import "../interfaces/V2/IWitnetPriceSolverDeployer.sol"; -import "./Slices.sol"; +import "../libs/Slices.sol"; -/// @title Ancillary external library for WitnetPriceFeeds implementations. +/// @title Ancillary deployable library for WitnetPriceFeeds. /// @dev Features: /// @dev - deployment of counter-factual IWitnetPriceSolver instances. /// @dev - validation of feed caption strings. From efde9c28136ad4ab7c126ea8990fed0c77aba588 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:52:20 +0100 Subject: [PATCH 012/149] feat: support counter-factual bindings on migrations --- migrations/scripts/1_Create2Factory.js | 59 ---- migrations/scripts/1_deployer.js | 30 ++ migrations/scripts/2_WitnetLibs.js | 44 --- migrations/scripts/2_libs.js | 61 ++++ migrations/scripts/3_WitnetBytecodes.js | 127 -------- migrations/scripts/3_core.js | 147 ++++++++++ migrations/scripts/4_WitnetRequestFactory.js | 126 -------- migrations/scripts/4_proxies.js | 135 +++++++++ migrations/scripts/5_WitnetRequestBoard.js | 146 --------- migrations/scripts/5_apps.js | 130 ++++++++ migrations/scripts/6_WitnetRandomness.js | 154 ---------- migrations/scripts/7_WitnetPriceFeeds.js | 172 ----------- migrations/scripts/8_WitnetPriceRouter.js | 43 --- migrations/witnet.salts.js | 22 -- migrations/witnet.settings.js | 294 ++++++++++++------- 15 files changed, 698 insertions(+), 992 deletions(-) delete mode 100644 migrations/scripts/1_Create2Factory.js create mode 100644 migrations/scripts/1_deployer.js delete mode 100644 migrations/scripts/2_WitnetLibs.js create mode 100644 migrations/scripts/2_libs.js delete mode 100644 migrations/scripts/3_WitnetBytecodes.js create mode 100644 migrations/scripts/3_core.js delete mode 100644 migrations/scripts/4_WitnetRequestFactory.js create mode 100644 migrations/scripts/4_proxies.js delete mode 100644 migrations/scripts/5_WitnetRequestBoard.js create mode 100644 migrations/scripts/5_apps.js delete mode 100644 migrations/scripts/6_WitnetRandomness.js delete mode 100644 migrations/scripts/7_WitnetPriceFeeds.js delete mode 100644 migrations/scripts/8_WitnetPriceRouter.js delete mode 100644 migrations/witnet.salts.js diff --git a/migrations/scripts/1_Create2Factory.js b/migrations/scripts/1_Create2Factory.js deleted file mode 100644 index 461307ab9..000000000 --- a/migrations/scripts/1_Create2Factory.js +++ /dev/null @@ -1,59 +0,0 @@ -const fs = require("fs") - -const addresses = require("../witnet.addresses") -const utils = require("../../scripts/utils") - -const Create2Factory = artifacts.require("Create2Factory") - -module.exports = async function (deployer, network, [, from,,,,, master]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - let factory - if (utils.isNullAddress(addresses[ecosystem][network]?.Create2Factory)) { - await deployer.deploy(Create2Factory, { from: master }) - factory = await Create2Factory.deployed() - addresses[ecosystem][network].Create2Factory = factory.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - factory = await Create2Factory.at(addresses[ecosystem][network].Create2Factory) - Create2Factory.address = factory.address - utils.traceHeader("Skipping 'Create2Factory'") - console.info(" > Contract address:", factory.address) - console.info() - } - - // Settle WitnetProxy 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 - utils.traceHeader("Defrosting 'WitnetProxy' artifact") - fs.writeFileSync( - `build/${ecosystem}/contracts/WitnetProxy.json`, - fs.readFileSync("migrations/abis/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(" ", "> compilation target:", metadata.settings.compilationTarget) - console.info(" ", "> evmVersion: ", metadata.settings.evmVersion) - console.info(" ", "> optimizer: ", JSON.stringify(metadata.settings.optimizer)) - - if (addresses[ecosystem][network]?.WitnetProxy === "") { - await deployer.deploy(WitnetProxy, { from }) - addresses[ecosystem][network].WitnetProxy = WitnetProxy.address - } else { - if (addresses[ecosystem][network]?.WitnetProxy) { - WitnetProxy.address = addresses[ecosystem][network]?.WitnetProxy - } - } - if (!isDryRun) { - utils.saveAddresses(addresses) - } -} diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js new file mode 100644 index 000000000..23ef84805 --- /dev/null +++ b/migrations/scripts/1_deployer.js @@ -0,0 +1,30 @@ +const addresses = require("../witnet.addresses") +const utils = require("../../scripts/utils") + +const WitnetDeployer = artifacts.require("WitnetDeployer") + +module.exports = async function (deployer, network, [, from,, master]) { + const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] + + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + + let factory + if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetDeployer)) { + await deployer.deploy(WitnetDeployer, { from: master }) + factory = await WitnetDeployer.deployed() + addresses[ecosystem][network].WitnetDeployer = factory.address + } else { + factory = await WitnetDeployer.at(addresses[ecosystem][network].WitnetDeployer) + WitnetDeployer.address = factory.address + utils.traceHeader("Skipping 'WitnetDeployer'") + console.info(" > Contract address:", factory.address) + console.info() + } + + if (!isDryRun) { + utils.saveAddresses(addresses) + } +} diff --git a/migrations/scripts/2_WitnetLibs.js b/migrations/scripts/2_WitnetLibs.js deleted file mode 100644 index 657a3d09d..000000000 --- a/migrations/scripts/2_WitnetLibs.js +++ /dev/null @@ -1,44 +0,0 @@ -const utils = require("../../scripts/utils") - -const WitnetErrorsLib = artifacts.require("WitnetErrorsLib") -const WitnetEncodingLib = artifacts.require("WitnetEncodingLib") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - const addresses = require("../witnet.addresses") - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - let lib - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetErrorsLib)) { - await deployer.deploy(WitnetErrorsLib, { from }) - lib = await WitnetErrorsLib.deployed() - addresses[ecosystem][network].WitnetErrorsLib = lib.address - } else { - lib = await WitnetErrorsLib.at(addresses[ecosystem][network]?.WitnetErrorsLib) - WitnetErrorsLib.address = lib.address - utils.traceHeader("Skipping 'WitnetErrorsLib'") - console.info(" ", "> library address:", lib.address) - console.info() - } - if (!isDryRun) { - utils.saveAddresses(addresses) - } - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetEncodingLib)) { - await deployer.deploy(WitnetEncodingLib, { from }) - lib = await WitnetEncodingLib.deployed() - addresses[ecosystem][network].WitnetEncodingLib = lib.address - } else { - lib = await WitnetEncodingLib.at(addresses[ecosystem][network]?.WitnetEncodingLib) - WitnetEncodingLib.address = lib.address - utils.traceHeader("Skipping 'WitnetEncodingLib'") - console.info(" ", "> library address:", lib.address) - console.info() - } - if (!isDryRun) { - utils.saveAddresses(addresses) - } -} diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js new file mode 100644 index 000000000..64d0a481a --- /dev/null +++ b/migrations/scripts/2_libs.js @@ -0,0 +1,61 @@ +const { merge } = require("lodash") + +const settings = require("../witnet.settings") +const utils = require("../../scripts/utils") + +const WitnetDeployer = artifacts.require("WitnetDeployer") + +module.exports = async function (_, network, [, from]) { + const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] + + const addresses = require("../witnet.addresses") + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + const libs = [ + targets.WitnetErrorsLib, + targets.WitnetEncodingLib, + targets.WitnetPriceFeedsLib, + ] + + const deployer = await WitnetDeployer.deployed() + for (index in libs) { + const key = libs[index] + const artifact = artifacts.require(key) + if (utils.isNullAddress(addresses[ecosystem][network][key])) { + 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 }) + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + if ((await web3.eth.getCode(libAddr)).length > 3) { + addresses[ecosystem][network][key] = libAddr + } else { + console.info(`Library was not deployed on expected address: ${libAddr}`) + process.exit(1) + } + } else { + utils.traceHeader(`Deployed '${key}'`) + } + artifact.address = addresses[ecosystem][network][key] + console.info(" ", "> library address: ", artifact.address) + console.info(" ", "> library codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) + console.info() + if (!isDryRun) { + utils.saveAddresses(addresses) + } + } + +} diff --git a/migrations/scripts/3_WitnetBytecodes.js b/migrations/scripts/3_WitnetBytecodes.js deleted file mode 100644 index dccaff2a2..000000000 --- a/migrations/scripts/3_WitnetBytecodes.js +++ /dev/null @@ -1,127 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const singletons = require("../witnet.salts") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const Create2Factory = artifacts.require("Create2Factory") -const WitnetProxy = artifacts.require("WitnetProxy") -const WitnetBytecodes = artifacts.require("WitnetBytecodes") -const WitnetEncodingLib = artifacts.require("WitnetEncodingLib") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - const artifactNames = merge(settings.artifacts.default, settings.artifacts[ecosystem], settings.artifacts[network]) - const WitnetBytecodesImplementation = artifacts.require(artifactNames.WitnetBytecodes) - - let proxy - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetBytecodes)) { - const factory = await Create2Factory.deployed() - if ( - factory && !utils.isNullAddress(factory.address) && - singletons?.WitnetBytecodes - ) { - // Deploy the proxy via a singleton factory and a salt... - const bytecode = WitnetProxy.toJSON().bytecode - const salt = singletons.WitnetBytecodes?.salt - ? "0x" + ethUtils.setLengthLeft( - ethUtils.toBuffer( - singletons.WitnetBytecodes.salt - ), 32 - ).toString("hex") - : "0x0" - - const proxyAddr = await factory.determineAddr.call(bytecode, salt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length <= 3) { - // deploy instance only if not found in current network: - utils.traceHeader("Singleton inception of 'WitnetBytecodes':") - const balance = await web3.eth.getBalance(from) - const gas = singletons.WitnetBytecodes.gas - const tx = await factory.deploy(bytecode, salt, { from, gas }) - utils.traceTx( - tx.receipt, - web3.utils.fromWei((balance - await web3.eth.getBalance(from)).toString()) - ) - } else { - utils.traceHeader("Singleton 'WitnetBytecodes':") - } - console.info(" ", "> proxy address: ", proxyAddr) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(proxyAddr))) - console.info(" ", "> proxy inception salt:", salt) - proxy = await WitnetProxy.at(proxyAddr) - } else { - // Deploy no singleton proxy ... - proxy = await WitnetProxy.new({ from }) - } - addresses[ecosystem][network].WitnetBytecodes = proxy.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - proxy = await WitnetProxy.at(addresses[ecosystem][network].WitnetBytecodes) - console.info(` Skipped: 'WitnetBytecodes' deployed at ${proxy.address}`) - } - WitnetBytecodes.address = proxy.address - - let bytecodes - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetBytecodesImplementation)) { - await deployer.link(WitnetEncodingLib, [WitnetBytecodesImplementation]) - await deployer.deploy( - WitnetBytecodesImplementation, - /* _isUpgradeable */ true, - /* _versionTag */ utils.fromAscii(version), - { from } - ) - bytecodes = await WitnetBytecodesImplementation.deployed() - addresses[ecosystem][network].WitnetBytecodesImplementation = bytecodes.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - bytecodes = await WitnetBytecodesImplementation.at(addresses[ecosystem][network].WitnetBytecodesImplementation) - console.info(` Skipped: '${WitnetBytecodesImplementation.contractName}' deployed at ${bytecodes.address}`) - console.info() - WitnetBytecodesImplementation.address = bytecodes.address - await deployer.link(WitnetEncodingLib, WitnetBytecodesImplementation) - } - - const implementation = await proxy.implementation.call({ from }) - if (implementation.toLowerCase() !== bytecodes.address.toLowerCase()) { - const header = `Upgrading 'WitnetBytecodes' at ${proxy.address}...` - console.info() - console.info(" ", header) - console.info(" ", "-".repeat(header.length)) - console.info() - console.info(" > old implementation:", implementation) - console.info(" > new implementation:", bytecodes.address, `(v${await bytecodes.version.call({ from })})`) - if ( - isDryRun || - ["y", "yes"].includes((await utils.prompt(" > Upgrade the proxy ? [y/N] ")).toLowerCase().trim()) - ) { - try { - const tx = await proxy.upgradeTo(bytecodes.address, "0x", { from }) - console.info(" => transaction hash :", tx.receipt.transactionHash) - console.info(" => transaction gas :", tx.receipt.gasUsed) - console.info(" > Done.") - } catch (ex) { - console.info(" !! Cannot upgrade the proxy:") - console.info(ex) - } - } else { - console.info(" > Not upgraded.") - } - } -} diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js new file mode 100644 index 000000000..bf1160505 --- /dev/null +++ b/migrations/scripts/3_core.js @@ -0,0 +1,147 @@ +const ethUtils = require("ethereumjs-util") +const { merge } = require("lodash") + +const addresses = require("../witnet.addresses") +const settings = require("../witnet.settings") +const utils = require("../../scripts/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 isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] + + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + + // Deploy/upgrade WitnetBytecodes target implementation, if required + { + await deploy({ + from, ecosystem, network, targets, + key: targets.WitnetBytecodes, + libs: specs.WitnetBytecodes.libs, + immutables: specs.WitnetBytecodes.immutables, + intrinsics: { types: [ 'bool', 'bytes32' ], values: [ + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version) + ]}, + }); + if (!isDryRun) { + utils.saveAddresses(addresses); + } + } + // Deploy/upgrade WitnetRequestFactory target implementation, if required + { + await deploy({ + from, ecosystem, network, targets, + key: targets.WitnetRequestFactory, + libs: specs.WitnetRequestFactory.libs, + immutables: specs.WitnetRequestFactory.immutables, + intrinsics: { types: [ 'address', 'bool', 'bytes32' ], values: [ + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ]}, + }); + if (!isDryRun) { + utils.saveAddresses(addresses); + } + } + // Deploy/upgrade WitnetRequestBoard target implementation, if required + { + await deploy({ + from, ecosystem, network, targets, + key: targets.WitnetRequestBoard, + libs: specs.WitnetRequestBoard.libs, + immutables: specs.WitnetRequestBoard.immutables, + intrinsics: { types: [ 'address', 'bool', 'bytes32' ], values: [ + /* _registry */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ]}, + }); + if (!isDryRun) { + utils.saveAddresses(addresses); + } + } +} + +async function deploy(specs) { + const { from, ecosystem, network, key, libs, intrinsics, immutables, targets } = specs; + const contract = artifacts.require(key) + if (utils.isNullAddress(addresses[ecosystem][network][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:", types) + console.info(" ", "> constructor args: ", constructorArgs.slice(2)) + } + const coreBytecode = link(contract.toJSON().bytecode, libs, targets) + if (coreBytecode.indexOf("__") > -1) { + console.info(bytecode) + console.info("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 }) + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + if ((await web3.eth.getCode(coreAddr)).length > 3) { + addresses[ecosystem][network][key] = coreAddr + } else { + console.info(`Contract was not deployed on expected address: ${coreAddr}`) + process.exit(1) + } + } else { + utils.traceHeader(`Deployed '${key}'`) + } + contract.address = addresses[ecosystem][network][key] + 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 (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 +} \ No newline at end of file diff --git a/migrations/scripts/4_WitnetRequestFactory.js b/migrations/scripts/4_WitnetRequestFactory.js deleted file mode 100644 index db5102a15..000000000 --- a/migrations/scripts/4_WitnetRequestFactory.js +++ /dev/null @@ -1,126 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const singletons = require("../witnet.salts") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const Create2Factory = artifacts.require("Create2Factory") -const WitnetProxy = artifacts.require("WitnetProxy") - -const WitnetBytecodes = artifacts.require("WitnetBytecodes") -const WitnetRequestFactory = artifacts.require("WitnetRequestFactory") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - const artifactNames = merge(settings.artifacts.default, settings.artifacts[ecosystem], settings.artifacts[network]) - const WitnetRequestFactoryImplementation = artifacts.require(artifactNames.WitnetRequestFactory) - - let proxy - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRequestFactory)) { - const create2Factory = await Create2Factory.deployed() - if ( - create2Factory && !utils.isNullAddress(create2Factory.address) && - singletons?.WitnetRequestFactory - ) { - // Deploy the proxy via a singleton factory and a salt... - const bytecode = WitnetProxy.toJSON().bytecode - const salt = singletons.WitnetRequestFactory?.salt - ? "0x" + ethUtils.setLengthLeft( - ethUtils.toBuffer( - singletons.WitnetRequestFactory.salt - ), 32 - ).toString("hex") - : "0x0" - - const proxyAddr = await create2Factory.determineAddr.call(bytecode, salt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length <= 3) { - // deploy instance only if not found in current network: - utils.traceHeader("Singleton inception of 'WitnetRequestFactory':") - const balance = await web3.eth.getBalance(from) - const gas = singletons.WitnetRequestFactory.gas - const tx = await create2Factory.deploy(bytecode, salt, { from, gas }) - utils.traceTx( - tx.receipt, - web3.utils.fromWei((balance - await web3.eth.getBalance(from)).toString()) - ) - } else { - utils.traceHeader("Singleton 'WitnetRequestFactory':") - } - console.info(" ", "> proxy address: ", proxyAddr) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(proxyAddr))) - console.info(" ", "> proxy inception salt:", salt) - proxy = await WitnetProxy.at(proxyAddr) - } else { - // Deploy no singleton proxy ... - proxy = await WitnetProxy.new({ from }) - } - addresses[ecosystem][network].WitnetRequestFactory = proxy.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - proxy = await WitnetProxy.at(addresses[ecosystem][network].WitnetRequestFactory) - console.info(` Skipped: 'WitnetRequestFactory' deployed at ${proxy.address}`) - } - WitnetRequestFactory.address = proxy.address - - let factory - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRequestFactoryImplementation)) { - await deployer.deploy( - WitnetRequestFactoryImplementation, - addresses[ecosystem][network].WitnetBytecodes || WitnetBytecodes.address, - /* _isUpgradeable */ true, - /* _versionTag */ utils.fromAscii(version), - { from } - ) - factory = await WitnetRequestFactoryImplementation.deployed() - addresses[ecosystem][network].WitnetRequestFactoryImplementation = factory.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - factory = await WitnetRequestFactoryImplementation.at(addresses[ecosystem][network].WitnetRequestFactoryImplementation) - console.info(` Skipped: '${WitnetRequestFactoryImplementation.contractName}' deployed at ${factory.address}`) - WitnetRequestFactoryImplementation.address = factory.address - } - - const implementation = await proxy.implementation.call({ from }) - if (implementation.toLowerCase() !== factory.address.toLowerCase()) { - const header = `Upgrading 'WitnetRequestFactory' at ${proxy.address}...` - console.info() - console.info(" ", header) - console.info(" ", "-".repeat(header.length)) - console.info() - console.info(" > old implementation:", implementation) - console.info(" > new implementation:", factory.address, `(v${await factory.version.call({ from })})`) - if ( - isDryRun || - ["y", "yes"].includes((await utils.prompt(" > Upgrade the proxy ? [y/N] ")).toLowerCase().trim()) - ) { - try { - const tx = await proxy.upgradeTo(factory.address, "0x", { from }) - console.info(" => transaction hash :", tx.receipt.transactionHash) - console.info(" => transaction gas :", tx.receipt.gasUsed) - console.info(" > Done.") - } catch (ex) { - console.info(" !! Cannot upgrade the proxy:") - console.info(ex) - } - } else { - console.info(" > Not upgraded.") - } - } -} diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js new file mode 100644 index 000000000..b10286c31 --- /dev/null +++ b/migrations/scripts/4_proxies.js @@ -0,0 +1,135 @@ +const ethUtils = require("ethereumjs-util") +const { merge } = require("lodash") + +const addresses = require("../witnet.addresses") +const settings = require("../witnet.settings") +const utils = require("../../scripts/utils") + +const WitnetDeployer = artifacts.require("WitnetDeployer") +const WitnetProxy = artifacts.require("WitnetProxy") + +module.exports = async function (_, network, [, from, reporter]) { + const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] + + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const singletons = [ + "WitnetBytecodes", + "WitnetRequestFactory", + "WitnetRequestBoard", + ] + + specs["WitnetRequestBoard"].mutables = merge({ + types: [ 'address[]', ], + values: [ [ reporter, ], ], + }, specs["WitnetRequestBoard"].mutables + ) + + // Deploy/upgrade singleton proxies, if required + for (index in singletons) { + await deploy({ + from, ecosystem, network, specs, targets, + key: singletons[index], + }); + if (!isDryRun) { + utils.saveAddresses(addresses); + } + } +} + +async function deploy(target) { + const { from, ecosystem, network, key, specs, targets } = target; + + const mutables = specs[key].mutables + const proxy = artifacts.require(key) + const proxy_salt = specs[key].vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") : "0x0" + + if (utils.isNullAddress(addresses[ecosystem][network][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() + const impl = await artifacts.require(targets[key]).deployed() + const proxyAddr = await deployer.determineProxyAddr.call(proxy_salt, { 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(proxy_salt, impl.address, initdata, { from }) + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + } else { + console.info(" ", "> already proxified ;-)") + // TODO: check that proxy's class matches impl's class + } + if ((await web3.eth.getCode(proxyAddr)).length > 3) { + addresses[ecosystem][network][key] = proxyAddr + } else { + console.info(`Contract was not deployed on expected address: ${proxyAddr}`) + process.exit(1) + } + } else { + const oldAddr = await getProxyImplementation(from, addresses[ecosystem][network][key]) + const oldImpl = await artifacts.require(targets[key]).at(oldAddr) + const newImpl = await artifacts.require(targets[key]).deployed() + if (oldAddr != newImpl.address) { + utils.traceHeader(`Upgrading '${key}'...`) + const oldVersion = await oldImpl.version.call({ from }) + const newVersion = await newImpl.version.call({ from }) + if( + process.argv.length >= 3 && process.argv[2].includes("--upgrade-all") || ["y", "yes"].includes( + (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [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) + } + const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + } + } else { + utils.traceHeader(`Deployed '${key}'`) + } + } + proxy.address = addresses[ecosystem][network][key] + 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()) + console.info(" ", "> impl. address: ", await getProxyImplementation(from, proxy.address)) + console.info(" ", "> impl. version: ", await impl.version.call()) + console.info() + return proxy +} + +async function getProxyImplementation(from, proxyAddr) { + proxy = await WitnetProxy.at(proxyAddr) + return await proxy.implementation.call({ from }) +} + +async function upgradeProxyTo(from, proxy, implAddr, initData) { + proxy = await WitnetProxy.at(proxy.address) + return await proxy.upgradeTo(implAddr, initData, { from }) +} diff --git a/migrations/scripts/5_WitnetRequestBoard.js b/migrations/scripts/5_WitnetRequestBoard.js deleted file mode 100644 index 9f180baab..000000000 --- a/migrations/scripts/5_WitnetRequestBoard.js +++ /dev/null @@ -1,146 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const singletons = require("../witnet.salts") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const Create2Factory = artifacts.require("Create2Factory") -const WitnetProxy = artifacts.require("WitnetProxy") - -const WitnetErrorsLib = artifacts.require("WitnetErrorsLib") -const WitnetRequestFactory = artifacts.require("WitnetRequestFactory") -const WitnetRequestBoard = artifacts.require("WitnetRequestBoard") - -module.exports = async function (deployer, network, [, from, reporter]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - const artifactsName = merge(settings.artifacts.default, settings.artifacts[ecosystem], settings.artifacts[network]) - const WitnetRequestBoardImplementation = artifacts.require(artifactsName.WitnetRequestBoard) - - let proxy - const factory = await Create2Factory.deployed() - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRequestBoard)) { - if ( - factory && !utils.isNullAddress(factory.address) && - singletons?.WitnetRequestBoard - ) { - // Deploy the proxy via a singleton factory and a salt... - const bytecode = WitnetProxy.toJSON().bytecode - const salt = singletons.WitnetRequestBoard?.salt - ? "0x" + ethUtils.setLengthLeft( - ethUtils.toBuffer( - singletons.WitnetRequestBoard.salt - ), 32 - ).toString("hex") - : "0x0" - - const proxyAddr = await factory.determineAddr.call(bytecode, salt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length <= 3) { - // deploy instance only if not found in current network: - utils.traceHeader("Singleton inception of 'WitnetRequestBoard':") - const balance = await web3.eth.getBalance(from) - const gas = singletons.WitnetRequestBoard.gas - const tx = await factory.deploy(bytecode, salt, { from, gas }) - utils.traceTx( - tx.receipt, - web3.utils.fromWei((balance - await web3.eth.getBalance(from)).toString()) - ) - } else { - utils.traceHeader("Singleton 'WitnetRequestBoard':") - } - console.info(" ", "> proxy address: ", proxyAddr) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(proxyAddr))) - console.info(" ", "> proxy inception salt:", salt) - proxy = await WitnetProxy.at(proxyAddr) - } else { - // Deploy no singleton proxy ... - proxy = await WitnetProxy.new({ from }) - } - // update addresses file - addresses[ecosystem][network].WitnetRequestBoard = proxy.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - proxy = await WitnetProxy.at(addresses[ecosystem][network].WitnetRequestBoard) - console.info(` Skipped: 'WitnetRequestBoard' deployed at ${proxy.address}`) - } - WitnetRequestBoard.address = proxy.address - - let board - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRequestBoardImplementation)) { - await deployer.link(WitnetErrorsLib, WitnetRequestBoardImplementation) - await deployer.deploy( - WitnetRequestBoardImplementation, - WitnetRequestFactory.address, - /* _isUpgradeable */ true, - /* _versionTag */ utils.fromAscii(version), - ...( - // if defined, use network-specific constructor parameters: - settings.constructorParams[network]?.WitnetRequestBoard || - // otherwise, use ecosystem-specific parameters, if any: - settings.constructorParams[ecosystem]?.WitnetRequestBoard || - // or, default defined parameters for WRBs, if any: - settings.constructorParams?.default?.WitnetRequestBoard - ), - { from } - ) - board = await WitnetRequestBoardImplementation.deployed() - addresses[ecosystem][network].WitnetRequestBoardImplementation = board.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - board = await WitnetRequestBoardImplementation.at(addresses[ecosystem][network].WitnetRequestBoardImplementation) - console.info(` Skipped: '${WitnetRequestBoardImplementation.contractName}' deployed at ${board.address}`) - console.info() - WitnetRequestBoardImplementation.address = board.address - await deployer.link(WitnetErrorsLib, WitnetRequestBoardImplementation) - } - - const implementation = await proxy.implementation.call({ from }) - if (implementation.toLowerCase() !== board.address.toLowerCase()) { - const header = `Upgrading 'WitnetRequestBoard' at ${proxy.address}...` - console.info() - console.info(" ", header) - console.info(" ", "-".repeat(header.length)) - console.info() - console.info(" > old implementation:", implementation) - console.info(" > new implementation:", board.address, `(v${await board.version.call({ from })})`) - if ( - isDryRun || - ["y", "yes"].includes((await utils.prompt(" > Upgrade the proxy ? [y/N] ")).toLowerCase().trim()) - ) { - try { - const tx = await proxy.upgradeTo( - board.address, - web3.eth.abi.encodeParameter( - "address[]", - [reporter], - ), - { from } - ) - console.info(" => Transaction hash :", tx.receipt.transactionHash) - console.info(" => Transaction gas :", tx.receipt.gasUsed) - console.info(" > Done.") - } catch (ex) { - console.info(" !! Cannot upgrade the proxy:") - console.info(ex) - } - } else { - console.info(" > Not upgraded.") - } - } -} diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js new file mode 100644 index 000000000..b64dd01f2 --- /dev/null +++ b/migrations/scripts/5_apps.js @@ -0,0 +1,130 @@ +const ethUtils = require("ethereumjs-util") +const { merge } = require("lodash") + +const addresses = require("../witnet.addresses") +const settings = require("../witnet.settings") +const utils = require("../../scripts/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 isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] + + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + + // Deploy the WitnetPriceFeeds oracle, if required + { + await deploy({ + from, ecosystem, network, targets, + key: targets.WitnetPriceFeeds, + libs: specs.WitnetPriceFeeds.libs, + vanity: specs.WitnetPriceFeeds?.vanity || 0, + immutables: specs.WitnetPriceFeeds.immutables, + intrinsics: { types: [ 'address', 'address' ], values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ]}, + }); + if (!isDryRun) utils.saveAddresses(addresses); + } + // Deploy the WitnetRandomness oracle, if required + { + await deploy({ + from, ecosystem, network, targets, + key: targets.WitnetRandomness, + libs: specs.WitnetRandomness?.libs, + vanity: specs.WitnetRandomness?.vanity || 0, + immutables: specs.WitnetRandomness?.immutables, + intrinsics: { types: [ 'address', 'address' ], values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ]}, + }); + if (!isDryRun) utils.saveAddresses(addresses); + } +} + +async function deploy(specs) { + const { from, ecosystem, network, key, libs, intrinsics, immutables, targets, vanity } = specs; + const artifact = artifacts.require(key) + const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" + if (utils.isNullAddress(addresses[ecosystem][network][key])) { + utils.traceHeader(`Deploying '${key}'...`) + 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:", types) + console.info(" ", "> constructor args: ", constructorArgs.slice(2)) + } + const coreBytecode = link(artifact.toJSON().bytecode, libs, targets) + if (coreBytecode.indexOf("__") > -1) { + console.info(bytecode) + console.info("Cannot deploy due to some missing libs") + process.exit(1) + } + const dappInitCode = coreBytecode + constructorArgs.slice(2) + const dappAddr = await deployer.determineAddr.call(dappInitCode, salt, { from }) + console.info(" ", "> account: ", from) + console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), 'ether'), "ETH") + const tx = await deployer.deploy(dappInitCode, salt, { from }) + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + if ((await web3.eth.getCode(dappAddr)).length > 3) { + addresses[ecosystem][network][key] = dappAddr + } else { + console.info(`Contract was not deployed on expected address: ${dappAddr}`) + console.log(tx.receipt) + process.exit(1) + } + } else { + utils.traceHeader(`Deployed '${key}'`) + } + artifact.address = addresses[ecosystem][network][key] + console.info(" ", "> contract address: ", artifact.address) + console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) + console.info() + return artifact +} + +async function determineProxyAddr(from, nonce) { + const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" + const deployer = await WitnetDeployer.deployed() + const addr = await deployer.determineProxyAddr.call(salt, { from }) + return addr +} + +function link(bytecode, libs, targets) { + if (libs && Array.isArray(libs) && libs.length > 0) { + for (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 +} \ No newline at end of file diff --git a/migrations/scripts/6_WitnetRandomness.js b/migrations/scripts/6_WitnetRandomness.js deleted file mode 100644 index 2df37b91b..000000000 --- a/migrations/scripts/6_WitnetRandomness.js +++ /dev/null @@ -1,154 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const singletons = require("../witnet.salts") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const Create2Factory = artifacts.require("Create2Factory") -const WitnetProxy = artifacts.require("WitnetProxy") - -const WitnetRandomness = artifacts.require("WitnetRandomness") -const WitnetRequestBoard = artifacts.require("WitnetRequestBoard") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - console.info() - if (!isDryRun && addresses[ecosystem][network].WitnetRandomness === undefined) { - console.info(`\n WitnetRandomness: Not to be deployed into '${network}'`) - return - } - - const create2Factory = await Create2Factory.deployed() - - const artifactNames = merge(settings.artifacts.default, settings.artifacts[ecosystem], settings.artifacts[network]) - const WitnetRandomnessImplementation = artifacts.require(artifactNames.WitnetRandomness) - - if (addresses[ecosystem][network].WitnetRandomnessImplementation !== undefined) { - let proxy - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRandomness)) { - if ( - create2Factory && !utils.isNullAddress(create2Factory.address) && - singletons?.WitnetRandomness - ) { - // Deploy the proxy via a singleton factory and a salt... - const bytecode = WitnetProxy.toJSON().bytecode - const salt = singletons.WitnetRandomness?.salt - ? "0x" + ethUtils.setLengthLeft( - ethUtils.toBuffer( - singletons.WitnetRandomness.salt - ), 32 - ).toString("hex") - : "0x0" - - const proxyAddr = await create2Factory.determineAddr.call(bytecode, salt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length <= 3) { - // deploy instance only if not found in current network: - utils.traceHeader("Singleton inception of 'WitnetRandomness':") - const balance = await web3.eth.getBalance(from) - const gas = singletons.WitnetRandomness.gas - const tx = await create2Factory.deploy(bytecode, salt, { from, gas }) - utils.traceTx( - tx.receipt, - web3.utils.fromWei((balance - await web3.eth.getBalance(from)).toString()) - ) - } else { - utils.traceHeader("Singleton 'WitnetRandomness':") - } - console.info(" ", "> proxy address: ", proxyAddr) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(proxyAddr))) - console.info(" ", "> proxy inception salt:", salt) - proxy = await WitnetProxy.at(proxyAddr) - } else { - // Deploy no singleton proxy ... - proxy = await WitnetProxy.new({ from }) - } - addresses[ecosystem][network].WitnetRandomness = proxy.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - proxy = await WitnetProxy.at(addresses[ecosystem][network].WitnetRandomness) - console.info(` Skipped: 'WitnetRandomness' deployed at ${proxy.address}`) - } - WitnetRandomness.address = proxy.address - - let randomness - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRandomnessImplementation)) { - await deployer.deploy( - WitnetRandomnessImplementation, - WitnetRequestBoard.address, - /* _versionTag */ utils.fromAscii(version), - { from } - ) - randomness = await WitnetRandomnessImplementation.deployed() - addresses[ecosystem][network].WitnetRandomnessImplementation = randomness.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - randomness = await WitnetRandomnessImplementation.at( - addresses[ecosystem][network].WitnetRandomnessImplementation - ) - console.info(` Skipped: '${WitnetRandomnessImplementation.contractName}' deployed at ${randomness.address}`) - WitnetRandomnessImplementation.address = randomness.address - } - - const implementation = await proxy.implementation.call({ from }) - if (implementation.toLowerCase() !== randomness.address.toLowerCase()) { - const header = `Upgrading 'WitnetRandomness' at ${proxy.address}...` - console.info() - console.info(" ", header) - console.info(" ", "-".repeat(header.length)) - console.info() - console.info(" > old implementation:", implementation) - console.info(" > new implementation:", randomness.address, `(v${await randomness.version.call({ from })})`) - if ( - isDryRun || - ["y", "yes"].includes((await utils.prompt(" > Upgrade the proxy ? [y/N] ")).toLowerCase().trim()) - ) { - try { - const tx = await proxy.upgradeTo(randomness.address, "0x", { from }) - console.info(" => transaction hash :", tx.receipt.transactionHash) - console.info(" => transaction gas :", tx.receipt.gasUsed) - console.info(" > Done.") - } catch (ex) { - console.info(" !! Cannot upgrade the proxy:") - console.info(ex) - } - } else { - console.info(" > Not upgraded.") - } - } - } else { - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetRandomness)) { - // deploy unproxified WitnetRandomness contract - await deployer.deploy( - WitnetRandomnessImplementation, - WitnetRequestBoard.address, - utils.fromAscii(version), - { from } - ) - addresses[ecosystem][network].WitnetRandomness = WitnetRandomnessImplementation.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - WitnetRandomnessImplementation.address = addresses[ecosystem][network]?.WitnetRandomness - console.info(` Skipped: unproxied 'WitnetRandomness' deployed at ${WitnetRandomnessImplementation.address}`) - } - WitnetRandomness.address = WitnetRandomnessImplementation.address - } -} diff --git a/migrations/scripts/7_WitnetPriceFeeds.js b/migrations/scripts/7_WitnetPriceFeeds.js deleted file mode 100644 index 3c10eacb7..000000000 --- a/migrations/scripts/7_WitnetPriceFeeds.js +++ /dev/null @@ -1,172 +0,0 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const singletons = require("../witnet.salts") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const Create2Factory = artifacts.require("Create2Factory") -const WitnetProxy = artifacts.require("WitnetProxy") - -const WitnetPriceFeeds = artifacts.require("WitnetPriceFeeds") -const WitnetPriceFeedsLib = artifacts.require("WitnetPriceFeedsLib") -const WitnetRequestBoard = artifacts.require("WitnetRequestBoard") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - console.info() - if (!isDryRun && addresses[ecosystem][network].WitnetPriceFeeds === undefined) { - console.info(`\n WitnetPriceFeeds: Not to be deployed into '${network}'`) - return - } - - const artifactNames = merge(settings.artifacts.default, settings.artifacts[ecosystem], settings.artifacts[network]) - const WitnetPriceFeedsImplementation = artifacts.require(artifactNames.WitnetPriceFeeds) - - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetPriceFeedsLib)) { - await deployer.deploy(WitnetPriceFeedsLib, { from }) - const lib = await WitnetPriceFeedsLib.deployed() - addresses[ecosystem][network].WitnetPriceFeedsLib = lib.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - const lib = await WitnetPriceFeedsLib.at(addresses[ecosystem][network]?.WitnetPriceFeedsLib) - WitnetPriceFeedsLib.address = lib.address - utils.traceHeader("Skipping 'WitnetPriceFeedsLib'") - console.info(" ", "> library address:", lib.address) - console.info() - } - await deployer.link(WitnetPriceFeedsLib, WitnetPriceFeedsImplementation) - - if (addresses[ecosystem][network]?.WitnetPriceFeedsImplementation !== undefined || isDryRun) { - let proxy - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetPriceFeeds)) { - const create2Factory = await Create2Factory.deployed() - if ( - create2Factory && !utils.isNullAddress(create2Factory.address) && - singletons?.WitnetPriceFeeds - ) { - // Deploy the proxy via a singleton factory and a salt... - const bytecode = WitnetProxy.toJSON().bytecode - const salt = singletons.WitnetPriceFeeds?.salt - ? "0x" + ethUtils.setLengthLeft( - ethUtils.toBuffer( - singletons.WitnetPriceFeeds.salt - ), 32 - ).toString("hex") - : "0x0" - - const proxyAddr = await create2Factory.determineAddr.call(bytecode, salt, { from }) - if ((await web3.eth.getCode(proxyAddr)).length <= 3) { - // deploy instance only if not found in current network: - utils.traceHeader("Singleton inception of 'WitnetPriceFeeds':") - const balance = await web3.eth.getBalance(from) - const gas = singletons.WitnetPriceFeeds.gas - const tx = await create2Factory.deploy(bytecode, salt, { from, gas }) - utils.traceTx( - tx.receipt, - web3.utils.fromWei((balance - await web3.eth.getBalance(from)).toString()) - ) - } else { - utils.traceHeader("Singleton 'WitnetPriceFeeds':") - } - console.info(" ", "> proxy address: ", proxyAddr) - console.info(" ", "> proxy codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(proxyAddr))) - console.info(" ", "> proxy inception salt:", salt) - proxy = await WitnetProxy.at(proxyAddr) - } else { - // Deploy no singleton proxy ... - proxy = await WitnetProxy.new({ from }) - } - addresses[ecosystem][network].WitnetPriceFeeds = proxy.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - proxy = await WitnetProxy.at(addresses[ecosystem][network].WitnetPriceFeeds) - console.info(` Skipped: 'WitnetPriceFeeds' deployed at ${proxy.address}`) - } - - let router - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetPriceFeedsImplementation)) { - await deployer.deploy( - WitnetPriceFeedsImplementation, - WitnetRequestBoard.address, - true, - utils.fromAscii(version), - { from } - ) - router = await WitnetPriceFeedsImplementation.deployed() - addresses[ecosystem][network].WitnetPriceFeedsImplementation = router.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - router = await WitnetPriceFeedsImplementation.at( - addresses[ecosystem][network].WitnetPriceFeedsImplementation - ) - console.info(` Skipped: '${WitnetPriceFeedsImplementation.contractName}' deployed at ${router.address}`) - WitnetPriceFeedsImplementation.address = router.address - } - WitnetPriceFeeds.address = proxy.address - - const implementation = await proxy.implementation.call({ from }) - if (implementation.toLowerCase() !== router.address.toLowerCase()) { - const header = `Upgrading 'WitnetPriceFeeds' at ${proxy.address}...` - console.info() - console.info(" ", header) - console.info(" ", "-".repeat(header.length)) - console.info() - console.info(" > old implementation:", implementation) - console.info(" > new implementation:", router.address, `(v${await router.version.call({ from })})`) - if ( - isDryRun || - ["y", "yes"].includes((await utils.prompt(" > Upgrade the proxy ? [y/N] ")).toLowerCase().trim()) - ) { - try { - const tx = await proxy.upgradeTo(router.address, "0x", { from }) - console.info(" => transaction hash :", tx.receipt.transactionHash) - console.info(" => transaction gas :", tx.receipt.gasUsed) - console.info(" > Done.") - } catch (ex) { - console.info(" !! Cannot upgrade the proxy:") - console.info(ex) - } - } else { - console.info(" > Not upgraded.") - } - } - } else { - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetPriceFeeds)) { - // deploy unproxified WitnetPriceFeeds contract - await deployer.deploy( - WitnetPriceFeedsImplementation, - WitnetRequestBoard.address, - false, - utils.fromAscii(version), - { from } - ) - addresses[ecosystem][network].WitnetPriceFeeds = WitnetPriceFeedsImplementation.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - WitnetPriceFeedsImplementation.address = addresses[ecosystem][network]?.WitnetPriceFeeds - console.info(` Skipped: unproxied 'WitnetPriceFeeds' deployed at ${WitnetPriceFeedsImplementation.address}`) - } - WitnetPriceFeeds.address = WitnetPriceFeedsImplementation.address - } -} diff --git a/migrations/scripts/8_WitnetPriceRouter.js b/migrations/scripts/8_WitnetPriceRouter.js deleted file mode 100644 index 16a807697..000000000 --- a/migrations/scripts/8_WitnetPriceRouter.js +++ /dev/null @@ -1,43 +0,0 @@ -const addresses = require("../witnet.addresses") -const utils = require("../../scripts/utils") -const version = `${ - require("../../package").version -}-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) -}` - -const WitnetPriceRouter = artifacts.require("WitnetPriceRouter") - -module.exports = async function (deployer, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - - console.info() - if (!isDryRun && addresses[ecosystem][network].WitnetPriceRouter === undefined) { - console.info(`\n WitnetPriceRouter: Not to be deployed into '${network}'`) - return - } - - if ( - isDryRun || - utils.isNullAddress(addresses[ecosystem][network]?.WitnetPriceRouter) - ) { - await deployer.deploy( - WitnetPriceRouter, - false, - utils.fromAscii(version), - { from } - ) - addresses[ecosystem][network].WitnetPriceRouter = WitnetPriceRouter.address - if (!isDryRun) { - utils.saveAddresses(addresses) - } - } else { - WitnetPriceRouter.address = addresses[ecosystem][network].WitnetPriceRouter - console.info(` Skipped: 'WitnetPriceRouter' deployed at ${WitnetPriceRouter.address}`) - } -} diff --git a/migrations/witnet.salts.js b/migrations/witnet.salts.js deleted file mode 100644 index 5a2cd75f5..000000000 --- a/migrations/witnet.salts.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - WitnetBytecodes: { - salt: 61396704, // => solc-0.8.17: 0x0000000e3a3d22d7510B36BdC88994dab11eadc8 - gas: 1000000, - }, - WitnetPriceFeeds: { - salt: 125920098, // => solc-0.8.17: 0x9999999d139bdBFbF25923ba39F63bBFc7593400 - gas: 1000000, - }, - WitnetRandomness: { - salt: 332121398, // => solc-0.8.17: 0x0123456fbBC59E181D76B6Fe8771953d1953B51a - gas: 1000000, - }, - WitnetRequestBoard: { - salt: 198789840, // => solc-0-8.17: 0x777777772C24e6CD34B464D1d71616C444254537 - gas: 1000000, - }, - WitnetRequestFactory: { - salt: 20377356, // => solc-0.8.17: 0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63 - gas: 1000000, - }, -} diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js index 8ff8e66cf..0b9bbd7ee 100644 --- a/migrations/witnet.settings.js +++ b/migrations/witnet.settings.js @@ -2,8 +2,11 @@ module.exports = { artifacts: { default: { WitnetBytecodes: "WitnetBytecodesDefault", - WitnetPriceFeeds: "WitnetPriceFeedsUpgradable", - WitnetRandomness: "WitnetRandomnessProxiable", + WitnetEncodingLib: "WitnetEncodingLib", + WitnetErrorsLib: "WitnetErrorsLib", + WitnetPriceFeeds: "WitnetPriceFeeds", + WitnetPriceFeedsLib: "WitnetPriceFeedsLib", + WitnetRandomness: "WitnetRandomness", WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", WitnetRequestFactory: "WitnetRequestFactoryDefault", }, @@ -48,103 +51,6 @@ module.exports = { }, }, }, - constructorParams: { - default: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 133000, - ], - }, - avalanche: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 155000, - ], - }, - celo: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 114000, - ], - }, - conflux: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 78500, - ], - }, - "conflux.espace.testnet": { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 225000, - ], - }, - "conflux.espace.mainnet": { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 225000, - ], - }, - cronos: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 137500, - ], - }, - dogechain: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 85000, - ], - }, - harmony: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 530000, - ], - }, - hsc: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 85000, - ], - }, - kcc: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 92500, - ], - }, - klaytn: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 105000, - ], - }, - meter: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 85000, - ], - }, - metis: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 134800, - ], - }, - moonbeam: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 115000, - ], - }, - okxchain: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 145000, - ], - }, - optimism: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 135000, - ], - }, - reef: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ "0x3100A1CAC7EF19DC", - ], - }, - ultron: { - WitnetRequestBoard: [ - /* _reportResultGasLimit */ 83949, - ], - }, - }, networks: { default: { "ethereum.goerli": { @@ -749,4 +655,194 @@ module.exports = { }, }, }, + specs: { + default: { + WitnetBytecodes: { + libs: [ "WitnetEncodingLib", ], + vanity: 172582, + }, + WitnetRandomness: { + vanity: 4, + }, + WitnetRequestBoard: { + immutables: { + types: [ 'uint256', ], + values: [ + /* _reportResultGasLimit */ 133000, + ] + }, + libs: [ "WitnetErrorsLib", ], + vanity: 83581, + }, + WitnetRequestFactory: { + vanity: 178848, + }, + WitnetPriceFeeds: { + libs: [ "WitnetPriceFeedsLib", ], + vanity: 5, + } + }, + avalanche: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 155000, + ] + }, + }, + }, + celo: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 114000, + ] + }, + }, + }, + conflux: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 78500, + ] + }, + }, + }, + "conflux.espace.testnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 225000, + ] + }, + }, + }, + "conflux.espace.mainnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 225000, + ] + }, + }, + }, + cronos: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 137500, + ] + }, + }, + }, + dogechain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 85000, + ] + }, + }, + }, + harmony: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 530000, + ] + }, + }, + }, + hsc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 85000, + ] + }, + }, + }, + kcc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 92500, + ] + }, + }, + }, + klaytn: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 105000, + ] + }, + }, + }, + meter: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 85000, + ] + }, + }, + }, + metis: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 134800, + ] + }, + }, + }, + moonbeam: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 115000, + ] + }, + }, + }, + okxchain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 145000, + ] + }, + }, + }, + optimism: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 135000, + ] + }, + }, + }, + reef: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ "0x3100A1CAC7EF19DC", + ] + }, + }, + }, + ultron: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasLimit */ 83949, + ] + }, + }, + }, + }, } From a2918ef00602ca2f02e75d3126c2d1e0d7d7ee16 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:54:23 +0100 Subject: [PATCH 013/149] feat: implement create2/3 address vanity generators --- package.json | 10 +++-- scripts/eth-create2.js | 37 +++++++++++++++++++ scripts/eth-create3.js | 43 ++++++++++++++++++++++ scripts/vanity2gen.js | 83 ++++++++++++++++++++++++++++++++++++++++++ scripts/vanity3gen.js | 66 +++++++++++++++++++++++++++++++++ 5 files changed, 235 insertions(+), 4 deletions(-) create mode 100644 scripts/eth-create2.js create mode 100644 scripts/eth-create3.js create mode 100644 scripts/vanity2gen.js create mode 100644 scripts/vanity3gen.js diff --git a/package.json b/package.json index 6923e900d..a9f07a1e8 100644 --- a/package.json +++ b/package.json @@ -13,10 +13,10 @@ "coverage": "solidity-coverage", "flatten": "node ./scripts/flatten.js 2>&1", "flatten:all": "npm run clean && npm run flatten:core && npm run flatten:apps && npm run flatten:libs && npm run flatten:proxy", - "flatten:apps": "npm run flatten contracts/impls/apps/", - "flatten:core": "npm run flatten contracts/impls/core/", + "flatten:apps": "npm run flatten contracts/core/apps/", + "flatten:core": "npm run flatten contracts/core/core/", "flatten:libs": "npm run flatten contracts/libs/WitnetErrorsLib.sol && npm run flatten contracts/libs/WitnetEncodingLib.sol && npm run flatten contracts/libs/WitnetPriceFeedsLib.sol", - "flatten:proxy": "npm run flatten contracts/impls/WitnetProxy.sol", + "flatten:proxy": "npm run flatten contracts/core/WitnetProxy.sol", "fmt:js": "eslint \"**/*.js\"", "fmt:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\" && solhint \"test/**/*.sol\" && solhint \"flattened/**/*.sol\"", "fmt!:js": "eslint \"**/*.js\" --fix", @@ -55,9 +55,11 @@ "eslint-plugin-import": "~2.26.0", "eslint-plugin-n": "~15.6.0", "eslint-plugin-promise": "~6.1.1", - "eth-create2": "~1.0.1", + "eth-helpers": "^1.3.0", "eth-gas-reporter": "0.2.25", "js-sha256": "0.9.0", + "nanoassert": "^2.0.0", + "sha3-wasm": "0.0.7", "solhint": "3.3.7", "solidity-coverage": "0.7.16", "truffle": "~5.11.5", diff --git a/scripts/eth-create2.js b/scripts/eth-create2.js new file mode 100644 index 000000000..52a0f84c3 --- /dev/null +++ b/scripts/eth-create2.js @@ -0,0 +1,37 @@ +const assert = require('nanoassert') +const { utils } = require('eth-helpers') +const keccak = require('sha3-wasm').keccak256 + +const prefix = Buffer.from([0xff]) + +/** + * Generate Ethereum CREATE2 address + * + * @param {string|Buffer} address Ethereum address of creator contract as + * string or as a 20 byte `Buffer` + * @param {string|Buffer} salt 256 bit salt as either string or 32 byte `Buffer` + * @param {string|Buffer} initCode init_code as string or Buffer + * @returns {string} result address as hex encoded string. Not + * checksum'ed. This can be done with + * `eth-checksum` or similar modules + */ +module.exports = function create2 (address, salt, initCode) { + if (typeof address === 'string') address = utils.parse.address(address) + if (typeof salt === 'string') salt = utils.parse.uint256(salt) + if (typeof initCode === 'string') initCode = utils.parse.bytes(initCode) + + assert(address.byteLength === 20, 'address must be 20 bytes') + assert(salt.byteLength === 32, 'salt must be 32 bytes') + assert(initCode.byteLength != null, 'initCode must be Buffer') + + const codeHash = keccak().update(initCode).digest() + + return utils.format.address(keccak() + .update(prefix) + .update(address) + .update(salt) + .update(codeHash) + .digest() + .slice(-20)) +} + diff --git a/scripts/eth-create3.js b/scripts/eth-create3.js new file mode 100644 index 000000000..2f5347d48 --- /dev/null +++ b/scripts/eth-create3.js @@ -0,0 +1,43 @@ +const assert = require('nanoassert') +const { utils } = require('eth-helpers') +const keccak = require('sha3-wasm').keccak256 + +const factoryPrefix = Buffer.from([0xff]) + +/** + * Generate Ethereum CREATE3-library address + * + * @param {string|Buffer} address Ethereum address of creator contract as + * string or as a 20 byte `Buffer` + * @param {string|Buffer} salt 256 bit salt as either string or 32 byte `Buffer` + * @returns {string} result address as hex encoded string. Not + * checksum'ed. This can be done with + * `eth-checksum` or similar modules + */ +module.exports = function create3 (address, salt) { + if (typeof address === 'string') address = utils.parse.address(address) + if (typeof salt === 'string') salt = utils.parse.uint256(salt) + + assert(address.byteLength === 20, 'address must be 20 bytes') + assert(salt.byteLength === 32, 'salt must be 32 bytes') + + const factoryHash = utils.parse.uint256("0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f") + const factoryAddr = keccak() + .update(factoryPrefix) + .update(address) + .update(salt) + .update(factoryHash) + .digest() + .slice(-20) + ; + assert(factoryAddr.byteLength === 20, 'address must be 20 bytes') + + return utils.format.address(keccak() + .update(Buffer.from([0xd6, 0x94])) + .update(factoryAddr) + .update(Buffer.from([0x01])) + .digest() + .slice(-20) + ) +} + diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js new file mode 100644 index 000000000..8a8354137 --- /dev/null +++ b/scripts/vanity2gen.js @@ -0,0 +1,83 @@ +const { assert } = require("chai") +const create2 = require("./eth-create2") +const fs = require("fs") +const utils = require("./utils") + +const addresses = require("../migrations/witnet.addresses") + +module.exports = async function () { + let artifact + let count = 0 + let ecosystem = "default" + let from + let hits = 10 + let offset = 0 + let network = "default" + let prefix = "0x00" + let suffix = "00" + let hexArgs = "" + process.argv.map((argv, index, args) => { + if (argv === "--offset") { + offset = parseInt(args[index + 1]) + } else if (argv === "--artifact") { + artifact = artifacts.require(args[index + 1]) + } else if (argv === "--prefix") { + prefix = args[index + 1].toLowerCase() + assert(web3.utils.isHexStrict(prefix), "--prefix: invalid hex string") + } else if (argv === "--suffix") { + suffix = args[index + 1].toLowerCase() + assert(web3.utils.isHexStrict(suffix), "--suffix: invalid hex string") + } else if (argv === "--hits") { + hits = parseInt(args[index + 1]) + } else if (argv === "--network") { + [ecosystem, network] = utils.getRealmNetworkFromString(args[index + 1].toLowerCase()) + } else if (argv === "--hexArgs") { + hexArgs = args[index + 1].toLowerCase() + if (hexArgs.startsWith("0x")) hexArgs = hexArgs.slice(2) + assert(web3.utils.isHexStrict("0x" + hexArgs), "--hexArgs: invalid hex string") + } else if (argv === "--from") { + from = args[index + 1] + } + return argv + }) + try { + from = from || addresses[ecosystem][network].WitnetDeployer + } catch { + console.error(`WitnetDeployer must have been previously deployed on network '${network}'.\n`) + console.info("Usage:\n") + console.info(" --artifact => Truffle artifact name (mandatory)") + console.info(" --hexArgs => Hexified constructor arguments") + console.info(" --hits => Number of vanity hits to look for (default: 10)") + console.info(" --network => Network name") + console.info(" --offset => Salt starting value minus 1 (default: 0)") + console.info(" --prefix => Prefix hex string to look for (default: 0x00)") + console.info(" --suffix => suffix hex string to look for (default: 0x00)") + process.exit(1) + } + if (!artifact) { + console.error("No --artifact was set!") + process.exit(1) + } + const initCode = artifact.toJSON().bytecode + hexArgs + console.log("Init code: ", initCode) + console.log("Artifact: ", artifact?.contractName) + console.log("From: ", from) + console.log("Hits: ", hits) + console.log("Offset: ", offset) + console.log("Prefix: ", prefix) + console.log("Suffix: ", suffix) + console.log("=".repeat(55)) + suffix = suffix.slice(2) + while (count < hits) { + const salt = "0x" + utils.padLeft(offset.toString(16), "0", 32) + const addr = create2(from, salt, initCode).toLowerCase() + if (addr.startsWith(prefix) && addr.endsWith(suffix)) { + const found = `${offset} => ${web3.utils.toChecksumAddress(addr)}` + console.log(found) + fs.appendFileSync(`./migrations/salts/${artifact?.contractName}$${from.toLowerCase()}.tmp`, found + "\n") + count++ + } + offset++ + } +} + diff --git a/scripts/vanity3gen.js b/scripts/vanity3gen.js new file mode 100644 index 000000000..6452d3b81 --- /dev/null +++ b/scripts/vanity3gen.js @@ -0,0 +1,66 @@ +const { assert } = require("chai") +const create3 = require("./eth-create3") +const fs = require("fs") +const utils = require("./utils") + +const addresses = require("../migrations/witnet.addresses") + +module.exports = async function () { + let count = 0 + let ecosystem = "default" + let from + let hits = 10 + let offset = 0 + let network = "default" + let prefix = "0x00" + let suffix = "0x00" + let hexArgs = "" + process.argv.map((argv, index, args) => { + if (argv === "--offset") { + offset = parseInt(args[index + 1]) + } else if (argv === "--prefix") { + prefix = args[index + 1].toLowerCase() + assert(web3.utils.isHexStrict(prefix), "--prefix: invalid hex string") + } else if (argv === "--suffix") { + suffix = args[index + 1].toLowerCase() + assert(web3.utils.isHexStrict(suffix), "--suffix: invalid hex string") + } else if (argv === "--hits") { + hits = parseInt(args[index + 1]) + } else if (argv === "--network") { + [ecosystem, network] = utils.getRealmNetworkFromString(args[index + 1].toLowerCase()) + } else if (argv === "--from") { + from = args[index + 1] + } + return argv + }) + try { + from = from || addresses[ecosystem][network].WitnetDeployer + } catch { + console.error(`WitnetDeployer must have been previously deployed on network '${network}'.\n`) + console.info("Usage:\n") + console.info(" --hits => Number of vanity hits to look for (default: 10)") + console.info(" --network => Network name") + console.info(" --offset => Salt starting value minus 1 (default: 0)") + console.info(" --prefix => Prefix hex string to look for (default: 0x00)") + console.info(" --suffix => suffix hex string to look for (default: 0x00)") + process.exit(1) + } + console.log("From: ", from) + console.log("Hits: ", hits) + console.log("Offset: ", offset) + console.log("Prefix: ", prefix) + console.log("Suffix: ", suffix) + console.log("=".repeat(55)) + suffix = suffix.slice(2) + while (count < hits) { + const salt = "0x" + utils.padLeft(offset.toString(16), "0", 32) + const addr = create3(from, salt).toLowerCase() + if (addr.startsWith(prefix) && addr.endsWith(suffix)) { + const found = `${offset} => ${web3.utils.toChecksumAddress(addr)}` + console.log(found) + fs.appendFileSync(`./migrations/salts/create3$${from.toLowerCase()}.tmp`, found + "\n") + count++ + } + offset++ + } +} From 1ed8756e4d613b27e730714e26bcdcef1dea78b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 08:54:45 +0100 Subject: [PATCH 014/149] chore: bump package version to 2.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a9f07a1e8..794351cb0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "witnet-solidity-bridge", - "version": "2.0.0", + "version": "2.0.1", "description": "Witnet Solidity Bridge contracts for EVM-compatible chains", "main": "", "scripts": { From d986cc8f6752739f051cfddcdf32f45be5b9b16e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 11:36:43 +0100 Subject: [PATCH 015/149] feat: improve recovery of counter factual proxy addresses --- migrations/scripts/4_proxies.js | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index b10286c31..bfef92a9d 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -76,8 +76,20 @@ async function deploy(target) { console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") } else { - console.info(" ", "> already proxified ;-)") - // TODO: check that proxy's class matches impl's class + 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) { addresses[ecosystem][network][key] = proxyAddr From 29a960933ee9fe55eea842eddbb2fc4e6507c253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 11:38:56 +0100 Subject: [PATCH 016/149] feat: auto-save exportable abis when upgraded --- migrations/scripts/4_proxies.js | 12 ++++-------- migrations/scripts/5_apps.js | 2 ++ scripts/utils/index.js | 22 ++++++++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index bfef92a9d..70951c43d 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -71,10 +71,8 @@ async function deploy(target) { console.info(" ", "> initialize params:", mutables.values) } const tx = await deployer.proxify(proxy_salt, impl.address, initdata, { from }) - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + // save/overwrite exportable abi file + utils.saveJsonAbi(key, proxy.abi) } else { try { const oldImplAddr = await getProxyImplementation(from, proxyAddr) @@ -116,10 +114,8 @@ async function deploy(target) { console.info(" ", "> initialize params:", mutables.values) } const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + // save/overwrite exportable abi file + utils.saveJsonAbi(key, proxy.abi) } } else { utils.traceHeader(`Deployed '${key}'`) diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index b64dd01f2..65a55d627 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -95,6 +95,8 @@ async function deploy(specs) { console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") if ((await web3.eth.getCode(dappAddr)).length > 3) { addresses[ecosystem][network][key] = dappAddr + // save/overwrite exportable abi file + utils.saveJsonAbi(key, artifact.abi) } else { console.info(`Contract was not deployed on expected address: ${dappAddr}`) console.log(tx.receipt) diff --git a/scripts/utils/index.js b/scripts/utils/index.js index ec39657fd..6d9190a6b 100644 --- a/scripts/utils/index.js +++ b/scripts/utils/index.js @@ -1,5 +1,6 @@ const fs = require("fs") require("dotenv").config() +const { isEqual } = require("lodash") const readline = require("readline") const web3 = require("web3") @@ -14,6 +15,7 @@ module.exports = { padLeft, prompt, saveAddresses, + saveJsonAbi, traceHeader, traceTx, } @@ -116,3 +118,23 @@ function saveAddresses (addrs) { { flag: "w+" } ) } + +function saveJsonAbi (key, abi) { + const version = require("../../package.json").version + const latest_fn = `./migrations/abis/${key}.json`; + const version_fn = `./migrations/abis/${key}-${version}.json` + let latest_abi = [] + if (fs.existsSync(latest_fn)) { + try { + latest_abi = JSON.parse(fs.readFileSync(latest_fn)) + } catch {} + } + if (!isEqual(abi, latest_abi)) { + const json = JSON.stringify(abi, null, 4) + if (fs.existsSync(latest_fn)) { + // avoid creating versioned abi upon first deployment + fs.writeFileSync(version_fn, json, { flag: "w+" }) + } + fs.writeFileSync(latest_fn, json, { flag: "w+" }) + } +} From 5d401ff17d7065fe92dc0fb67ad400d2affe4ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 11:39:35 +0100 Subject: [PATCH 017/149] chore: add exportable abis --- migrations/abis/WitnetBytecodes.json | 954 +++ migrations/abis/WitnetPriceFeeds.json | 1359 ++++ migrations/abis/WitnetProxy.json | 7310 -------------------- migrations/abis/WitnetRandomness.json | 649 ++ migrations/abis/WitnetRequest.json | 400 ++ migrations/abis/WitnetRequestBoard.json | 1088 +++ migrations/abis/WitnetRequestFactory.json | 81 + migrations/abis/WitnetRequestTemplate.json | 348 + 8 files changed, 4879 insertions(+), 7310 deletions(-) create mode 100644 migrations/abis/WitnetBytecodes.json create mode 100644 migrations/abis/WitnetPriceFeeds.json delete mode 100644 migrations/abis/WitnetProxy.json create mode 100644 migrations/abis/WitnetRandomness.json create mode 100644 migrations/abis/WitnetRequest.json create mode 100644 migrations/abis/WitnetRequestBoard.json create mode 100644 migrations/abis/WitnetRequestFactory.json create mode 100644 migrations/abis/WitnetRequestTemplate.json diff --git a/migrations/abis/WitnetBytecodes.json b/migrations/abis/WitnetBytecodes.json new file mode 100644 index 000000000..3641108bd --- /dev/null +++ b/migrations/abis/WitnetBytecodes.json @@ -0,0 +1,954 @@ +[ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonReducer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonRequest", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonRetrieval", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonSLA", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "NewDataProvider", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadHash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadonReducerHash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadonRetrievalHash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewSlaHash", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "slahHash", + "type": "bytes32" + } + ], + "name": "bytecodeOf", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "bytecodeOf", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "hashOf", + "outputs": [ + { + "internalType": "bytes32", + "name": "drQueryHash", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "sources", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "aggregator", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tally", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resultMaxSize", + "type": "uint16" + }, + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "hashOf", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "hashWeightWitsOf", + "outputs": [ + { + "internalType": "bytes32", + "name": "drQueryHash", + "type": "bytes32" + }, + { + "internalType": "uint32", + "name": "drQueryWeight", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "drQueryWits", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "lookupDataProvider", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "authority", + "type": "string" + } + ], + "name": "lookupDataProviderIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "lookupDataProviderSources", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonReducer", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestAggregator", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestResultDataType", + "outputs": [ + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestResultMaxSize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestSources", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestSourcesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestTally", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrieval", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonRetrieval", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrievalArgsCount", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrievalResultDataType", + "outputs": [ + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "lookupRadonSLA", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "lookupRadonSLAReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalDataProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "reducer", + "type": "tuple" + } + ], + "name": "verifyRadonReducer", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "sources", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "aggregator", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tally", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resultMaxSize", + "type": "uint16" + }, + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "verifyRadonRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "requestMethod", + "type": "uint8" + }, + { + "internalType": "string", + "name": "requestSchema", + "type": "string" + }, + { + "internalType": "string", + "name": "requestAuthority", + "type": "string" + }, + { + "internalType": "string", + "name": "requestPath", + "type": "string" + }, + { + "internalType": "string", + "name": "requestQuery", + "type": "string" + }, + { + "internalType": "string", + "name": "requestBody", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "requestHeaders", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "requestRadonScript", + "type": "bytes" + } + ], + "name": "verifyRadonRetrieval", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "requestMethod", + "type": "uint8" + }, + { + "internalType": "string", + "name": "requestURL", + "type": "string" + }, + { + "internalType": "string", + "name": "requestBody", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "requestHeaders", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "requestRadonScript", + "type": "bytes" + } + ], + "name": "verifyRadonRetrieval", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "sla", + "type": "tuple" + } + ], + "name": "verifyRadonSLA", + "outputs": [ + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/migrations/abis/WitnetPriceFeeds.json b/migrations/abis/WitnetPriceFeeds.json new file mode 100644 index 000000000..421f539bb --- /dev/null +++ b/migrations/abis/WitnetPriceFeeds.json @@ -0,0 +1,1359 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, + { + "internalType": "contract WitnetRequestBoard", + "name": "_wrb", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EmptyBuffer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "range", + "type": "uint256" + } + ], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidLengthEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "read", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "UnexpectedMajorType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unexpected", + "type": "uint256" + } + ], + "name": "UnsupportedMajorType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "DeletedFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "SettledFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "solver", + "type": "address" + } + ], + "name": "SettledFeedSolver", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "SettledRadonSLA", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "UpdatingFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "UpdatingFeedReward", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "solver", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "codehash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "WitnetPriceSolverDeployed", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "dataType", + "outputs": [ + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "prefix", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract IWitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "hash", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupCaption", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "supportedFeeds", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_ids", + "type": "bytes4[]" + }, + { + "internalType": "string[]", + "name": "_captions", + "type": "string[]" + }, + { + "internalType": "bytes32[]", + "name": "_solvers", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "supportsCaption", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFeeds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultRadonSLA", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + }, + { + "internalType": "uint256", + "name": "_evmGasPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "estimateUpdateBaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + }, + { + "internalType": "uint256", + "name": "_evmGasPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "estimateUpdateBaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestResponse", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct Witnet.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestResult", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateQueryId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateRequest", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "gasprice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "internalType": "struct Witnet.Request", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResponse", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct Witnet.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResultError", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.ResultErrorCodes", + "name": "code", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "internalType": "struct Witnet.ResultError", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResultStatus", + "outputs": [ + { + "internalType": "enum Witnet.ResultStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupBytecode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupRadHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupRetrievals", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonRetrieval[]", + "name": "_retrievals", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract IWitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "internalType": "bytes32", + "name": "_slaHash", + "type": "bytes32" + } + ], + "name": "requestUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "_usedFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "requestUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "deleteFeed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "sla", + "type": "tuple" + } + ], + "name": "settleDefaultRadonSLA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "contract WitnetRequest", + "name": "request", + "type": "address" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "contract WitnetRequestTemplate", + "name": "template", + "type": "address" + }, + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "address", + "name": "solver", + "type": "address" + }, + { + "internalType": "string[]", + "name": "deps", + "type": "string[]" + } + ], + "name": "settleFeedSolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupDecimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupPriceSolver", + "outputs": [ + { + "internalType": "contract IWitnetPriceSolver", + "name": "_solverAddress", + "type": "address" + }, + { + "internalType": "string[]", + "name": "_solverDeps", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestPrice", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "enum Witnet.ResultStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct IWitnetPriceSolver.Price", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "feedIds", + "type": "bytes4[]" + } + ], + "name": "latestPrices", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "enum Witnet.ResultStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct IWitnetPriceSolver.Price[]", + "name": "_prices", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initcode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "deployPriceSolver", + "outputs": [ + { + "internalType": "address", + "name": "_solver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initcode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "determinePriceSolverAddress", + "outputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + } + ], + "name": "valueFor", + "outputs": [ + { + "internalType": "int256", + "name": "_value", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_status", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/migrations/abis/WitnetProxy.json b/migrations/abis/WitnetProxy.json deleted file mode 100644 index 8aa75fc01..000000000 --- a/migrations/abis/WitnetProxy.json +++ /dev/null @@ -1,7310 +0,0 @@ -{ - "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", - "payable": true - }, - { - "stateMutability": "payable", - "type": "receive", - "payable": true - }, - { - "inputs": [], - "name": "implementation", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "constant": true - }, - { - "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.17+commit.8df45f5f\"},\"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\":\"The Witnet Foundation.\",\"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/impls/WitnetProxy.sol\":\"WitnetProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0xe798cadb41e2da274913e4b3183a80f50fb057a42238fe8467e077268100ec27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://899f850f7df5a270bccfb765d70069959ca1c20d3a7381c1c3bda8a3ffee1935\",\"dweb:/ipfs/QmVdnAqwyX2L3nX2HDA5WKGtVBFyH1nKE9A1k7fZnPBkhP\"]},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://72460c66cd1c3b1c11b863e0d8df0a1c56f37743019e468dc312c754f43e3b06\",\"dweb:/ipfs/QmPExYKiNb9PUsgktQBupPaM33kzDHxaYoVeJdLhv8s879\"]},\"project:/contracts/impls/WitnetProxy.sol\":{\"keccak256\":\"0x1c779834ad2643469ffdaa70da075bd4617326663539b018e3a2756873997e3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://142b32cd3be904194a8b370e6e1e5c961d9e70674903a47c6a3aac6aea770cfa\",\"dweb:/ipfs/Qme3UTCXqJFAdA7MJBKfQc3kUQjAoTuaMoifU8encsJU9P\"]},\"project:/contracts/patterns/Initializable.sol\":{\"keccak256\":\"0xaac470e87f361cf15d68d1618d6eb7d4913885d33ccc39c797841a9591d44296\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef3760b2039feda8715d4bd9f8de8e3885f25573d12ba92f52d626ba880a08bf\",\"dweb:/ipfs/QmP2mfHPBKkjTAKft95sPDb4PBsjfmAwc47Kdcv3xYSf3g\"]},\"project:/contracts/patterns/Proxiable.sol\":{\"keccak256\":\"0xe1b1bb7ba2e2fc799b33648f6f89a1b0e82a75dd275071215b3fd8c82327a2cb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a025a64d64d46c7ced3c1c99f4380841ec495a0bb6fbe4426ff9b32e16fa4769\",\"dweb:/ipfs/QmRuUrv285bTD9pPCppUGNMTQkCqqceXSXEJrEnpN2H778\"]},\"project:/contracts/patterns/Upgradeable.sol\":{\"keccak256\":\"0x27ca1e658f13f0128d17ff27e9640670b22afdab6163c0daa14f2ec0853b5954\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f2eceac1ee77596a31e7ee2f11145ce188eef649e3095b2a26d746a250df2b81\",\"dweb:/ipfs/QmcEh2umA5McbU9VHY319XW8rw4Fs79a7dKGC3F2no8biL\"]}},\"version\":1}", - "bytecode": "0x608060405234801561001057600080fd5b50610912806100206000396000f3fe60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610757565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561053857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610827565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b179052516103269190610874565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103b85760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b808060200190518101906103cc9190610827565b6104185760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610890565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dc9190610890565b146105355760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b6000846001600160a01b03168460405160240161055591906108a9565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161058a9190610874565b600060405180830381855af49150503d80600081146105c5576040519150601f19603f3d011682016040523d82523d6000602084013e6105ca565b606091505b50509050806106255760405162461bcd60e51b815260206004820152602160248201527f5769746e657450726f78793a20756e61626c6520746f20696e697469616c697a6044820152606560f81b6064820152608401610149565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0387169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2846001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106e5575060408051601f3d908101601f191682019092526106e291810190610827565b60015b6107315760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b925061073b915050565b92915050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561076a57600080fd5b82356001600160a01b038116811461078157600080fd5b9150602083013567ffffffffffffffff8082111561079e57600080fd5b818501915085601f8301126107b257600080fd5b8135818111156107c4576107c4610741565b604051601f8201601f19908116603f011681019083821181831017156107ec576107ec610741565b8160405282815288602084870101111561080557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561083957600080fd5b8151801515811461084957600080fd5b9392505050565b60005b8381101561086b578181015183820152602001610853565b50506000910152565b60008251610886818460208701610850565b9190910192915050565b6000602082840312156108a257600080fd5b5051919050565b60208152600082518060208401526108c8816040850160208701610850565b601f01601f1916919091016040019291505056fea26469706673582212200771bc4bad015c089efb2351eb3266c8aad36c8daccf86bbf3421605ef5fc23c64736f6c63430008110033", - "deployedBytecode": "0x60806040526004361061002d5760003560e01c80635c60da1b146100655780636fbc15e91461009757610034565b3661003457005b600061003e6100c7565b905060405136600082376000803683855af43d806000843e818015610061578184f35b8184fd5b34801561007157600080fd5b5061007a6100c7565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156100a357600080fd5b506100b76100b2366004610757565b6100f5565b604051901515815260200161008e565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b60006001600160a01b0383166101525760405162461bcd60e51b815260206004820181905260248201527f5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e60448201526064015b60405180910390fd5b600061015c6100c7565b90506001600160a01b0381161561053857806001600160a01b0316846001600160a01b0316036101ce5760405162461bcd60e51b815260206004820152601f60248201527f5769746e657450726f78793a206e6f7468696e6720746f2075706772616465006044820152606401610149565b806001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610228575060408051601f3d908101601f1916820190925261022591810190610827565b60015b6102875760405162461bcd60e51b815260206004820152602a60248201527f5769746e657450726f78793a20756e61626c6520746f20636865636b207570676044820152697261646162696c69747960b01b6064820152608401610149565b806102d45760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f742075706772616461626c6500000000006044820152606401610149565b5060405133602482015260009081906001600160a01b0384169060440160408051601f198184030181529181526020820180516001600160e01b03166335ac4b0560e11b179052516103269190610874565b600060405180830381855af49150503d8060008114610361576040519150601f19603f3d011682016040523d82523d6000602084013e610366565b606091505b5091509150816103b85760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b808060200190518101906103cc9190610827565b6104185760405162461bcd60e51b815260206004820152601b60248201527f5769746e657450726f78793a206e6f7420617574686f72697a656400000000006044820152606401610149565b856001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610456573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061047a9190610890565b836001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104dc9190610890565b146105355760405162461bcd60e51b8152602060048201526024808201527f5769746e657450726f78793a2070726f786961626c655555494473206d69736d6044820152630c2e8c6d60e31b6064820152608401610149565b50505b6000846001600160a01b03168460405160240161055591906108a9565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161058a9190610874565b600060405180830381855af49150503d80600081146105c5576040519150601f19603f3d011682016040523d82523d6000602084013e6105ca565b606091505b50509050806106255760405162461bcd60e51b815260206004820152602160248201527f5769746e657450726f78793a20756e61626c6520746f20696e697469616c697a6044820152606560f81b6064820152608401610149565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0387169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a2846001600160a01b0316635479d9406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156106e5575060408051601f3d908101601f191682019092526106e291810190610827565b60015b6107315760405162461bcd60e51b815260206004820152601a60248201527f5769746e657450726f78793a206e6f7420636f6d706c69616e740000000000006044820152606401610149565b925061073b915050565b92915050565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561076a57600080fd5b82356001600160a01b038116811461078157600080fd5b9150602083013567ffffffffffffffff8082111561079e57600080fd5b818501915085601f8301126107b257600080fd5b8135818111156107c4576107c4610741565b604051601f8201601f19908116603f011681019083821181831017156107ec576107ec610741565b8160405282815288602084870101111561080557600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60006020828403121561083957600080fd5b8151801515811461084957600080fd5b9392505050565b60005b8381101561086b578181015183820152602001610853565b50506000910152565b60008251610886818460208701610850565b9190910192915050565b6000602082840312156108a257600080fd5b5051919050565b60208152600082518060208401526108c8816040850160208701610850565b601f01601f1916919091016040019291505056fea26469706673582212200771bc4bad015c089efb2351eb3266c8aad36c8daccf86bbf3421605ef5fc23c64736f6c63430008110033", - "immutableReferences": {}, - "generatedSources": [], - "deployedGeneratedSources": [ - { - "ast": { - "nodeType": "YulBlock", - "src": "0:6066:84", - "statements": [ - { - "nodeType": "YulBlock", - "src": "6:3:84", - "statements": [] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "115:102:84", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "125:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "137:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "148:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "133:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "133:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "125:4:84" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "167:9:84" - }, - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "182:6:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "198:3:84", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "203:1:84", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "194:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "194:11:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "207:1:84", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "190:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "190:19:84" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "178:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "178:32:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "160:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "160:51:84" - }, - "nodeType": "YulExpressionStatement", - "src": "160:51:84" - } - ] - }, - "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "84:9:84", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "95:6:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "106:4:84", - "type": "" - } - ], - "src": "14:203:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "254:95:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "271:1:84", - "type": "", - "value": "0" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "278:3:84", - "type": "", - "value": "224" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "283:10:84", - "type": "", - "value": "0x4e487b71" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "274:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "274:20:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "264:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "264:31:84" - }, - "nodeType": "YulExpressionStatement", - "src": "264:31:84" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "311:1:84", - "type": "", - "value": "4" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "314:4:84", - "type": "", - "value": "0x41" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "304:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "304:15:84" - }, - "nodeType": "YulExpressionStatement", - "src": "304:15:84" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "335:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "338:4:84", - "type": "", - "value": "0x24" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "328:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "328:15:84" - }, - "nodeType": "YulExpressionStatement", - "src": "328:15:84" - } - ] - }, - "name": "panic_error_0x41", - "nodeType": "YulFunctionDefinition", - "src": "222:127:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "450:999:84", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "496:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "505:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "508:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "498:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "498:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "498:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "471:7:84" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "480:9:84" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "467:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "467:23:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "492:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "463:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "463:32:84" - }, - "nodeType": "YulIf", - "src": "460:52:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "521:36:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "547:9:84" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "534:12:84" - }, - "nodeType": "YulFunctionCall", - "src": "534:23:84" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "525:5:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "620:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "629:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "632:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "622:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "622:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "622:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "579:5:84" - }, - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "590:5:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "605:3:84", - "type": "", - "value": "160" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "610:1:84", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "shl", - "nodeType": "YulIdentifier", - "src": "601:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "601:11:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "614:1:84", - "type": "", - "value": "1" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "597:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "597:19:84" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "586:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "586:31:84" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "576:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "576:42:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "569:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "569:50:84" - }, - "nodeType": "YulIf", - "src": "566:70:84" - }, - { - "nodeType": "YulAssignment", - "src": "645:15:84", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "655:5:84" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "645:6:84" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "669:46:84", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "700:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "711:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "696:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "696:18:84" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "683:12:84" - }, - "nodeType": "YulFunctionCall", - "src": "683:32:84" - }, - "variables": [ - { - "name": "offset", - "nodeType": "YulTypedName", - "src": "673:6:84", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "724:28:84", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "734:18:84", - "type": "", - "value": "0xffffffffffffffff" - }, - "variables": [ - { - "name": "_1", - "nodeType": "YulTypedName", - "src": "728:2:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "779:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "788:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "791:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "781:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "781:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "781:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "767:6:84" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "775:2:84" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "764:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "764:14:84" - }, - "nodeType": "YulIf", - "src": "761:34:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "804:32:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "818:9:84" - }, - { - "name": "offset", - "nodeType": "YulIdentifier", - "src": "829:6:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "814:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "814:22:84" - }, - "variables": [ - { - "name": "_2", - "nodeType": "YulTypedName", - "src": "808:2:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "884:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "893:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "896:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "886:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "886:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "886:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "863:2:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "867:4:84", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "859:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "859:13:84" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "874:7:84" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "855:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "855:27:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "848:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "848:35:84" - }, - "nodeType": "YulIf", - "src": "845:55:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "909:26:84", - "value": { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "932:2:84" - } - ], - "functionName": { - "name": "calldataload", - "nodeType": "YulIdentifier", - "src": "919:12:84" - }, - "nodeType": "YulFunctionCall", - "src": "919:16:84" - }, - "variables": [ - { - "name": "_3", - "nodeType": "YulTypedName", - "src": "913:2:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "958:22:84", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "960:16:84" - }, - "nodeType": "YulFunctionCall", - "src": "960:18:84" - }, - "nodeType": "YulExpressionStatement", - "src": "960:18:84" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "950:2:84" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "954:2:84" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "947:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "947:10:84" - }, - "nodeType": "YulIf", - "src": "944:36:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "989:17:84", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1003:2:84", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "999:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "999:7:84" - }, - "variables": [ - { - "name": "_4", - "nodeType": "YulTypedName", - "src": "993:2:84", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1015:23:84", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1035:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1029:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "1029:9:84" - }, - "variables": [ - { - "name": "memPtr", - "nodeType": "YulTypedName", - "src": "1019:6:84", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1047:71:84", - "value": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1069:6:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1093:2:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1097:4:84", - "type": "", - "value": "0x1f" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1089:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1089:13:84" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1104:2:84" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1085:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1085:22:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1109:2:84", - "type": "", - "value": "63" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1081:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1081:31:84" - }, - { - "name": "_4", - "nodeType": "YulIdentifier", - "src": "1114:2:84" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "1077:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1077:40:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1065:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1065:53:84" - }, - "variables": [ - { - "name": "newFreePtr", - "nodeType": "YulTypedName", - "src": "1051:10:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1177:22:84", - "statements": [ - { - "expression": { - "arguments": [], - "functionName": { - "name": "panic_error_0x41", - "nodeType": "YulIdentifier", - "src": "1179:16:84" - }, - "nodeType": "YulFunctionCall", - "src": "1179:18:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1179:18:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1136:10:84" - }, - { - "name": "_1", - "nodeType": "YulIdentifier", - "src": "1148:2:84" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1133:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "1133:18:84" - }, - { - "arguments": [ - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1156:10:84" - }, - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1168:6:84" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "1153:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "1153:22:84" - } - ], - "functionName": { - "name": "or", - "nodeType": "YulIdentifier", - "src": "1130:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "1130:46:84" - }, - "nodeType": "YulIf", - "src": "1127:72:84" - }, - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1215:2:84", - "type": "", - "value": "64" - }, - { - "name": "newFreePtr", - "nodeType": "YulIdentifier", - "src": "1219:10:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1208:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1208:22:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1208:22:84" - }, - { - "expression": { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1246:6:84" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1254:2:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1239:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1239:18:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1239:18:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1303:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1312:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1315:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1305:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1305:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1305:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1280:2:84" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1284:2:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1276:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1276:11:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1289:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1272:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1272:20:84" - }, - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "1294:7:84" - } - ], - "functionName": { - "name": "gt", - "nodeType": "YulIdentifier", - "src": "1269:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "1269:33:84" - }, - "nodeType": "YulIf", - "src": "1266:53:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1345:6:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1353:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1341:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1341:15:84" - }, - { - "arguments": [ - { - "name": "_2", - "nodeType": "YulIdentifier", - "src": "1362:2:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1366:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1358:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1358:11:84" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1371:2:84" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "1328:12:84" - }, - "nodeType": "YulFunctionCall", - "src": "1328:46:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1328:46:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "arguments": [ - { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1398:6:84" - }, - { - "name": "_3", - "nodeType": "YulIdentifier", - "src": "1406:2:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1394:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1394:15:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1411:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1390:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1390:24:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1416:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1383:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1383:35:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1383:35:84" - }, - { - "nodeType": "YulAssignment", - "src": "1427:16:84", - "value": { - "name": "memPtr", - "nodeType": "YulIdentifier", - "src": "1437:6:84" - }, - "variableNames": [ - { - "name": "value1", - "nodeType": "YulIdentifier", - "src": "1427:6:84" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_addresst_bytes_memory_ptr", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "408:9:84", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "419:7:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "431:6:84", - "type": "" - }, - { - "name": "value1", - "nodeType": "YulTypedName", - "src": "439:6:84", - "type": "" - } - ], - "src": "354:1095:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1549:92:84", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "1559:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1571:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1582:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1567:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1567:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1559:4:84" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1601:9:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "1626:6:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1619:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1619:14:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "1612:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1612:22:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1594:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1594:41:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1594:41:84" - } - ] - }, - "name": "abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1518:9:84", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "1529:6:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1540:4:84", - "type": "" - } - ], - "src": "1454:187:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1820:182:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1837:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1848:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1830:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1830:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1830:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1871:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1882:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1867:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1867:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1887:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1860:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1860:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1860:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1910:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1921:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1906:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1906:18:84" - }, - { - "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e", - "kind": "string", - "nodeType": "YulLiteral", - "src": "1926:34:84", - "type": "", - "value": "WitnetProxy: null implementation" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "1899:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "1899:62:84" - }, - "nodeType": "YulExpressionStatement", - "src": "1899:62:84" - }, - { - "nodeType": "YulAssignment", - "src": "1970:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "1982:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1993:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "1978:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "1978:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "1970:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_d599eaa5e68d91d75c142446490ab9a15fd0284a41ce949219b5b4d8f267239a__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "1797:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "1811:4:84", - "type": "" - } - ], - "src": "1646:356:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2181:181:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2198:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2209:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2191:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2191:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2191:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2232:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2243:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2228:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2228:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2248:2:84", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2221:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2221:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2221:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2271:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2282:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2267:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2267:18:84" - }, - { - "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2287:33:84", - "type": "", - "value": "WitnetProxy: nothing to upgrade" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2260:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2260:61:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2260:61:84" - }, - { - "nodeType": "YulAssignment", - "src": "2330:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2342:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2353:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2338:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2338:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "2330:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_e332eab1bae45430d1201a30c0d80d8fcb5570f9e70201a9eb7b229e17fd2084__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2158:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2172:4:84", - "type": "" - } - ], - "src": "2007:355:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2445:199:84", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "2491:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2500:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2503:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2493:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2493:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2493:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "2466:7:84" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2475:9:84" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "2462:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2462:23:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2487:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "2458:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2458:32:84" - }, - "nodeType": "YulIf", - "src": "2455:52:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "2516:29:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2535:9:84" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "2529:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "2529:16:84" - }, - "variables": [ - { - "name": "value", - "nodeType": "YulTypedName", - "src": "2520:5:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2598:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2607:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2610:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "2600:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2600:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2600:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2567:5:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2588:5:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2581:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2581:13:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2574:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2574:21:84" - } - ], - "functionName": { - "name": "eq", - "nodeType": "YulIdentifier", - "src": "2564:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "2564:32:84" - } - ], - "functionName": { - "name": "iszero", - "nodeType": "YulIdentifier", - "src": "2557:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2557:40:84" - }, - "nodeType": "YulIf", - "src": "2554:60:84" - }, - { - "nodeType": "YulAssignment", - "src": "2623:15:84", - "value": { - "name": "value", - "nodeType": "YulIdentifier", - "src": "2633:5:84" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "2623:6:84" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bool_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2411:9:84", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "2422:7:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "2434:6:84", - "type": "" - } - ], - "src": "2367:277:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "2823:232:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2840:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2851:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2833:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2833:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2833:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2874:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2885:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2870:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2870:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2890:2:84", - "type": "", - "value": "42" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2863:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2863:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2863:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2913:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2924:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2909:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2909:18:84" - }, - { - "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b20757067", - "kind": "string", - "nodeType": "YulLiteral", - "src": "2929:34:84", - "type": "", - "value": "WitnetProxy: unable to check upg" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2902:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2902:62:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2902:62:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "2984:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "2995:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "2980:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "2980:18:84" - }, - { - "hexValue": "7261646162696c697479", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3000:12:84", - "type": "", - "value": "radability" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "2973:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "2973:40:84" - }, - "nodeType": "YulExpressionStatement", - "src": "2973:40:84" - }, - { - "nodeType": "YulAssignment", - "src": "3022:27:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3034:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3045:3:84", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3030:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3030:19:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3022:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_7f859058ad3ee4e192700ff813ed67dc892a0c7de91510ee584a0ac25fc982fc__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "2800:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "2814:4:84", - "type": "" - } - ], - "src": "2649:406:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3234:177:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3251:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3262:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3244:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "3244:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3244:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3285:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3296:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3281:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3281:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3301:2:84", - "type": "", - "value": "27" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3274:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "3274:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3274:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3324:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3335:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3320:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3320:18:84" - }, - { - "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65", - "kind": "string", - "nodeType": "YulLiteral", - "src": "3340:29:84", - "type": "", - "value": "WitnetProxy: not upgradable" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3313:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "3313:57:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3313:57:84" - }, - { - "nodeType": "YulAssignment", - "src": "3379:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "3391:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3402:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3387:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3387:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "3379:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_d96132834a96bae5cb2f32cb07f13985dcde0f2358055c198eb3065af6c5aa7f__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "3211:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "3225:4:84", - "type": "" - } - ], - "src": "3060:351:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3482:184:84", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3492:10:84", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3501:1:84", - "type": "", - "value": "0" - }, - "variables": [ - { - "name": "i", - "nodeType": "YulTypedName", - "src": "3496:1:84", - "type": "" - } - ] - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3561:63:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3586:3:84" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3591:1:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3582:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3582:11:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "src", - "nodeType": "YulIdentifier", - "src": "3605:3:84" - }, - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3610:1:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3601:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3601:11:84" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3595:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "3595:18:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3575:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "3575:39:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3575:39:84" - } - ] - }, - "condition": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3522:1:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3525:6:84" - } - ], - "functionName": { - "name": "lt", - "nodeType": "YulIdentifier", - "src": "3519:2:84" - }, - "nodeType": "YulFunctionCall", - "src": "3519:13:84" - }, - "nodeType": "YulForLoop", - "post": { - "nodeType": "YulBlock", - "src": "3533:19:84", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "3535:15:84", - "value": { - "arguments": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3544:1:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3547:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3540:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3540:10:84" - }, - "variableNames": [ - { - "name": "i", - "nodeType": "YulIdentifier", - "src": "3535:1:84" - } - ] - } - ] - }, - "pre": { - "nodeType": "YulBlock", - "src": "3515:3:84", - "statements": [] - }, - "src": "3511:113:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "dst", - "nodeType": "YulIdentifier", - "src": "3644:3:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3649:6:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3640:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3640:16:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3658:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "3633:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "3633:27:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3633:27:84" - } - ] - }, - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "src", - "nodeType": "YulTypedName", - "src": "3460:3:84", - "type": "" - }, - { - "name": "dst", - "nodeType": "YulTypedName", - "src": "3465:3:84", - "type": "" - }, - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3470:6:84", - "type": "" - } - ], - "src": "3416:250:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "3808:150:84", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "3818:27:84", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3838:6:84" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "3832:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "3832:13:84" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "3822:6:84", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "3893:6:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "3901:4:84", - "type": "", - "value": "0x20" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3889:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3889:17:84" - }, - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3908:3:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3913:6:84" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "3854:34:84" - }, - "nodeType": "YulFunctionCall", - "src": "3854:66:84" - }, - "nodeType": "YulExpressionStatement", - "src": "3854:66:84" - }, - { - "nodeType": "YulAssignment", - "src": "3929:23:84", - "value": { - "arguments": [ - { - "name": "pos", - "nodeType": "YulIdentifier", - "src": "3940:3:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "3945:6:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "3936:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "3936:16:84" - }, - "variableNames": [ - { - "name": "end", - "nodeType": "YulIdentifier", - "src": "3929:3:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_packed_t_bytes_memory_ptr__to_t_bytes_memory_ptr__nonPadded_inplace_fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "pos", - "nodeType": "YulTypedName", - "src": "3784:3:84", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "3789:6:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "end", - "nodeType": "YulTypedName", - "src": "3800:3:84", - "type": "" - } - ], - "src": "3671:287:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4137:176:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4154:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4165:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4147:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4147:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4147:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4188:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4199:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4184:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4184:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4204:2:84", - "type": "", - "value": "26" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4177:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4177:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4177:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4227:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4238:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4223:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4223:18:84" - }, - { - "hexValue": "5769746e657450726f78793a206e6f7420636f6d706c69616e74", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4243:28:84", - "type": "", - "value": "WitnetProxy: not compliant" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4216:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4216:56:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4216:56:84" - }, - { - "nodeType": "YulAssignment", - "src": "4281:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4293:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4304:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4289:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4289:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4281:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4114:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4128:4:84", - "type": "" - } - ], - "src": "3963:350:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4492:177:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4509:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4520:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4502:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4502:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4502:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4543:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4554:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4539:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4539:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4559:2:84", - "type": "", - "value": "27" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4532:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4532:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4532:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4582:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4593:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4578:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4578:18:84" - }, - { - "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564", - "kind": "string", - "nodeType": "YulLiteral", - "src": "4598:29:84", - "type": "", - "value": "WitnetProxy: not authorized" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "4571:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4571:57:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4571:57:84" - }, - { - "nodeType": "YulAssignment", - "src": "4637:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4649:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4660:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "4645:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4645:18:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "4637:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_ba8d4d661ce88eb2915ba133e6cad533938b754d7b66d8253879ef2c2193ecb2__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4469:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "4483:4:84", - "type": "" - } - ], - "src": "4318:351:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "4755:103:84", - "statements": [ - { - "body": { - "nodeType": "YulBlock", - "src": "4801:16:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4810:1:84", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4813:1:84", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "4803:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "4803:12:84" - }, - "nodeType": "YulExpressionStatement", - "src": "4803:12:84" - } - ] - }, - "condition": { - "arguments": [ - { - "arguments": [ - { - "name": "dataEnd", - "nodeType": "YulIdentifier", - "src": "4776:7:84" - }, - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4785:9:84" - } - ], - "functionName": { - "name": "sub", - "nodeType": "YulIdentifier", - "src": "4772:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4772:23:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4797:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "slt", - "nodeType": "YulIdentifier", - "src": "4768:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "4768:32:84" - }, - "nodeType": "YulIf", - "src": "4765:52:84" - }, - { - "nodeType": "YulAssignment", - "src": "4826:26:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "4842:9:84" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "4836:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "4836:16:84" - }, - "variableNames": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "4826:6:84" - } - ] - } - ] - }, - "name": "abi_decode_tuple_t_bytes32_fromMemory", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "4721:9:84", - "type": "" - }, - { - "name": "dataEnd", - "nodeType": "YulTypedName", - "src": "4732:7:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "4744:6:84", - "type": "" - } - ], - "src": "4674:184:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5037:226:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5054:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5065:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5047:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5047:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5047:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5088:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5099:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5084:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5084:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5104:2:84", - "type": "", - "value": "36" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5077:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5077:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5077:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5127:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5138:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5123:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5123:18:84" - }, - { - "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5143:34:84", - "type": "", - "value": "WitnetProxy: proxiableUUIDs mism" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5116:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5116:62:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5116:62:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5198:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5209:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5194:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5194:18:84" - }, - { - "hexValue": "61746368", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5214:6:84", - "type": "", - "value": "atch" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5187:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5187:34:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5187:34:84" - }, - { - "nodeType": "YulAssignment", - "src": "5230:27:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5242:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5253:3:84", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5238:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5238:19:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5230:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_f3c1ad1fa1688d47e62cc4dd5b4be101315ef47e38e05aa3a37a4ef2e1cec0a8__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5014:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5028:4:84", - "type": "" - } - ], - "src": "4863:400:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5387:275:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5404:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5415:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5397:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5397:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5397:21:84" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "5427:27:84", - "value": { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5447:6:84" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "5441:5:84" - }, - "nodeType": "YulFunctionCall", - "src": "5441:13:84" - }, - "variables": [ - { - "name": "length", - "nodeType": "YulTypedName", - "src": "5431:6:84", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5474:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5485:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5470:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5470:18:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5490:6:84" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5463:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5463:34:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5463:34:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "value0", - "nodeType": "YulIdentifier", - "src": "5545:6:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5553:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5541:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5541:15:84" - }, - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5562:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5573:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5558:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5558:18:84" - }, - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5578:6:84" - } - ], - "functionName": { - "name": "copy_memory_to_memory_with_cleanup", - "nodeType": "YulIdentifier", - "src": "5506:34:84" - }, - "nodeType": "YulFunctionCall", - "src": "5506:79:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5506:79:84" - }, - { - "nodeType": "YulAssignment", - "src": "5594:62:84", - "value": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5610:9:84" - }, - { - "arguments": [ - { - "arguments": [ - { - "name": "length", - "nodeType": "YulIdentifier", - "src": "5629:6:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5637:2:84", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5625:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5625:15:84" - }, - { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5646:2:84", - "type": "", - "value": "31" - } - ], - "functionName": { - "name": "not", - "nodeType": "YulIdentifier", - "src": "5642:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5642:7:84" - } - ], - "functionName": { - "name": "and", - "nodeType": "YulIdentifier", - "src": "5621:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5621:29:84" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5606:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5606:45:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5653:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5602:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5602:54:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "5594:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5356:9:84", - "type": "" - }, - { - "name": "value0", - "nodeType": "YulTypedName", - "src": "5367:6:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5378:4:84", - "type": "" - } - ], - "src": "5268:394:84" - }, - { - "body": { - "nodeType": "YulBlock", - "src": "5841:223:84", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5858:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5869:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5851:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5851:21:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5851:21:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5892:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5903:2:84", - "type": "", - "value": "32" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5888:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5888:18:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5908:2:84", - "type": "", - "value": "33" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5881:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5881:30:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5881:30:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "5931:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "5942:2:84", - "type": "", - "value": "64" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5927:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5927:18:84" - }, - { - "hexValue": "5769746e657450726f78793a20756e61626c6520746f20696e697469616c697a", - "kind": "string", - "nodeType": "YulLiteral", - "src": "5947:34:84", - "type": "", - "value": "WitnetProxy: unable to initializ" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5920:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5920:62:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5920:62:84" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6002:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6013:2:84", - "type": "", - "value": "96" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "5998:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "5998:18:84" - }, - { - "hexValue": "65", - "kind": "string", - "nodeType": "YulLiteral", - "src": "6018:3:84", - "type": "", - "value": "e" - } - ], - "functionName": { - "name": "mstore", - "nodeType": "YulIdentifier", - "src": "5991:6:84" - }, - "nodeType": "YulFunctionCall", - "src": "5991:31:84" - }, - "nodeType": "YulExpressionStatement", - "src": "5991:31:84" - }, - { - "nodeType": "YulAssignment", - "src": "6031:27:84", - "value": { - "arguments": [ - { - "name": "headStart", - "nodeType": "YulIdentifier", - "src": "6043:9:84" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "6054:3:84", - "type": "", - "value": "128" - } - ], - "functionName": { - "name": "add", - "nodeType": "YulIdentifier", - "src": "6039:3:84" - }, - "nodeType": "YulFunctionCall", - "src": "6039:19:84" - }, - "variableNames": [ - { - "name": "tail", - "nodeType": "YulIdentifier", - "src": "6031:4:84" - } - ] - } - ] - }, - "name": "abi_encode_tuple_t_stringliteral_55e9f07b665adf0e8c084720fbd831f583a2d75f5997894b64a77e28a0171f3c__to_t_string_memory_ptr__fromStack_reversed", - "nodeType": "YulFunctionDefinition", - "parameters": [ - { - "name": "headStart", - "nodeType": "YulTypedName", - "src": "5818:9:84", - "type": "" - } - ], - "returnVariables": [ - { - "name": "tail", - "nodeType": "YulTypedName", - "src": "5832:4:84", - "type": "" - } - ], - "src": "5667:397:84" - } - ] - }, - "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 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 let _1 := 0xffffffffffffffff\n if gt(offset, _1) { revert(0, 0) }\n let _2 := add(headStart, offset)\n if iszero(slt(add(_2, 0x1f), dataEnd)) { revert(0, 0) }\n let _3 := calldataload(_2)\n if gt(_3, _1) { panic_error_0x41() }\n let _4 := not(31)\n let memPtr := mload(64)\n let newFreePtr := add(memPtr, and(add(and(add(_3, 0x1f), _4), 63), _4))\n if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { panic_error_0x41() }\n mstore(64, newFreePtr)\n mstore(memPtr, _3)\n if gt(add(add(_2, _3), 32), dataEnd) { revert(0, 0) }\n calldatacopy(add(memPtr, 32), add(_2, 32), _3)\n mstore(add(add(memPtr, _3), 32), 0)\n value1 := memPtr\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_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 26)\n mstore(add(headStart, 64), \"WitnetProxy: not compliant\")\n tail := add(headStart, 96)\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_tuple_t_bytes_memory_ptr__to_t_bytes_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory_with_cleanup(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), not(31))), 64)\n }\n function abi_encode_tuple_t_stringliteral_55e9f07b665adf0e8c084720fbd831f583a2d75f5997894b64a77e28a0171f3c__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), \"WitnetProxy: unable to initializ\")\n mstore(add(headStart, 96), \"e\")\n tail := add(headStart, 128)\n }\n}", - "id": 84, - "language": "Yul", - "name": "#utility.yul" - } - ], - "sourceMap": "244:4800:28:-:0;;;500:17;;;;;;;;;;244:4800;;;;;;", - "deployedSourceMap": "244:4800:28:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;726:23;752:16;:14;:16::i;:::-;726:42;;1116:4;1110:11;1156:14;1153:1;1148:3;1135:36;1260:1;1257;1241:14;1236:3;1219:15;1212:5;1199:63;1288:16;1341:4;1338:1;1333:3;1318:28;1367:6;1391:119;;;;1653:4;1648:3;1641:17;1391:119;1485:4;1480:3;1473:17;1761:110;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;178:32:84;;;160:51;;148:2;133:18;1761:110:28;;;;;;;;2165:2454;;;;;;;;;;-1:-1:-1;2165:2454:28;;;;;:::i;:::-;;:::i;:::-;;;1619:14:84;;1612:22;1594:41;;1582:2;1567:18;2165:2454:28;1454:187:84;1761:110:28;4955:66;1835:28;-1:-1:-1;;;;;1835:28:28;;1761:110::o;2165:2454::-;2261:4;-1:-1:-1;;;;;2338:32:28;;2330:77;;;;-1:-1:-1;;;2330:77:28;;1848:2:84;2330:77:28;;;1830:21:84;;;1867:18;;;1860:30;1926:34;1906:18;;;1899:62;1978:18;;2330:77:28;;;;;;;;;2420:26;2449:16;:14;:16::i;:::-;2420:45;-1:-1:-1;;;;;;2480:32:28;;;2476:1285;;2632:18;-1:-1:-1;;;;;2610:40:28;:18;-1:-1:-1;;;;;2610:40:28;;2602:84;;;;-1:-1:-1;;;2602:84:28;;2209:2:84;2602:84:28;;;2191:21:84;2248:2;2228:18;;;2221:30;2287:33;2267:18;;;2260:61;2338:18;;2602:84:28;2007:355:84;2602:84:28;2802:18;-1:-1:-1;;;;;2790:44:28;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2790:46:28;;;;;;;;-1:-1:-1;;2790:46:28;;;;;;;;;;;;:::i;:::-;;;2786:262;;2980:52;;-1:-1:-1;;;2980:52:28;;2851:2:84;2980:52:28;;;2833:21:84;2890:2;2870:18;;;2863:30;2929:34;2909:18;;;2902:62;-1:-1:-1;;;2980:18:84;;;2973:40;3030:19;;2980:52:28;2649:406:84;2786:262:28;2893:13;2885:53;;;;-1:-1:-1;;;2885:53:28;;3262:2:84;2885:53:28;;;3244:21:84;3301:2;3281:18;;;3274:30;3340:29;3320:18;;;3313:57;3387:18;;2885:53:28;3060:351:84;2885:53:28;-1:-1:-1;3252:125:28;;3348:10;3252:125;;;160:51:84;3161:15:28;;;;-1:-1:-1;;;;;3202:31:28;;;133:18:84;;3252:125:28;;;-1:-1:-1;;3252:125:28;;;;;;;;;;;;;;-1:-1:-1;;;;;3252:125:28;-1:-1:-1;;;3252:125:28;;;3202:190;;;3252:125;3202:190;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3160:232;;;;3415:10;3407:49;;;;-1:-1:-1;;;3407:49:28;;4165:2:84;3407:49:28;;;4147:21:84;4204:2;4184:18;;;4177:30;4243:28;4223:18;;;4216:56;4289:18;;3407:49:28;3963:350:84;3407:49:28;3490:7;3479:27;;;;;;;;;;;;:::i;:::-;3471:67;;;;-1:-1:-1;;;3471:67:28;;4520:2:84;3471:67:28;;;4502:21:84;4559:2;4539:18;;;4532:30;4598:29;4578:18;;;4571:57;4645:18;;3471:67:28;4318:351:84;3471:67:28;3642:18;-1:-1:-1;;;;;3630:45:28;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3591:18;-1:-1:-1;;;;;3579:45:28;;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:98;3553:196;;;;-1:-1:-1;;;3553:196:28;;5065:2:84;3553:196:28;;;5047:21:84;5104:2;5084:18;;;5077:30;5143:34;5123:18;;;5116:62;-1:-1:-1;;;5194:18:84;;;5187:34;5238:19;;3553:196:28;4863:400:84;3553:196:28;2514:1247;;2476:1285;3846:20;3871:18;-1:-1:-1;;;;;3871:31:28;3997:9;3917:104;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3917:104:28;;;;;;;;;;;;;;-1:-1:-1;;;;;3917:104:28;-1:-1:-1;;;3917:104:28;;;3871:161;;;3917:104;3871:161;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3845:187;;;4051:15;4043:61;;;;-1:-1:-1;;;4043:61:28;;5869:2:84;4043:61:28;;;5851:21:84;5908:2;5888:18;;;5881:30;5947:34;5927:18;;;5920:62;-1:-1:-1;;;5998:18:84;;;5991:31;6039:19;;4043:61:28;5667:397:84;4043:61:28;4955:66;4199:49;;-1:-1:-1;;;;;;4199:49:28;-1:-1:-1;;;;;4199:49:28;;;;;;;;4264:28;;;;-1:-1:-1;;4264:28:28;4421:18;-1:-1:-1;;;;;4409:44:28;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4409:46:28;;;;;;;;-1:-1:-1;;4409:46:28;;;;;;;;;;;;:::i;:::-;;;4405:207;;4563:37;;-1:-1:-1;;;4563:37:28;;4165:2:84;4563:37:28;;;4147:21:84;4204:2;4184:18;;;4177:30;4243:28;4223:18;;;4216:56;4289:18;;4563:37:28;3963:350:84;4405:207:28;4507:13;-1:-1:-1;4500:20:28;;-1:-1:-1;;4500:20:28;2165:2454;;;;;:::o;222:127:84:-;283:10;278:3;274:20;271:1;264:31;314:4;311:1;304:15;338:4;335:1;328:15;354:1095;431:6;439;492:2;480:9;471:7;467:23;463:32;460:52;;;508:1;505;498:12;460:52;534:23;;-1:-1:-1;;;;;586:31:84;;576:42;;566:70;;632:1;629;622:12;566:70;655:5;-1:-1:-1;711:2:84;696:18;;683:32;734:18;764:14;;;761:34;;;791:1;788;781:12;761:34;829:6;818:9;814:22;804:32;;874:7;867:4;863:2;859:13;855:27;845:55;;896:1;893;886:12;845:55;932:2;919:16;954:2;950;947:10;944:36;;;960:18;;:::i;:::-;1035:2;1029:9;1003:2;1089:13;;-1:-1:-1;;1085:22:84;;;1109:2;1081:31;1077:40;1065:53;;;1133:18;;;1153:22;;;1130:46;1127:72;;;1179:18;;:::i;:::-;1219:10;1215:2;1208:22;1254:2;1246:6;1239:18;1294:7;1289:2;1284;1280;1276:11;1272:20;1269:33;1266:53;;;1315:1;1312;1305:12;1266:53;1371:2;1366;1362;1358:11;1353:2;1345:6;1341:15;1328:46;1416:1;1411:2;1406;1398:6;1394:15;1390:24;1383:35;1437:6;1427:16;;;;;;;354:1095;;;;;:::o;2367:277::-;2434:6;2487:2;2475:9;2466:7;2462:23;2458:32;2455:52;;;2503:1;2500;2493:12;2455:52;2535:9;2529:16;2588:5;2581:13;2574:21;2567:5;2564:32;2554:60;;2610:1;2607;2600:12;2554:60;2633:5;2367:277;-1:-1:-1;;;2367:277:84:o;3416:250::-;3501:1;3511:113;3525:6;3522:1;3519:13;3511:113;;;3601:11;;;3595:18;3582:11;;;3575:39;3547:2;3540:10;3511:113;;;-1:-1:-1;;3658:1:84;3640:16;;3633:27;3416:250::o;3671:287::-;3800:3;3838:6;3832:13;3854:66;3913:6;3908:3;3901:4;3893:6;3889:17;3854:66;:::i;:::-;3936:16;;;;;3671:287;-1:-1:-1;;3671:287:84:o;4674:184::-;4744:6;4797:2;4785:9;4776:7;4772:23;4768:32;4765:52;;;4813:1;4810;4803:12;4765:52;-1:-1:-1;4836:16:84;;4674:184;-1:-1:-1;4674:184:84:o;5268:394::-;5415:2;5404:9;5397:21;5378:4;5447:6;5441:13;5490:6;5485:2;5474:9;5470:18;5463:34;5506:79;5578:6;5573:2;5562:9;5558:18;5553:2;5545:6;5541:15;5506:79;:::i;:::-;5646:2;5625:15;-1:-1:-1;;5621:29:84;5606:45;;;;5653:2;5602:54;;5268:394;-1:-1:-1;;5268:394:84: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 The Witnet Foundation.\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: not compliant\");\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,) = _newImplementation.delegatecall(\r\n abi.encodeWithSignature(\r\n \"initialize(bytes)\",\r\n _initData\r\n )\r\n );\r\n require(_wasInitialized, \"WitnetProxy: unable to initialize\");\r\n\r\n // If all checks and initialization pass, update implementation address:\r\n __proxySlot().implementation = _newImplementation;\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: not compliant\");\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\\impls\\WitnetProxy.sol", - "ast": { - "absolutePath": "project:/contracts/impls/WitnetProxy.sol", - "exportedSymbols": { - "AddressUpgradeable": [ - 452 - ], - "Initializable": [ - 168 - ], - "Proxiable": [ - 23471 - ], - "Upgradeable": [ - 23590 - ], - "WitnetProxy": [ - 6719 - ] - }, - "id": 6720, - "license": "MIT", - "nodeType": "SourceUnit", - "nodes": [ - { - "id": 6517, - "literals": [ - "solidity", - ">=", - "0.7", - ".0", - "<", - "0.9", - ".0" - ], - "nodeType": "PragmaDirective", - "src": "35:31:28" - }, - { - "id": 6518, - "literals": [ - "experimental", - "ABIEncoderV2" - ], - "nodeType": "PragmaDirective", - "src": "68:33:28" - }, - { - "absolutePath": "project:/contracts/patterns/Upgradeable.sol", - "file": "../patterns/Upgradeable.sol", - "id": 6519, - "nameLocation": "-1:-1:-1", - "nodeType": "ImportDirective", - "scope": 6720, - "sourceUnit": 23591, - "src": "105:37:28", - "symbolAliases": [], - "unitAlias": "" - }, - { - "abstract": false, - "baseContracts": [], - "canonicalName": "WitnetProxy", - "contractDependencies": [], - "contractKind": "contract", - "documentation": { - "id": 6520, - "nodeType": "StructuredDocumentation", - "src": "146:98:28", - "text": "@title WitnetProxy: upgradable delegate-proxy contract. \n @author The Witnet Foundation." - }, - "fullyImplemented": true, - "id": 6719, - "linearizedBaseContracts": [ - 6719 - ], - "name": "WitnetProxy", - "nameLocation": "253:11:28", - "nodeType": "ContractDefinition", - "nodes": [ - { - "anonymous": false, - "documentation": { - "id": 6521, - "nodeType": "StructuredDocumentation", - "src": "274:61:28", - "text": "Event emitted every time the implementation gets updated." - }, - "eventSelector": "bc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", - "id": 6525, - "name": "Upgraded", - "nameLocation": "347:8:28", - "nodeType": "EventDefinition", - "parameters": { - "id": 6524, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6523, - "indexed": true, - "mutability": "mutable", - "name": "implementation", - "nameLocation": "372:14:28", - "nodeType": "VariableDeclaration", - "scope": 6525, - "src": "356:30:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6522, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "356:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "355:32:28" - }, - "src": "341:47:28" - }, - { - "body": { - "id": 6529, - "nodeType": "Block", - "src": "515:2:28", - "statements": [] - }, - "documentation": { - "id": 6526, - "nodeType": "StructuredDocumentation", - "src": "398:96:28", - "text": "Constructor with no params as to ease eventual support of Singleton pattern (i.e. ERC-2470)." - }, - "id": 6530, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6527, - "nodeType": "ParameterList", - "parameters": [], - "src": "512:2:28" - }, - "returnParameters": { - "id": 6528, - "nodeType": "ParameterList", - "parameters": [], - "src": "515:0:28" - }, - "scope": 6719, - "src": "500:17:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 6533, - "nodeType": "Block", - "src": "560:2:28", - "statements": [] - }, - "id": 6534, - "implemented": true, - "kind": "receive", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6531, - "nodeType": "ParameterList", - "parameters": [], - "src": "532:2:28" - }, - "returnParameters": { - "id": 6532, - "nodeType": "ParameterList", - "parameters": [], - "src": "560:0:28" - }, - "scope": 6719, - "src": "525:37:28", - "stateMutability": "payable", - "virtual": true, - "visibility": "external" - }, - { - "body": { - "id": 6544, - "nodeType": "Block", - "src": "673:1023:28", - "statements": [ - { - "assignments": [ - 6539 - ], - "declarations": [ - { - "constant": false, - "id": 6539, - "mutability": "mutable", - "name": "_implementation", - "nameLocation": "734:15:28", - "nodeType": "VariableDeclaration", - "scope": 6544, - "src": "726:23:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6538, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "726:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6542, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6540, - "name": "implementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6556, - "src": "752:14:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 6541, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "752:16:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "726:42:28" - }, - { - "AST": { - "nodeType": "YulBlock", - "src": "788:901:28", - "statements": [ - { - "nodeType": "YulVariableDeclaration", - "src": "1099:22:28", - "value": { - "arguments": [ - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1116:4:28", - "type": "", - "value": "0x40" - } - ], - "functionName": { - "name": "mload", - "nodeType": "YulIdentifier", - "src": "1110:5:28" - }, - "nodeType": "YulFunctionCall", - "src": "1110:11:28" - }, - "variables": [ - { - "name": "ptr", - "nodeType": "YulTypedName", - "src": "1103:3:28", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1148:3:28" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1153:1:28", - "type": "", - "value": "0" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "1156:12:28" - }, - "nodeType": "YulFunctionCall", - "src": "1156:14:28" - } - ], - "functionName": { - "name": "calldatacopy", - "nodeType": "YulIdentifier", - "src": "1135:12:28" - }, - "nodeType": "YulFunctionCall", - "src": "1135:36:28" - }, - "nodeType": "YulExpressionStatement", - "src": "1135:36:28" - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1185:77:28", - "value": { - "arguments": [ - { - "arguments": [], - "functionName": { - "name": "gas", - "nodeType": "YulIdentifier", - "src": "1212:3:28" - }, - "nodeType": "YulFunctionCall", - "src": "1212:5:28" - }, - { - "name": "_implementation", - "nodeType": "YulIdentifier", - "src": "1219:15:28" - }, - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1236:3:28" - }, - { - "arguments": [], - "functionName": { - "name": "calldatasize", - "nodeType": "YulIdentifier", - "src": "1241:12:28" - }, - "nodeType": "YulFunctionCall", - "src": "1241:14:28" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1257:1:28", - "type": "", - "value": "0" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1260:1:28", - "type": "", - "value": "0" - } - ], - "functionName": { - "name": "delegatecall", - "nodeType": "YulIdentifier", - "src": "1199:12:28" - }, - "nodeType": "YulFunctionCall", - "src": "1199:63:28" - }, - "variables": [ - { - "name": "result", - "nodeType": "YulTypedName", - "src": "1189:6:28", - "type": "" - } - ] - }, - { - "nodeType": "YulVariableDeclaration", - "src": "1276:28:28", - "value": { - "arguments": [], - "functionName": { - "name": "returndatasize", - "nodeType": "YulIdentifier", - "src": "1288:14:28" - }, - "nodeType": "YulFunctionCall", - "src": "1288:16:28" - }, - "variables": [ - { - "name": "size", - "nodeType": "YulTypedName", - "src": "1280:4:28", - "type": "" - } - ] - }, - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1333:3:28" - }, - { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1338:1:28", - "type": "", - "value": "0" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1341:4:28" - } - ], - "functionName": { - "name": "returndatacopy", - "nodeType": "YulIdentifier", - "src": "1318:14:28" - }, - "nodeType": "YulFunctionCall", - "src": "1318:28:28" - }, - "nodeType": "YulExpressionStatement", - "src": "1318:28:28" - }, - { - "cases": [ - { - "body": { - "nodeType": "YulBlock", - "src": "1399:111:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1480:3:28" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1485:4:28" - } - ], - "functionName": { - "name": "revert", - "nodeType": "YulIdentifier", - "src": "1473:6:28" - }, - "nodeType": "YulFunctionCall", - "src": "1473:17:28" - }, - "nodeType": "YulExpressionStatement", - "src": "1473:17:28" - } - ] - }, - "nodeType": "YulCase", - "src": "1391:119:28", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "1396:1:28", - "type": "", - "value": "0" - } - }, - { - "body": { - "nodeType": "YulBlock", - "src": "1536:142:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "name": "ptr", - "nodeType": "YulIdentifier", - "src": "1648:3:28" - }, - { - "name": "size", - "nodeType": "YulIdentifier", - "src": "1653:4:28" - } - ], - "functionName": { - "name": "return", - "nodeType": "YulIdentifier", - "src": "1641:6:28" - }, - "nodeType": "YulFunctionCall", - "src": "1641:17:28" - }, - "nodeType": "YulExpressionStatement", - "src": "1641:17:28" - } - ] - }, - "nodeType": "YulCase", - "src": "1528:150:28", - "value": "default" - } - ], - "expression": { - "name": "result", - "nodeType": "YulIdentifier", - "src": "1367:6:28" - }, - "nodeType": "YulSwitch", - "src": "1360:318:28" - } - ] - }, - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 6539, - "isOffset": false, - "isSlot": false, - "src": "1219:15:28", - "valueSize": 1 - } - ], - "id": 6543, - "nodeType": "InlineAssembly", - "src": "779:910:28" - } - ] - }, - "documentation": { - "id": 6535, - "nodeType": "StructuredDocumentation", - "src": "570:69:28", - "text": "Payable fallback accepts delegating calls to payable functions. " - }, - "id": 6545, - "implemented": true, - "kind": "fallback", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6536, - "nodeType": "ParameterList", - "parameters": [], - "src": "653:2:28" - }, - "returnParameters": { - "id": 6537, - "nodeType": "ParameterList", - "parameters": [], - "src": "673:0:28" - }, - "scope": 6719, - "src": "645:1051:28", - "stateMutability": "payable", - "virtual": false, - "visibility": "external" - }, - { - "body": { - "id": 6555, - "nodeType": "Block", - "src": "1817:54:28", - "statements": [ - { - "expression": { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6551, - "name": "__proxySlot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6718, - "src": "1835:11:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$23442_storage_ptr_$", - "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)" - } - }, - "id": 6552, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1835:13:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProxiableSlot_$23442_storage_ptr", - "typeString": "struct Proxiable.ProxiableSlot storage pointer" - } - }, - "id": 6553, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": false, - "memberLocation": "1849:14:28", - "memberName": "implementation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23439, - "src": "1835:28:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "functionReturnParameters": 6550, - "id": 6554, - "nodeType": "Return", - "src": "1828:35:28" - } - ] - }, - "documentation": { - "id": 6546, - "nodeType": "StructuredDocumentation", - "src": "1704:51:28", - "text": "Returns proxy's current implementation address." - }, - "functionSelector": "5c60da1b", - "id": 6556, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "implementation", - "nameLocation": "1770:14:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6547, - "nodeType": "ParameterList", - "parameters": [], - "src": "1784:2:28" - }, - "returnParameters": { - "id": 6550, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6549, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6556, - "src": "1808:7:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6548, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1808:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1807:9:28" - }, - "scope": 6719, - "src": "1761:110:28", - "stateMutability": "view", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 6708, - "nodeType": "Block", - "src": "2272:2347:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6572, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6567, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "2338:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 6570, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2368:1:28", - "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": 6569, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2360:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6568, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2360:7:28", - "typeDescriptions": {} - } - }, - "id": 6571, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2360:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2338:32:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a206e756c6c20696d706c656d656e746174696f6e", - "id": 6573, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2372:34:28", - "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": 6566, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "2330:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6574, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2330:77:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6575, - "nodeType": "ExpressionStatement", - "src": "2330:77:28" - }, - { - "assignments": [ - 6577 - ], - "declarations": [ - { - "constant": false, - "id": 6577, - "mutability": "mutable", - "name": "_oldImplementation", - "nameLocation": "2428:18:28", - "nodeType": "VariableDeclaration", - "scope": 6708, - "src": "2420:26:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6576, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2420:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "id": 6580, - "initialValue": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6578, - "name": "implementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6556, - "src": "2449:14:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$", - "typeString": "function () view returns (address)" - } - }, - "id": 6579, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2449:16:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "2420:45:28" - }, - { - "condition": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6586, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6581, - "name": "_oldImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6577, - "src": "2480:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 6584, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2510:1:28", - "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": 6583, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "2502:7:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 6582, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2502:7:28", - "typeDescriptions": {} - } - }, - "id": 6585, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2502:10:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2480:32:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6662, - "nodeType": "IfStatement", - "src": "2476:1285:28", - "trueBody": { - "id": 6661, - "nodeType": "Block", - "src": "2514:1247:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 6590, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 6588, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "2610:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "id": 6589, - "name": "_oldImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6577, - "src": "2632:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "2610:40:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a206e6f7468696e6720746f2075706772616465", - "id": 6591, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2652:33:28", - "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": 6587, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "2602:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6592, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2602:84:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6593, - "nodeType": "ExpressionStatement", - "src": "2602:84:28" - }, - { - "clauses": [ - { - "block": { - "id": 6607, - "nodeType": "Block", - "src": "2866:88:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "id": 6603, - "name": "_isUpgradable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6600, - "src": "2893:13:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a206e6f742075706772616461626c65", - "id": 6604, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2908:29:28", - "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": 6602, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "2885:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6605, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2885:53:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6606, - "nodeType": "ExpressionStatement", - "src": "2885:53:28" - } - ] - }, - "errorName": "", - "id": 6608, - "nodeType": "TryCatchClause", - "parameters": { - "id": 6601, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6600, - "mutability": "mutable", - "name": "_isUpgradable", - "nameLocation": "2851:13:28", - "nodeType": "VariableDeclaration", - "scope": 6608, - "src": "2846:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6599, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2846:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2845:20:28" - }, - "src": "2837:117:28" - }, - { - "block": { - "id": 6613, - "nodeType": "Block", - "src": "2961:87:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "5769746e657450726f78793a20756e61626c6520746f20636865636b207570677261646162696c697479", - "id": 6610, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "2987:44:28", - "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": 6609, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967277, - 4294967277 - ], - "referencedDeclaration": 4294967277, - "src": "2980:6:28", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 6611, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2980:52:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6612, - "nodeType": "ExpressionStatement", - "src": "2980:52:28" - } - ] - }, - "errorName": "", - "id": 6614, - "nodeType": "TryCatchClause", - "src": "2955:93:28" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 6595, - "name": "_oldImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6577, - "src": "2802:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6594, - "name": "Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 23590, - "src": "2790:11:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Upgradeable_$23590_$", - "typeString": "type(contract Upgradeable)" - } - }, - "id": 6596, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2790:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_Upgradeable_$23590", - "typeString": "contract Upgradeable" - } - }, - "id": 6597, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "2822:12:28", - "memberName": "isUpgradable", - "nodeType": "MemberAccess", - "referencedDeclaration": 23569, - "src": "2790:44:28", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", - "typeString": "function () view external returns (bool)" - } - }, - "id": 6598, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "2790:46:28", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6615, - "nodeType": "TryStatement", - "src": "2786:262:28" - }, - { - "assignments": [ - 6617, - 6619 - ], - "declarations": [ - { - "constant": false, - "id": 6617, - "mutability": "mutable", - "name": "_wasCalled", - "nameLocation": "3166:10:28", - "nodeType": "VariableDeclaration", - "scope": 6661, - "src": "3161:15:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6616, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3161:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6619, - "mutability": "mutable", - "name": "_result", - "nameLocation": "3191:7:28", - "nodeType": "VariableDeclaration", - "scope": 6661, - "src": "3178:20:28", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6618, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "3178:5:28", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "id": 6629, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "697355706772616461626c6546726f6d286164647265737329", - "id": 6624, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3298:27:28", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7", - "typeString": "literal_string \"isUpgradableFrom(address)\"" - }, - "value": "isUpgradableFrom(address)" - }, - { - "expression": { - "id": 6625, - "name": "msg", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967281, - "src": "3348:3:28", - "typeDescriptions": { - "typeIdentifier": "t_magic_message", - "typeString": "msg" - } - }, - "id": 6626, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3352:6:28", - "memberName": "sender", - "nodeType": "MemberAccess", - "src": "3348:10:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_6b58960af5008b519145bb1cb07a67ee0927d8e642573c92f5babc4d0c2721d7", - "typeString": "literal_string \"isUpgradableFrom(address)\"" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "expression": { - "id": 6622, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "3252:3:28", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6623, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3256:19:28", - "memberName": "encodeWithSignature", - "nodeType": "MemberAccess", - "src": "3252:23:28", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (string memory) pure returns (bytes memory)" - } - }, - "id": 6627, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3252:125:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6620, - "name": "_oldImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6577, - "src": "3202:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6621, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3221:12:28", - "memberName": "delegatecall", - "nodeType": "MemberAccess", - "src": "3202:31:28", - "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": 6628, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3202:190:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3160:232:28" - }, - { - "expression": { - "arguments": [ - { - "id": 6631, - "name": "_wasCalled", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6617, - "src": "3415:10:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a206e6f7420636f6d706c69616e74", - "id": 6632, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3427:28:28", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65", - "typeString": "literal_string \"WitnetProxy: not compliant\"" - }, - "value": "WitnetProxy: not compliant" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65", - "typeString": "literal_string \"WitnetProxy: not compliant\"" - } - ], - "id": 6630, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "3407:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6633, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3407:49:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6634, - "nodeType": "ExpressionStatement", - "src": "3407:49:28" - }, - { - "expression": { - "arguments": [ - { - "arguments": [ - { - "id": 6638, - "name": "_result", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6619, - "src": "3490:7:28", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - }, - { - "components": [ - { - "id": 6640, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "3500:4:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_bool_$", - "typeString": "type(bool)" - }, - "typeName": { - "id": 6639, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3500:4:28", - "typeDescriptions": {} - } - } - ], - "id": 6641, - "isConstant": false, - "isInlineArray": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "TupleExpression", - "src": "3499:6:28", - "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": 6636, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "3479:3:28", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6637, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3483:6:28", - "memberName": "decode", - "nodeType": "MemberAccess", - "src": "3479:10:28", - "typeDescriptions": { - "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", - "typeString": "function () pure" - } - }, - "id": 6642, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3479:27:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a206e6f7420617574686f72697a6564", - "id": 6643, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3508:29:28", - "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": 6635, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "3471:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6644, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3471:67:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6645, - "nodeType": "ExpressionStatement", - "src": "3471:67:28" - }, - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - "id": 6657, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 6648, - "name": "_oldImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6577, - "src": "3591:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6647, - "name": "Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 23590, - "src": "3579:11:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Upgradeable_$23590_$", - "typeString": "type(contract Upgradeable)" - } - }, - "id": 6649, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3579:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_Upgradeable_$23590", - "typeString": "contract Upgradeable" - } - }, - "id": 6650, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3611:13:28", - "memberName": "proxiableUUID", - "nodeType": "MemberAccess", - "referencedDeclaration": 23437, - "src": "3579:45:28", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", - "typeString": "function () view external returns (bytes32)" - } - }, - "id": 6651, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3579:47:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "nodeType": "BinaryOperation", - "operator": "==", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 6653, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "3642:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6652, - "name": "Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 23590, - "src": "3630:11:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Upgradeable_$23590_$", - "typeString": "type(contract Upgradeable)" - } - }, - "id": 6654, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3630:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_Upgradeable_$23590", - "typeString": "contract Upgradeable" - } - }, - "id": 6655, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3662:13:28", - "memberName": "proxiableUUID", - "nodeType": "MemberAccess", - "referencedDeclaration": 23437, - "src": "3630:45:28", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bytes32_$", - "typeString": "function () view external returns (bytes32)" - } - }, - "id": 6656, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3630:47:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - "src": "3579:98:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a2070726f786961626c655555494473206d69736d61746368", - "id": 6658, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3696:38:28", - "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": 6646, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "3553:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6659, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3553:196:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6660, - "nodeType": "ExpressionStatement", - "src": "3553:196:28" - } - ] - } - }, - { - "assignments": [ - 6664, - null - ], - "declarations": [ - { - "constant": false, - "id": 6664, - "mutability": "mutable", - "name": "_wasInitialized", - "nameLocation": "3851:15:28", - "nodeType": "VariableDeclaration", - "scope": 6708, - "src": "3846:20:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6663, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "3846:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - }, - null - ], - "id": 6673, - "initialValue": { - "arguments": [ - { - "arguments": [ - { - "hexValue": "696e697469616c697a6528627974657329", - "id": 6669, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "3959:19:28", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_439fab91f8ccf5be59586b9cf7bb7786c67a661a95ce1cfc146c1ed62922ae26", - "typeString": "literal_string \"initialize(bytes)\"" - }, - "value": "initialize(bytes)" - }, - { - "id": 6670, - "name": "_initData", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6561, - "src": "3997:9:28", - "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": 6667, - "name": "abi", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 4294967295, - "src": "3917:3:28", - "typeDescriptions": { - "typeIdentifier": "t_magic_abi", - "typeString": "abi" - } - }, - "id": 6668, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "memberLocation": "3921:19:28", - "memberName": "encodeWithSignature", - "nodeType": "MemberAccess", - "src": "3917:23:28", - "typeDescriptions": { - "typeIdentifier": "t_function_abiencodewithsignature_pure$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$", - "typeString": "function (string memory) pure returns (bytes memory)" - } - }, - "id": 6671, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3917:104:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes memory" - } - ], - "expression": { - "id": 6665, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "3871:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6666, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "3890:12:28", - "memberName": "delegatecall", - "nodeType": "MemberAccess", - "src": "3871:31:28", - "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": 6672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "3871:161:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$", - "typeString": "tuple(bool,bytes memory)" - } - }, - "nodeType": "VariableDeclarationStatement", - "src": "3845:187:28" - }, - { - "expression": { - "arguments": [ - { - "id": 6675, - "name": "_wasInitialized", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6664, - "src": "4051:15:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - { - "hexValue": "5769746e657450726f78793a20756e61626c6520746f20696e697469616c697a65", - "id": 6676, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4068:35:28", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_55e9f07b665adf0e8c084720fbd831f583a2d75f5997894b64a77e28a0171f3c", - "typeString": "literal_string \"WitnetProxy: unable to initialize\"" - }, - "value": "WitnetProxy: unable to initialize" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - { - "typeIdentifier": "t_stringliteral_55e9f07b665adf0e8c084720fbd831f583a2d75f5997894b64a77e28a0171f3c", - "typeString": "literal_string \"WitnetProxy: unable to initialize\"" - } - ], - "id": 6674, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967278, - 4294967278 - ], - "referencedDeclaration": 4294967278, - "src": "4043:7:28", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (bool,string memory) pure" - } - }, - "id": 6677, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4043:61:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6678, - "nodeType": "ExpressionStatement", - "src": "4043:61:28" - }, - { - "expression": { - "id": 6683, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftHandSide": { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 6679, - "name": "__proxySlot", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6718, - "src": "4199:11:28", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_struct$_ProxiableSlot_$23442_storage_ptr_$", - "typeString": "function () pure returns (struct Proxiable.ProxiableSlot storage pointer)" - } - }, - "id": 6680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4199:13:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProxiableSlot_$23442_storage_ptr", - "typeString": "struct Proxiable.ProxiableSlot storage pointer" - } - }, - "id": 6681, - "isConstant": false, - "isLValue": true, - "isPure": false, - "lValueRequested": true, - "memberLocation": "4213:14:28", - "memberName": "implementation", - "nodeType": "MemberAccess", - "referencedDeclaration": 23439, - "src": "4199:28:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "Assignment", - "operator": "=", - "rightHandSide": { - "id": 6682, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "4230:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "4199:49:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "id": 6684, - "nodeType": "ExpressionStatement", - "src": "4199:49:28" - }, - { - "eventCall": { - "arguments": [ - { - "id": 6686, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "4273:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6685, - "name": "Upgraded", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6525, - "src": "4264:8:28", - "typeDescriptions": { - "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$", - "typeString": "function (address)" - } - }, - "id": 6687, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4264:28:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6688, - "nodeType": "EmitStatement", - "src": "4259:33:28" - }, - { - "clauses": [ - { - "block": { - "id": 6699, - "nodeType": "Block", - "src": "4485:47:28", - "statements": [ - { - "expression": { - "id": 6697, - "name": "_isUpgradable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6695, - "src": "4507:13:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "functionReturnParameters": 6565, - "id": 6698, - "nodeType": "Return", - "src": "4500:20:28" - } - ] - }, - "errorName": "", - "id": 6700, - "nodeType": "TryCatchClause", - "parameters": { - "id": 6696, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6695, - "mutability": "mutable", - "name": "_isUpgradable", - "nameLocation": "4470:13:28", - "nodeType": "VariableDeclaration", - "scope": 6700, - "src": "4465:18:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6694, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "4465:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "4464:20:28" - }, - "src": "4456:76:28" - }, - { - "block": { - "id": 6705, - "nodeType": "Block", - "src": "4548:64:28", - "statements": [ - { - "expression": { - "arguments": [ - { - "hexValue": "5769746e657450726f78793a206e6f7420636f6d706c69616e74", - "id": 6702, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "4571:28:28", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65", - "typeString": "literal_string \"WitnetProxy: not compliant\"" - }, - "value": "WitnetProxy: not compliant" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_fe0c5d56f2e637bc6ae9d29f1058c00159080f3dd6202013ecdbcca6e4740a65", - "typeString": "literal_string \"WitnetProxy: not compliant\"" - } - ], - "id": 6701, - "name": "revert", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 4294967277, - 4294967277 - ], - "referencedDeclaration": 4294967277, - "src": "4563:6:28", - "typeDescriptions": { - "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory) pure" - } - }, - "id": 6703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4563:37:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 6704, - "nodeType": "ExpressionStatement", - "src": "4563:37:28" - } - ] - }, - "errorName": "", - "id": 6706, - "nodeType": "TryCatchClause", - "src": "4542:70:28" - } - ], - "externalCall": { - "arguments": [], - "expression": { - "argumentTypes": [], - "expression": { - "arguments": [ - { - "id": 6690, - "name": "_newImplementation", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 6559, - "src": "4421:18:28", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 6689, - "name": "Upgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 23590, - "src": "4409:11:28", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_contract$_Upgradeable_$23590_$", - "typeString": "type(contract Upgradeable)" - } - }, - "id": 6691, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4409:31:28", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_contract$_Upgradeable_$23590", - "typeString": "contract Upgradeable" - } - }, - "id": 6692, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "memberLocation": "4441:12:28", - "memberName": "isUpgradable", - "nodeType": "MemberAccess", - "referencedDeclaration": 23569, - "src": "4409:44:28", - "typeDescriptions": { - "typeIdentifier": "t_function_external_view$__$returns$_t_bool_$", - "typeString": "function () view external returns (bool)" - } - }, - "id": 6693, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "4409:46:28", - "tryCall": true, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 6707, - "nodeType": "TryStatement", - "src": "4405:207:28" - } - ] - }, - "documentation": { - "id": 6557, - "nodeType": "StructuredDocumentation", - "src": "1879:280:28", - "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": 6709, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "upgradeTo", - "nameLocation": "2174:9:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6562, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6559, - "mutability": "mutable", - "name": "_newImplementation", - "nameLocation": "2192:18:28", - "nodeType": "VariableDeclaration", - "scope": 6709, - "src": "2184:26:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 6558, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "2184:7:28", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 6561, - "mutability": "mutable", - "name": "_initData", - "nameLocation": "2225:9:28", - "nodeType": "VariableDeclaration", - "scope": 6709, - "src": "2212:22:28", - "stateVariable": false, - "storageLocation": "memory", - "typeDescriptions": { - "typeIdentifier": "t_bytes_memory_ptr", - "typeString": "bytes" - }, - "typeName": { - "id": 6560, - "name": "bytes", - "nodeType": "ElementaryTypeName", - "src": "2212:5:28", - "typeDescriptions": { - "typeIdentifier": "t_bytes_storage_ptr", - "typeString": "bytes" - } - }, - "visibility": "internal" - } - ], - "src": "2183:52:28" - }, - "returnParameters": { - "id": 6565, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6564, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 6709, - "src": "2261:4:28", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "typeName": { - "id": 6563, - "name": "bool", - "nodeType": "ElementaryTypeName", - "src": "2261:4:28", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "visibility": "internal" - } - ], - "src": "2260:6:28" - }, - "scope": 6719, - "src": "2165:2454:28", - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "body": { - "id": 6717, - "nodeType": "Block", - "src": "4826:213:28", - "statements": [ - { - "AST": { - "nodeType": "YulBlock", - "src": "4846:186:28", - "statements": [ - { - "nodeType": "YulAssignment", - "src": "4941:80:28", - "value": { - "kind": "number", - "nodeType": "YulLiteral", - "src": "4955:66:28", - "type": "", - "value": "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc" - }, - "variableNames": [ - { - "name": "_slot.slot", - "nodeType": "YulIdentifier", - "src": "4941:10:28" - } - ] - } - ] - }, - "evmVersion": "london", - "externalReferences": [ - { - "declaration": 6714, - "isOffset": false, - "isSlot": true, - "src": "4941:10:28", - "suffix": "slot", - "valueSize": 1 - } - ], - "id": 6716, - "nodeType": "InlineAssembly", - "src": "4837:195:28" - } - ] - }, - "documentation": { - "id": 6710, - "nodeType": "StructuredDocumentation", - "src": "4627:109:28", - "text": "@dev Complying with EIP-1967, retrieves storage struct containing proxy's current implementation address." - }, - "id": 6718, - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "__proxySlot", - "nameLocation": "4751:11:28", - "nodeType": "FunctionDefinition", - "parameters": { - "id": 6711, - "nodeType": "ParameterList", - "parameters": [], - "src": "4762:2:28" - }, - "returnParameters": { - "id": 6715, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 6714, - "mutability": "mutable", - "name": "_slot", - "nameLocation": "4819:5:28", - "nodeType": "VariableDeclaration", - "scope": 6718, - "src": "4787:37:28", - "stateVariable": false, - "storageLocation": "storage", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProxiableSlot_$23442_storage_ptr", - "typeString": "struct Proxiable.ProxiableSlot" - }, - "typeName": { - "id": 6713, - "nodeType": "UserDefinedTypeName", - "pathNode": { - "id": 6712, - "name": "Proxiable.ProxiableSlot", - "nameLocations": [ - "4787:9:28", - "4797:13:28" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 23442, - "src": "4787:23:28" - }, - "referencedDeclaration": 23442, - "src": "4787:23:28", - "typeDescriptions": { - "typeIdentifier": "t_struct$_ProxiableSlot_$23442_storage_ptr", - "typeString": "struct Proxiable.ProxiableSlot" - } - }, - "visibility": "internal" - } - ], - "src": "4786:39:28" - }, - "scope": 6719, - "src": "4742:297:28", - "stateMutability": "pure", - "virtual": false, - "visibility": "private" - } - ], - "scope": 6720, - "src": "244:4800:28", - "usedErrors": [] - } - ], - "src": "35:5011:28" - }, - "compiler": { - "name": "solc", - "version": "0.8.17+commit.8df45f5f.Emscripten.clang" - }, - "networks": {}, - "schemaVersion": "3.4.13", - "updatedAt": "2023-04-25T18:38:54.596Z", - "networkType": "ethereum", - "devdoc": { - "author": "The Witnet Foundation.", - "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/abis/WitnetRandomness.json b/migrations/abis/WitnetRandomness.json new file mode 100644 index 000000000..622be3e19 --- /dev/null +++ b/migrations/abis/WitnetRandomness.json @@ -0,0 +1,649 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, + { + "internalType": "contract WitnetRequestBoard", + "name": "_wrb", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "range", + "type": "uint256" + } + ], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidLengthEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "read", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "UnexpectedMajorType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "self", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "clone", + "type": "address" + } + ], + "name": "Cloned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "prevBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "witnetQueryId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "witnetRequestHash", + "type": "bytes32" + } + ], + "name": "Randomized", + "type": "event" + }, + { + "inputs": [], + "name": "cloned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestRandomizeBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "self", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnetRandomnessRequest", + "outputs": [ + { + "internalType": "contract WitnetRequest", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clone", + "outputs": [ + { + "internalType": "contract WitnetRandomness", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "cloneDeterministic", + "outputs": [ + { + "internalType": "contract WitnetRandomness", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "initializeClone", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "_radonSLA", + "type": "tuple" + } + ], + "name": "settleWitnetRandomnessSLA", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasPrice", + "type": "uint256" + } + ], + "name": "estimateRandomizeFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomizeData", + "outputs": [ + { + "internalType": "address", + "name": "_from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_prevBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_nextBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessAfter", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessNextBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessPrevBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "isRandomized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_range", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "random", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_range", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_seed", + "type": "bytes32" + } + ], + "name": "random", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "randomize", + "outputs": [ + { + "internalType": "uint256", + "name": "_usedFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "upgradeRandomizeFee", + "outputs": [ + { + "internalType": "uint256", + "name": "_usedFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnetRandomnessSLA", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/migrations/abis/WitnetRequest.json b/migrations/abis/WitnetRequest.json new file mode 100644 index 000000000..153fa6057 --- /dev/null +++ b/migrations/abis/WitnetRequest.json @@ -0,0 +1,400 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "request", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "WitnetRequestBuilt", + "type": "event" + }, + { + "inputs": [], + "name": "aggregator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "buildRequest", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract WitnetRequestFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonAggregator", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getRadonRetrievalByIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonRetrieval", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonRetrievalsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonTally", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "parameterized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "resultDataMaxSize", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "resultDataType", + "outputs": [ + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "retrievals", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tally", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "verifyRadonRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "template", + "outputs": [ + { + "internalType": "contract WitnetRequestTemplate", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "args", + "outputs": [ + { + "internalType": "string[][]", + "name": "", + "type": "string[][]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bytecode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "radHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + } + ] \ No newline at end of file diff --git a/migrations/abis/WitnetRequestBoard.json b/migrations/abis/WitnetRequestBoard.json new file mode 100644 index 000000000..e01c5649f --- /dev/null +++ b/migrations/abis/WitnetRequestBoard.json @@ -0,0 +1,1088 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + } + ], + "name": "DeletedQuery", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + } + ], + "name": "PostedRequest", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "from", + "type": "address" + } + ], + "name": "PostedResult", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "_result", + "type": "tuple" + } + ], + "name": "asBytes32", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "_result", + "type": "tuple" + } + ], + "name": "asErrorMessage", + "outputs": [ + { + "internalType": "enum Witnet.ResultErrorCodes", + "name": "", + "type": "uint8" + }, + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "_result", + "type": "tuple" + } + ], + "name": "asUint64", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "checkResultError", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.ResultErrorCodes", + "name": "code", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "internalType": "struct Witnet.ResultError", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "checkResultStatus", + "outputs": [ + { + "internalType": "enum Witnet.ResultStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "deleteQuery", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct Witnet.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasPrice", + "type": "uint256" + } + ], + "name": "estimateReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNextQueryId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "getQueryData", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "gasprice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "internalType": "struct Witnet.Request", + "name": "request", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct Witnet.Response", + "name": "response", + "type": "tuple" + }, + { + "internalType": "address", + "name": "from", + "type": "address" + } + ], + "internalType": "struct Witnet.Query", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "getQueryStatus", + "outputs": [ + { + "internalType": "enum Witnet.QueryStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "_result", + "type": "tuple" + } + ], + "name": "isOk", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "postRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IWitnetRequest", + "name": "addr", + "type": "address" + } + ], + "name": "postRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "numWitnesses", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minConsensusPercentage", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "witnessCollateral", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minerCommitRevealFee", + "type": "uint256" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "slaParams", + "type": "tuple" + } + ], + "name": "postRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readRequest", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "gasprice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "internalType": "struct Witnet.Request", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readRequestBytecode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readRequestGasPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readRequestReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readResponse", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "reporter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "drTxHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct Witnet.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readResponseDrTxHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readResponseReporter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readResponseResult", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "readResponseTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_cborBytes", + "type": "bytes" + } + ], + "name": "resultFromCborBytes", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_queryId", + "type": "uint256" + } + ], + "name": "upgradeReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract WitnetRequestFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/migrations/abis/WitnetRequestFactory.json b/migrations/abis/WitnetRequestFactory.json new file mode 100644 index 000000000..c603b787f --- /dev/null +++ b/migrations/abis/WitnetRequestFactory.json @@ -0,0 +1,81 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "template", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "parameterized", + "type": "bool" + } + ], + "name": "WitnetRequestTemplateBuilt", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "sourcesIds", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tallyId", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resultDataMaxSize", + "type": "uint16" + } + ], + "name": "buildRequestTemplate", + "outputs": [ + { + "internalType": "address", + "name": "template", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } +] \ No newline at end of file diff --git a/migrations/abis/WitnetRequestTemplate.json b/migrations/abis/WitnetRequestTemplate.json new file mode 100644 index 000000000..45f545f1a --- /dev/null +++ b/migrations/abis/WitnetRequestTemplate.json @@ -0,0 +1,348 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "request", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "WitnetRequestBuilt", + "type": "event" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract WitnetRequestFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "aggregator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "parameterized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "resultDataMaxSize", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "resultDataType", + "outputs": [ + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "retrievals", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tally", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonAggregator", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "getRadonRetrievalByIndex", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.DataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum WitnetV2.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonRetrieval", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonRetrievalsCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getRadonTally", + "outputs": [ + { + "components": [ + { + "internalType": "enum WitnetV2.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum WitnetV2.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "buildRequest", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "verifyRadonRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file From 861848163d256b6b1a8f83cd053572deb512bf43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 11:41:24 +0100 Subject: [PATCH 018/149] chore: improve migrations logs --- migrations/scripts/1_deployer.js | 2 +- migrations/scripts/2_libs.js | 9 ++-- migrations/scripts/3_core.js | 11 ++--- migrations/scripts/4_proxies.js | 6 ++- migrations/scripts/5_apps.js | 7 +--- scripts/utils/traceTx.js | 15 ++++--- scripts/vanitygen.js | 70 -------------------------------- 7 files changed, 21 insertions(+), 99 deletions(-) delete mode 100644 scripts/vanitygen.js diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index 23ef84805..c582c2dd7 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -19,7 +19,7 @@ module.exports = async function (deployer, network, [, from,, master]) { } else { factory = await WitnetDeployer.at(addresses[ecosystem][network].WitnetDeployer) WitnetDeployer.address = factory.address - utils.traceHeader("Skipping 'WitnetDeployer'") + utils.traceHeader("Skipped 'WitnetDeployer'") console.info(" > Contract address:", factory.address) console.info() } diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 64d0a481a..609092704 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -36,18 +36,15 @@ module.exports = async function (_, network, [, 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 }) - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + utils.traceTx(tx) if ((await web3.eth.getCode(libAddr)).length > 3) { addresses[ecosystem][network][key] = libAddr } else { - console.info(`Library was not deployed on expected address: ${libAddr}`) + console.info(`Error: Library was not deployed on expected address: ${libAddr}`) process.exit(1) } } else { - utils.traceHeader(`Deployed '${key}'`) + utils.traceHeader(`Skipped '${key}'`) } artifact.address = addresses[ecosystem][network][key] console.info(" ", "> library address: ", artifact.address) diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index bf1160505..c37902b8a 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -102,24 +102,21 @@ async function deploy(specs) { const coreBytecode = link(contract.toJSON().bytecode, libs, targets) if (coreBytecode.indexOf("__") > -1) { console.info(bytecode) - console.info("Cannot deploy due to some missing libs") + 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 }) - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + utils.traceTx(tx) if ((await web3.eth.getCode(coreAddr)).length > 3) { addresses[ecosystem][network][key] = coreAddr } else { - console.info(`Contract was not deployed on expected address: ${coreAddr}`) + console.info(`Error: Contract was not deployed on expected address: ${coreAddr}`) process.exit(1) } } else { - utils.traceHeader(`Deployed '${key}'`) + utils.traceHeader(`Skipped '${key}'`) } contract.address = addresses[ecosystem][network][key] console.info(" ", "> contract address: ", contract.address) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 70951c43d..3d4db13ed 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -71,6 +71,7 @@ async function deploy(target) { console.info(" ", "> initialize params:", mutables.values) } const tx = await deployer.proxify(proxy_salt, impl.address, initdata, { from }) + utils.traceTx(tx) // save/overwrite exportable abi file utils.saveJsonAbi(key, proxy.abi) } else { @@ -92,7 +93,7 @@ async function deploy(target) { if ((await web3.eth.getCode(proxyAddr)).length > 3) { addresses[ecosystem][network][key] = proxyAddr } else { - console.info(`Contract was not deployed on expected address: ${proxyAddr}`) + console.info(`Error: Contract was not deployed on expected address: ${proxyAddr}`) process.exit(1) } } else { @@ -114,11 +115,12 @@ async function deploy(target) { console.info(" ", "> initialize params:", mutables.values) } const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) + utils.traceTx(tx) // save/overwrite exportable abi file utils.saveJsonAbi(key, proxy.abi) } } else { - utils.traceHeader(`Deployed '${key}'`) + utils.traceHeader(`Skipped '${key}'`) } } proxy.address = addresses[ecosystem][network][key] diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 65a55d627..4048ae4f4 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -89,10 +89,7 @@ async function deploy(specs) { console.info(" ", "> account: ", from) console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), 'ether'), "ETH") const tx = await deployer.deploy(dappInitCode, salt, { from }) - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + utils.traceTx(tx) if ((await web3.eth.getCode(dappAddr)).length > 3) { addresses[ecosystem][network][key] = dappAddr // save/overwrite exportable abi file @@ -103,7 +100,7 @@ async function deploy(specs) { process.exit(1) } } else { - utils.traceHeader(`Deployed '${key}'`) + utils.traceHeader(`Skipped '${key}'`) } artifact.address = addresses[ecosystem][network][key] console.info(" ", "> contract address: ", artifact.address) diff --git a/scripts/utils/traceTx.js b/scripts/utils/traceTx.js index 06bdb31ef..4c36b7223 100644 --- a/scripts/utils/traceTx.js +++ b/scripts/utils/traceTx.js @@ -1,9 +1,8 @@ -module.exports = function (receipt, totalCost) { - console.log(" ", "> block number: ", receipt.blockNumber) - console.log(" ", "> transaction hash: ", receipt.transactionHash) - console.log(" ", "> transaction gas: ", receipt.gasUsed) - if (totalCost) { - console.log(" ", "> total cost: ", totalCost, "ETH") - } - console.log() +const web3 = require("web3") + +module.exports = function (tx) { + console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) + console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) + console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") } diff --git a/scripts/vanitygen.js b/scripts/vanitygen.js deleted file mode 100644 index b86638fce..000000000 --- a/scripts/vanitygen.js +++ /dev/null @@ -1,70 +0,0 @@ -const { assert } = require("chai") -const create2 = require("eth-create2") -const fs = require("fs") -const utils = require("./utils") - -const addresses = require("../migrations/witnet.addresses") - -module.exports = async function () { - let artifact - let count = 0 - let ecosystem = "default" - let from - let hits = 10 - let offset = 0 - let network = "default" - let target = "0xfacade" - process.argv.map((argv, index, args) => { - if (argv === "--from") { - from = args[index + 1] - } else if (argv === "--offset") { - offset = parseInt(args[index + 1]) - } else if (argv === "--artifact") { - artifact = artifacts.require(args[index + 1]) - } else if (argv === "--target") { - target = args[index + 1].toLowerCase() - } else if (argv === "--hits") { - hits = parseInt(args[index + 1]) - } else if (argv === "--network") { - [ecosystem, network] = utils.getRealmNetworkFromString(args[index + 1].toLowerCase()) - } - return argv - }) - try { - from = from || addresses[ecosystem][network].Create2Factory - } catch { - console.error(` Create2Factory must have been previously deployed on network '${network}'.\n`) - console.info("Usage:\n") - console.info(" --artifact => Truffle artifact name (default: WitnetProxy)") - console.info(" --hits => Number of vanity hits to look for (default: 10)") - console.info(" --offset => Salt starting value minus 1 (default: 0)") - console.info(" --network => Network name") - console.info(" --target => Prefix hex number to look for (default: 0xc0ffee)") - process.exit(1) - } - const bytecode = artifact - ? artifact.toJSON().bytecode - : `0x3d602d80600a3d3981f3363d3d373d3d3d363d73${from.toLowerCase().slice(2)}5af43d82803e903d91602b57fd5bf3` - const targets = target.split(",") - for (let j = 0; j < targets.length; j++) { - assert(web3.utils.isHexStrict(targets[j]), "--target refers invalid hex string") - } - console.log("Bytecode: ", bytecode) - console.log("Artifact: ", artifact?.contractName || "ERC-1167: Minimal Proxy Contract") - console.log("From: ", from) - console.log("Hits: ", hits) - console.log("Offset: ", offset) - console.log("Target: ", target) - console.log("=".repeat(55)) - while (count < hits) { - const salt = "0x" + utils.padLeft(offset.toString(16), "0", 32) - const addr = create2(from, salt, bytecode) - if (targets.some((word) => addr.toLowerCase().startsWith(word))) { - const found = `${offset} => ${web3.utils.toChecksumAddress(addr)}` - console.log(found) - fs.appendFileSync(`./migrations/salts/${artifact?.contractName || "MinimalProxy"}$${from.toLowerCase()}.tmp`, found + "\n") - count++ - } - offset++ - } -} From 026bbe99247b9caceb0747a111a6efa1a823c8ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 11:43:05 +0100 Subject: [PATCH 019/149] chore: bump solc version to 0.8.22 --- .solhint.json | 1 + migrations/witnet.settings.js | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.solhint.json b/.solhint.json index 7e8130457..0ad4ce74e 100644 --- a/.solhint.json +++ b/.solhint.json @@ -16,6 +16,7 @@ "modifier-name-mixedcase": "warn", "no-empty-blocks": "off", "no-inline-assembly": "off", + "no-global-import": "off", "var-name-mixedcase": "off", "reason-string": [ "warn", diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js index 0b9bbd7ee..16bcf2e8f 100644 --- a/migrations/witnet.settings.js +++ b/migrations/witnet.settings.js @@ -41,12 +41,13 @@ module.exports = { compilers: { default: { solc: { - version: "0.8.17", + version: "0.8.22", settings: { optimizer: { enabled: true, runs: 200, }, + evmVersion: "paris", }, }, }, From 83785a0d8687c8f3673840316e425fb36701e830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 9 Nov 2023 19:04:19 +0100 Subject: [PATCH 020/149] fix: avoid addresses to be written on dryruns --- migrations/scripts/1_deployer.js | 2 +- migrations/scripts/2_libs.js | 2 +- migrations/scripts/3_core.js | 2 +- migrations/scripts/4_proxies.js | 2 +- migrations/scripts/5_apps.js | 7 +------ 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index c582c2dd7..66bc77d3c 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -4,7 +4,7 @@ const utils = require("../../scripts/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (deployer, network, [, from,, master]) { - const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" const ecosystem = utils.getRealmNetworkFromArgs()[0] network = network.split("-")[0] diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 609092704..edaf95995 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -6,7 +6,7 @@ const utils = require("../../scripts/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" const ecosystem = utils.getRealmNetworkFromArgs()[0] network = network.split("-")[0] diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index c37902b8a..c8545059b 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -13,7 +13,7 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" const ecosystem = utils.getRealmNetworkFromArgs()[0] network = network.split("-")[0] diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 3d4db13ed..3b4145096 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -9,7 +9,7 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") module.exports = async function (_, network, [, from, reporter]) { - const isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" const ecosystem = utils.getRealmNetworkFromArgs()[0] network = network.split("-")[0] diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 4048ae4f4..3692fa4b5 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -4,16 +4,11 @@ const { merge } = require("lodash") const addresses = require("../witnet.addresses") const settings = require("../witnet.settings") const utils = require("../../scripts/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 isDryRun = false // network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" const ecosystem = utils.getRealmNetworkFromArgs()[0] network = network.split("-")[0] From c7d7506e4b0983110e3f8ace3a7987c1223b19a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 14 Nov 2023 10:52:17 +0100 Subject: [PATCH 021/149] feat: add support to new radon string operators --- contracts/libs/WitnetEncodingLib.sol | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index 15618f9f3..a033f5ee5 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -13,15 +13,15 @@ library WitnetEncodingLib { using WitnetCBOR for WitnetCBOR.CBOR[]; bytes internal constant WITNET_RADON_OPCODES_RESULT_TYPES = - hex"10ffffffffffffffffffffffffffffff0401ff010203050406071311ff01ffff07ff02ffffffffffffffffffffffffff0703ffffffffffffffffffffffffffff0405070202ff04040404ffffffffffff05070402040205050505ff04ff04ffffff010203050406070101ffffffffffff02ff050404000106060707ffffffffff"; + hex"10ffffffffffffffffffffffffffffff040100010203050406071311ff01ffff07ff02ffffffffffffffffffffffffff0703ffffffffffffffffffffffffffff0405070202ff04040404ffffffffffff05070402040205050505ff04ff04ffffff010203050406070101ffffffffffff02ff050404000106060707070701ffff"; // 10ffffffffffffffffffffffffffffff - // 0401ff000203050406070100ff01ffff + // 040100001203050406070100ff01ffff // 07ff02ffffffffffffffffffffffffff // 0703ffffffffffffffffffffffffffff // 0405070202ff04040404ffffffffffff // 05070402040205050505ff04ff04ffff // ff010203050406070101ffffffffffff - // 02ff050404000106060707ffffffffff + // 02ff050404000106060707070701ffff /// =============================================================================================================== /// --- WitnetLib internal methods -------------------------------------------------------------------------------- From 3c032011bd1e6019e9248d7d9fbdcc0d7166453d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:31:23 +0100 Subject: [PATCH 022/149] feat: link WRB back from the WRF --- contracts/WitnetRequestFactory.sol | 2 ++ contracts/WitnetRequestTemplate.sol | 2 ++ .../customs/WitnetRequestBoardTrustableBoba.sol | 2 +- .../core/customs/WitnetRequestFactoryCfxCore.sol | 3 ++- .../WitnetRequestBoardTrustableBase.sol | 7 +++++-- .../WitnetRequestBoardTrustableDefault.sol | 2 +- .../core/defaults/WitnetRequestFactoryDefault.sol | 14 ++++++++++---- contracts/interfaces/V2/IWitnetFeeds.sol | 8 ++++---- migrations/scripts/3_core.js | 5 +++-- 9 files changed, 30 insertions(+), 15 deletions(-) rename contracts/core/{customs => defaults}/WitnetRequestBoardTrustableBase.sol (99%) diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 83bcf5a77..1debb0636 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -4,6 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitnetBytecodes.sol"; +import "./WitnetRequestBoard.sol"; import "./interfaces/V2/IWitnetRequestFactory.sol"; abstract contract WitnetRequestFactory @@ -12,4 +13,5 @@ abstract contract WitnetRequestFactory { function class() virtual external view returns (bytes4); function registry() virtual external view returns (WitnetBytecodes); + function witnet() virtual external view returns (WitnetRequestBoard); } \ No newline at end of file diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 54a3d9a3a..3a2036da4 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -4,6 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitnetBytecodes.sol"; +import "./WitnetRequestBoard.sol"; import "./WitnetRequestFactory.sol"; abstract contract WitnetRequestTemplate @@ -14,6 +15,7 @@ abstract contract WitnetRequestTemplate function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); function version() virtual external view returns (string memory); + function witnet() virtual external view returns (WitnetRequestBoard); function aggregator() virtual external view returns (bytes32); function parameterized() virtual external view returns (bool); diff --git a/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol b/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol index 372ef5737..d8e471010 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol @@ -6,7 +6,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; // Inherits from: -import "./WitnetRequestBoardTrustableBase.sol"; +import "../defaults/WitnetRequestBoardTrustableBase.sol"; // Uses: import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; diff --git a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol index da2b86498..fbb8574b1 100644 --- a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol @@ -7,11 +7,12 @@ import "../defaults/WitnetRequestFactoryDefault.sol"; contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { constructor( + WitnetRequestBoard _witnet, WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag ) - WitnetRequestFactoryDefault(_registry, _upgradable, _versionTag) + WitnetRequestFactoryDefault(_witnet, _registry, _upgradable, _versionTag) {} function _cloneDeterministic(bytes32 _salt) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol similarity index 99% rename from contracts/core/customs/WitnetRequestBoardTrustableBase.sol rename to contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 927301e33..3a444ca34 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -8,6 +8,7 @@ import "../../WitnetRequestBoard.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetBoardDataACLs.sol"; +import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; import "../../interfaces/IWitnetRequestBoardReporter.sol"; import "../../libs/WitnetErrorsLib.sol"; @@ -46,6 +47,7 @@ abstract contract WitnetRequestBoardTrustableBase "io.witnet.proxiable.board" ) { + assert(address(_factory) != address(0)); factory = _factory; } @@ -140,6 +142,7 @@ abstract contract WitnetRequestBoardTrustableBase require(address(factory).code.length > 0, "WitnetRequestBoardTrustableBase: inexistent factory"); require(factory.class() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory"); + require(address(factory.witnet()) == address(this), "WitnetRequestBoardTrustableBase: discordant factory"); // Set reporters __setReporters(_reporters); @@ -465,7 +468,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev - provided address is zero. /// @param _requestInterface The address of a IWitnetRequest contract, containing the actual Data Request seralized bytecode. /// @return _queryId An unique query identifier. - function postRequest(IWitnetRequest _requestInterface) + function postRequest(address _requestInterface) virtual override public payable returns (uint256 _queryId) @@ -484,7 +487,7 @@ abstract contract WitnetRequestBoardTrustableBase __storage().queries[_queryId].from = msg.sender; Witnet.Request storage _request = __request(_queryId); - _request.addr = address(_requestInterface); + _request.addr = _requestInterface; _request.gasprice = _gasPrice; _request.reward = _value; diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index 4cb418ca7..dfbd77f08 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -5,7 +5,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../customs/WitnetRequestBoardTrustableBase.sol"; +import "./WitnetRequestBoardTrustableBase.sol"; /// @title Witnet Request Board "trustable" implementation contract. /// @notice Contract to bridge requests to Witnet Decentralized Oracle Network. diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 9c975deb7..6f39014c0 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -17,9 +17,12 @@ contract WitnetRequestFactoryDefault WitnetRequestFactoryData, WitnetUpgradableBase { - /// @notice Reference to Witnet Data Requests Bytecode Registry + /// @notice Reference to Witnet Data Requests Bytecode Registry. WitnetBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; + /// @notice Reference to the Witnet Request Board that all templates built out from this factory will refer to. + WitnetRequestBoard immutable public override(WitnetRequestFactory, WitnetRequestTemplate) witnet; + modifier onlyDelegateCalls override(Clonable, Upgradeable) { require( address(this) != _BASE, @@ -46,6 +49,7 @@ contract WitnetRequestFactoryDefault } constructor( + WitnetRequestBoard _witnet, WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag @@ -56,6 +60,8 @@ contract WitnetRequestFactoryDefault "io.witnet.requests.factory" ) { + assert(address(_witnet) != address(0) && address(_registry) != address(0)); + witnet = _witnet; registry = _registry; // let logic contract be used as a factory, while avoiding further initializations: __proxiable().proxy = address(this); @@ -281,9 +287,9 @@ contract WitnetRequestFactoryDefault } __proxiable().implementation = base(); - require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent registry"); - require(registry.class() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant registry"); - + require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent requests registry"); + require(registry.class() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); + emit Upgraded(msg.sender, base(), codehash(), version()); } diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 52dc6bcf2..0e2a99667 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -2,8 +2,8 @@ pragma solidity >=0.8.0 <0.9.0; -import "./IWitnetBytecodes.sol"; -import "../IWitnetRequestBoard.sol"; +import "../../WitnetBytecodes.sol"; +import "../../WitnetRequestBoard.sol"; interface IWitnetFeeds { @@ -16,8 +16,8 @@ interface IWitnetFeeds { function dataType() external view returns (WitnetV2.RadonDataTypes); function prefix() external view returns (string memory); - function registry() external view returns (IWitnetBytecodes); - function witnet() external view returns (IWitnetRequestBoard); + function registry() external view returns (WitnetBytecodes); + function witnet() external view returns (WitnetRequestBoard); function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index c8545059b..2248dd485 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -54,7 +54,8 @@ module.exports = async function (_, network, [, from]) { key: targets.WitnetRequestFactory, libs: specs.WitnetRequestFactory.libs, immutables: specs.WitnetRequestFactory.immutables, - intrinsics: { types: [ 'address', 'bool', 'bytes32' ], values: [ + intrinsics: { types: [ 'address', 'address', 'bool', 'bytes32' ], values: [ + /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), @@ -72,7 +73,7 @@ module.exports = async function (_, network, [, from]) { libs: specs.WitnetRequestBoard.libs, immutables: specs.WitnetRequestBoard.immutables, intrinsics: { types: [ 'address', 'bool', 'bytes32' ], values: [ - /* _registry */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), + /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), ]}, From 941a574988c5ee532c7a98d2d93f17ba974af1c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:33:02 +0100 Subject: [PATCH 023/149] feat: implement class() on WR and WPF --- contracts/apps/WitnetPriceFeeds.sol | 5 +++-- contracts/apps/WitnetRandomness.sol | 15 +++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index bcf984ab2..76a6cd80b 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -29,7 +29,8 @@ contract WitnetPriceFeeds using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.RadonSLA; - IWitnetRequestBoard immutable public override witnet; + bytes4 immutable public class = type(IWitnetPriceFeeds).interfaceId; + WitnetRequestBoard immutable public override witnet; constructor(address _operator, WitnetRequestBoard _wrb) WitnetFeeds( @@ -242,7 +243,7 @@ contract WitnetPriceFeeds } } - function registry() public view virtual override returns (IWitnetBytecodes) { + function registry() public view virtual override returns (WitnetBytecodes) { return WitnetRequestBoard(address(witnet)).registry(); } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 2fabca8e3..d558f8830 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -24,6 +24,7 @@ contract WitnetRandomness { using Witnet for Witnet.Result; + bytes4 public immutable class = type(IWitnetRandomness).interfaceId; uint256 public override latestRandomizeBlock; WitnetRequest public immutable override witnetRandomnessRequest; @@ -328,10 +329,10 @@ contract WitnetRandomness { if (latestRandomizeBlock < block.number) { // Post the Witnet Randomness request: - uint _queryId; - (_queryId, _usedFunds) = _witnetPostRequest( + _usedFunds = _witnetEstimateBaseFee(tx.gasprice); + uint _queryId = witnet().postRequest{value: _usedFunds}( __witnetRandomnessRadHash, - __witnetRandomnessSlaHash + __witnetRandomnessSlaHash ); // Keep Randomize data in storage: RandomizeData storage _data = __randomize_[block.number]; @@ -366,15 +367,13 @@ contract WitnetRandomness function upgradeRandomizeFee(uint256 _block) public payable virtual override - returns (uint256 _usedFunds) + returns (uint256) { RandomizeData storage _data = __randomize_[_block]; if (_data.witnetQueryId != 0) { - _usedFunds = _witnetUpgradeReward(_data.witnetQueryId); - } - if (_usedFunds < msg.value) { - payable(msg.sender).transfer(msg.value - _usedFunds); + __witnet.upgradeReward{value: msg.value}(_data.witnetQueryId); } + return msg.value; } /// @notice Result the WitnetRequestBoard address upon which this contract relies on. From 8cfe49c0ac24b006b284927bbaac3055f2f7fbd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:37:26 +0100 Subject: [PATCH 024/149] chore: refactor+deprecates on IWitnetRequestBoard --- contracts/interfaces/IWitnetRequestBoard.sol | 61 ++++++++++++-------- contracts/libs/Witnet.sol | 1 - 2 files changed, 36 insertions(+), 26 deletions(-) diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index a4a61fcbf..d8e81b1ae 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -19,6 +19,10 @@ interface IWitnetRequestBoard { /// =============================================================================================================== /// --- Requestor interface --------------------------------------------------------------------------------------- + /// @notice Gets error code identifying some possible failure on the resolution of the given query. + /// @param _queryId The unique query identifier. + function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); + /// @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; @@ -27,7 +31,7 @@ interface IWitnetRequestBoard { /// @param _queryId The unique query identifier. function checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); - /// @notice Gets error code identifying some possible failure on the resolution of the given query. + function checkResultTraceability(uint256 _queryId) external view returns (uint256, bytes32); /// @param _queryId The unique query identifier. function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); @@ -40,22 +44,12 @@ interface IWitnetRequestBoard { /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// @notice result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @dev - provided script is zero address. - /// @dev - provided script bytecode is empty. - /// @param addr The address of the IWitnetRequest contract that can provide the actual Data Request bytecode. - /// @return _queryId Unique query identifier. - function postRequest(IWitnetRequest addr) external payable returns (uint256 _queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. + /// @dev Fails if provided reward is too low. + /// @dev The result to the query will be saved into the WitnetRequestBoard storage. /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaHash The SLA 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 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); + function postRequest(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided @@ -67,22 +61,14 @@ interface IWitnetRequestBoard { function postRequest(bytes32 radHash, WitnetV2.RadonSLA calldata slaParams) external payable returns (uint256 _queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Updates request `gasPrice` in case this method is called with a higher - /// @dev gas price value than the one used in previous calls to `postRequest` or - /// @dev `upgradeReward`. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @dev Fails also in case the request `gasPrice` is increased, and the new - /// @dev reward value gets below new recalculated threshold. /// @param _queryId The unique query identifier. - function upgradeReward(uint256 _queryId) external payable; + function upgradeQueryReward(uint256 _queryId) external payable; /// =============================================================================================================== /// --- Reader interface ------------------------------------------------------------------------------------------ - /// @notice Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) external view returns (uint256); + function estimateBaseFee(uint256 _gasPrice, uint256 _resultMaxSize) external view returns (uint256); /// @notice Returns next query id to be generated by the Witnet Request Board. function getNextQueryId() external view returns (uint256); @@ -169,9 +155,34 @@ interface IWitnetRequestBoard { /// @return The `uint` decoded from the Witnet.Result. function asUint64(Witnet.Result memory _result) external pure returns (uint64); + /// @notice Estimate the minimum reward required for posting a data request. + /// @dev Underestimates if the size of returned data is greater than 32 bytes. + /// @param _gasPrice Expected gas price to pay upon posting the data request. + function estimateReward(uint256 _gasPrice) external view returns (uint256); + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if: + /// @dev - provided reward is too low. + /// @dev - provided script is zero address. + /// @dev - provided script bytecode is empty. + /// @param _requestAddr The address of the IWitnetRequest contract that can provide the actual Data Request bytecode. + /// @return _queryId Unique query identifier. + function postRequest(address _requestAddr) external payable returns (uint256 _queryId); + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. function resultFromCborBytes(bytes memory _cborBytes) external pure returns (Witnet.Result memory); + /// @notice Increments the reward of a previously posted request by adding the transaction value to it. + /// @dev Updates request `gasPrice` in case this method is called with a higher + /// @dev gas price value than the one used in previous calls to `postRequest` or + /// @dev `upgradeReward`. + /// @dev Fails if the `_queryId` is not in 'Posted' status. + /// @dev Fails also in case the request `gasPrice` is increased, and the new + /// @dev reward value gets below new recalculated threshold. + /// @param _queryId The unique query identifier. + function upgradeReward(uint256 _queryId) external payable; } diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 07e50c786..ee4ebfc8a 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -3,7 +3,6 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../interfaces/IWitnetRequest.sol"; import "./WitnetCBOR.sol"; library Witnet { From bbe087b8868fcb92783f0e736f0adddce255408c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:43:26 +0100 Subject: [PATCH 025/149] feat: modeling data request callbacks --- contracts/interfaces/IWitnetRequestBoard.sol | 31 +++++++++++++++++--- contracts/interfaces/V2/IWitnetConsumer.sol | 9 ++++++ 2 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 contracts/interfaces/V2/IWitnetConsumer.sol diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index d8e81b1ae..5b1299fe1 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -32,8 +32,12 @@ interface IWitnetRequestBoard { function checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); function checkResultTraceability(uint256 _queryId) external view returns (uint256, bytes32); + + /// @notice Delete query without further ado. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. /// @param _queryId The unique query identifier. - function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); + function burnQuery(uint256 _queryId) external; /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to @@ -55,20 +59,30 @@ interface IWitnetRequestBoard { /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// @notice result to this request. /// @dev Fails if, provided reward is too low. + /// @dev The caller must be a contract implementing the IWitnetConsumer interface. /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaParams The SLA params 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 radHash, WitnetV2.RadonSLA calldata slaParams) external payable returns (uint256 _queryId); + function postRequestWithCallback(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param _queryId The unique query identifier. function upgradeQueryReward(uint256 _queryId) external payable; - + /// =============================================================================================================== /// --- Reader interface ------------------------------------------------------------------------------------------ + /// @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, uint256 _resultMaxSize) external view returns (uint256); + + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) external view returns (uint256); /// @notice Returns next query id to be generated by the Witnet Request Board. function getNextQueryId() external view returns (uint256); @@ -171,6 +185,15 @@ interface IWitnetRequestBoard { /// @return _queryId Unique query identifier. function postRequest(address _requestAddr) external payable returns (uint256 _queryId); + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @param slaHash The SLA hash of the data request to be solved by Witnet. + /// @return _queryId Unique query identifier. + function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol new file mode 100644 index 000000000..0ea6aaa49 --- /dev/null +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "../../libs/Witnet.sol"; + +interface IWitnetConsumer { + function reportWitnetQueryResult(uint256, WitnetCBOR.CBOR calldata) external; + function reportWitnetQueryError(uint256, Witnet.ResultErrorCodes, uint) external; +} \ No newline at end of file From 020c68291b2db9350ac768f70846be5e126458b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:47:52 +0100 Subject: [PATCH 026/149] refactor: UsingWitnet --- contracts/UsingWitnet.sol | 113 +++++++++++++++----------------------- 1 file changed, 44 insertions(+), 69 deletions(-) diff --git a/contracts/UsingWitnet.sol b/contracts/UsingWitnet.sol index dbd08f8e9..fe87158ec 100644 --- a/contracts/UsingWitnet.sol +++ b/contracts/UsingWitnet.sol @@ -10,21 +10,23 @@ import "./WitnetRequestBoard.sol"; /// @author The Witnet Foundation. abstract contract UsingWitnet { - WitnetRequestBoard private immutable __witnet; + WitnetRequestBoard internal immutable __witnet; /// @dev Include an address to specify the WitnetRequestBoard entry point address. /// @param _wrb The WitnetRequestBoard entry point address. - constructor(WitnetRequestBoard _wrb) - { - require(address(_wrb) != address(0), "UsingWitnet: no WRB?"); + constructor(WitnetRequestBoard _wrb) { + require( + _wrb.class() == type(IWitnetRequestBoard).interfaceId, + "UsingWitnet: uncompliant WitnetRequestBoard" + ); __witnet = _wrb; } /// @dev Provides a convenient way for client contracts extending this to block the execution of the main logic of the /// @dev contract until a particular request has been successfully solved and reported by Witnet, /// @dev either with an error or successfully. - modifier witnetQuerySolved(uint256 _id) { - require(_witnetCheckResultAvailability(_id), "UsingWitnet: unsolved query"); + modifier witnetQuerySolved(uint256 _witnetQueryId) { + require(_witnetCheckQueryResultAvailability(_witnetQueryId), "UsingWitnet: unsolved query"); _; } @@ -34,94 +36,67 @@ abstract contract UsingWitnet { /// @notice Check if given query was already reported back from the Witnet oracle. /// @param _id The unique identifier of a previously posted data request. - function _witnetCheckResultAvailability(uint256 _id) + function _witnetCheckQueryResultAvailability(uint256 _id) internal view returns (bool) { return __witnet.getQueryStatus(_id) == Witnet.QueryStatus.Reported; } - /// @notice Estimate the reward amount. - /// @param _gasPrice The gas price for which we want to retrieve the estimation. - /// @return The reward to be included when either posting a new request, or upgrading the reward of a previously posted one. - function _witnetEstimateReward(uint256 _gasPrice) + /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. + /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. + /// @param _resultMaxSize Maximum expected size of returned data (in bytes). + function _witnetEstimateBaseFee(uint256 _resultMaxSize) internal view returns (uint256) { - return __witnet.estimateReward(_gasPrice); + return __witnet.estimateBaseFee(tx.gasprice, _resultMaxSize); } - /// @notice Estimates the reward amount, considering current transaction gas price. - /// @return The reward to be included when either posting a new request, or upgrading the reward of a previously posted one. - function _witnetEstimateReward() + /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. + /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. + /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function _witnetEstimateBaseFeeWithCallback(uint256 _maxCallbackGas) internal view returns (uint256) { - return __witnet.estimateReward(tx.gasprice); + return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _maxCallbackGas); } - /// @notice Post some data request to be eventually solved by the Witnet decentralized oracle network. - /// @notice The EVM -> Witnet bridge will read the Witnet Data Request bytecode from the WitnetBytecodes - /// @notice registry based on given `_radHash` and `_slaHash` values. - /// @dev Enough ETH needs to be provided as to cover for the implicit fee. - /// @param _radHash Unique hash of some pre-validated Witnet Radon Request. - /// @param _slaHash Unique hash of some pre-validated Witnet Radon Service-Level Agreement. - /// @return _id The unique identifier of the just posted data request. - /// @return _reward Current reward amount escrowed by the WRB until a result gets reported. - function _witnetPostRequest(bytes32 _radHash, bytes32 _slaHash) - virtual internal - returns (uint256 _id, uint256 _reward) + function _witnetCheckQueryResultTraceability(uint256 _witnetQueryId) + internal view + returns ( + uint256 _witnetQueryResponseTimestamp, + bytes32 _witnetQueryResponseDrTxHash + ) { - _reward = _witnetEstimateReward(); - require( - _reward <= msg.value, - "UsingWitnet: reward too low" - ); - _id = __witnet.postRequest{value: _reward}(_radHash, _slaHash); + return __witnet.checkResultTraceability(_witnetQueryId); } - /// @notice Post some data request to be eventually solved by the Witnet decentralized oracle network. - /// @notice The EVM -> Witnet bridge will read the Witnet Data Request bytecode from the WitnetBytecodes - /// @notice registry based on given `_radHash` and `_slaHash` values. - /// @dev Enough ETH needs to be provided as to cover for the implicit fee. - /// @param _radHash Unique hash of some pre-validated Witnet Radon Request. - /// @param _slaParams The SLA params upon which this data request will be solved by Witnet. - /// @return _id The unique identifier of the just posted data request. - /// @return _reward Current reward amount escrowed by the WRB until a result gets reported. - function _witnetPostRequest(bytes32 _radHash, WitnetV2.RadonSLA memory _slaParams) - virtual internal - returns (uint256 _id, uint256 _reward) + function _witnetCheckQueryResultStatus(uint256 _witnetQueryId) + internal view + returns (Witnet.ResultStatus) { - return _witnetPostRequest(_radHash, __witnet.registry().verifyRadonSLA(_slaParams)); + return __witnet.checkResultStatus(_witnetQueryId); } - /// @notice Read the Witnet-provided result to a previously posted request. - /// @dev Reverts if the data request was not yet solved. - /// @param _id The unique identifier of some previously posted data request. - /// @return The result of the request as an instance of `Witnet.Result`. - function _witnetReadResult(uint256 _id) + function _witnetCheckQueryResultError(uint256 _witnetQueryId) internal view - virtual - returns (Witnet.Result memory) + returns (Witnet.ResultError memory) { - return __witnet.readResponseResult(_id); + return __witnet.checkResultError(_witnetQueryId); } - /// @notice Upgrade the reward of some previously posted data request. - /// @dev Reverts if the data request was already solved. - /// @param _id The unique identifier of some previously posted data request. - /// @return Amount in which the reward has been increased. - function _witnetUpgradeReward(uint256 _id) - virtual internal - returns (uint256) + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA, + bytes32 _witnetRadHash + ) + virtual internal returns (uint256) { - uint256 _currentReward = __witnet.readRequestReward(_id); - uint256 _newReward = _witnetEstimateReward(); - uint256 _fundsToAdd = 0; - if (_newReward > _currentReward) { - _fundsToAdd = (_newReward - _currentReward); - } - __witnet.upgradeReward{value: _fundsToAdd}(_id); - return _fundsToAdd; + return __witnet.postRequest{value: _witnetEvmReward}( + _witnetRadHash, + _witnetQuerySLA + ); } -} \ No newline at end of file +} From 692db6a75d83ec1526bb27f02cb7da7f2a8f9fd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:49:46 +0100 Subject: [PATCH 027/149] chore: move UsingWitnet to contracts/apps --- contracts/{ => apps}/UsingWitnet.sol | 2 +- contracts/apps/WitnetRandomness.sol | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename contracts/{ => apps}/UsingWitnet.sol (99%) diff --git a/contracts/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol similarity index 99% rename from contracts/UsingWitnet.sol rename to contracts/apps/UsingWitnet.sol index fe87158ec..f219138df 100644 --- a/contracts/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetRequestBoard.sol"; +import "../WitnetRequestBoard.sol"; /// @title The UsingWitnet contract /// @dev Witnet-aware contracts can inherit from this contract in order to interact with Witnet. diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index d558f8830..bb7ec2597 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../UsingWitnet.sol"; +import "./UsingWitnet.sol"; import "../WitnetRequest.sol"; import "../core/WitnetUpgradableBase.sol"; import "../interfaces/IWitnetRandomness.sol"; From 3acfe73ef98aa29f8f93cff508ae01c1f454f759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:53:08 +0100 Subject: [PATCH 028/149] feat: extend UsingWitnet use cases --- contracts/apps/UsingWitnetRequest.sol | 50 +++++++++++++++ contracts/apps/UsingWitnetRequestTemplate.sol | 61 +++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 contracts/apps/UsingWitnetRequest.sol create mode 100644 contracts/apps/UsingWitnetRequestTemplate.sol diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol new file mode 100644 index 000000000..8631804df --- /dev/null +++ b/contracts/apps/UsingWitnetRequest.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./UsingWitnet.sol"; +import "../WitnetRequest.sol"; + +abstract contract UsingWitnetRequest + is UsingWitnet +{ + WitnetRequest immutable public dataRequest; + + bytes32 immutable internal __witnetRequestRadHash; + uint256 immutable internal __witnetResultMaxSize; + + constructor (WitnetRequest _witnetRequest) + UsingWitnet(_witnetRequest.witnet()) + { + require( + _witnetRequest.class() == type(WitnetRequest).interfaceId, + "UsingWitnetRequest: uncompliant WitnetRequest" + ); + dataRequest = _witnetRequest; + __witnetResultMaxSize = _witnetRequest.resultDataMaxSize(); + __witnetRequestRadHash = _witnetRequest.radHash(); + } + + function _witnetEstimateBaseFee() + virtual internal view + returns (uint256) + { + return __witnet.estimateBaseFee( + tx.gasprice, + __witnetResultMaxSize + ); + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA + ) + virtual internal returns (uint256) + { + return __witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + __witnetRequestRadHash + ); + } + +} \ No newline at end of file diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol new file mode 100644 index 000000000..0d4ea08ed --- /dev/null +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./UsingWitnet.sol"; +import "../WitnetRequest.sol"; + +abstract contract UsingWitnetRequestTemplate + is UsingWitnet +{ + WitnetRequestTemplate immutable public dataRequestTemplate; + + uint256 immutable internal __witnetResultMaxSize; + + constructor (WitnetRequestTemplate _requestTemplate) + UsingWitnet(_requestTemplate.witnet()) + { + require( + _requestTemplate.class() == type(WitnetRequestTemplate).interfaceId, + "UsingWitnetRequestTemplate: uncompliant WitnetRequestTemplate" + ); + dataRequestTemplate = _requestTemplate; + __witnetResultMaxSize = _requestTemplate.resultDataMaxSize(); + } + + function _witnetBuildRadHash(string[][] memory _witnetRequestArgs) + internal returns (bytes32) + { + return dataRequestTemplate.verifyRadonRequest(_witnetRequestArgs); + } + + function _witnetBuildRequest(string[][] memory _witnetRequestArgs) + internal returns (WitnetRequest) + { + return WitnetRequest(dataRequestTemplate.buildRequest(_witnetRequestArgs)); + } + + function _witnetEstimateBaseFee() + internal view + returns (uint256) + { + return __witnet.estimateBaseFee( + tx.gasprice, + __witnetResultMaxSize + ); + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA, + string[][] memory _witnetRequestArgs + ) + virtual internal returns (uint256) + { + return __witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + _witnetBuildRadHash(_witnetRequestArgs) + ); + } + +} \ No newline at end of file From 129671eab623c53ea92ada0ad61c1acb216392f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 09:53:19 +0100 Subject: [PATCH 029/149] feat: abstract WitnetConsumer use cases Supporting data request callbacks --- contracts/apps/WitnetConsumer.sol | 44 +++++++++++ contracts/apps/WitnetRequestConsumer.sol | 77 +++++++++++++++++++ .../apps/WitnetRequestTemplateConsumer.sol | 77 +++++++++++++++++++ contracts/core/WitnetDeployer.sol | 1 - 4 files changed, 198 insertions(+), 1 deletion(-) create mode 100644 contracts/apps/WitnetConsumer.sol create mode 100644 contracts/apps/WitnetRequestConsumer.sol create mode 100644 contracts/apps/WitnetRequestTemplateConsumer.sol diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol new file mode 100644 index 000000000..3704ed996 --- /dev/null +++ b/contracts/apps/WitnetConsumer.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./UsingWitnet.sol"; +import "../interfaces/V2/IWitnetConsumer.sol"; + +abstract contract WitnetConsumer + is + IWitnetConsumer, + UsingWitnet +{ + modifier burnQueryAfterReport(uint256 _witnetQueryId) { + _; + __witnet.burnQuery(_witnetQueryId); + } + + modifier onlyFromWitnet { + require(msg.sender == address(__witnet), "WitnetConsumer: unauthorized"); + _; + } + + function _witnetEstimateBaseFee() + virtual internal view + returns (uint256) + { + return _witnetEstimateBaseFeeWithCallback(_witnetReportCallbackMaxGas()); + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA, + bytes32 _witnetRadHash + ) + virtual override internal + returns (uint256) + { + return __witnet.postRequestWithCallback{value: _witnetEvmReward}( + _witnetRadHash, + _witnetQuerySLA + ); + } + + function _witnetReportCallbackMaxGas() virtual internal view returns (uint256); +} diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol new file mode 100644 index 000000000..369f054c7 --- /dev/null +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./UsingWitnetRequest.sol"; +import "./WitnetConsumer.sol"; + +abstract contract WitnetRequestConsumer + is + UsingWitnetRequest, + WitnetConsumer +{ + using WitnetCBOR for WitnetCBOR.CBOR; + using WitnetCBOR for WitnetCBOR.CBOR[]; + + uint256 private immutable __witnetReportCallbackMaxGas; + + constructor(WitnetRequest _witnetRequest, uint256 _maxCallbackGas) + UsingWitnetRequest(_witnetRequest) + { + require( + _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequest._witnetEstimateBaseFee(), + "WitnetRequestConsumer: max callback gas too low" + ); + __witnetReportCallbackMaxGas = _maxCallbackGas; + } + + function _witnetEstimateBaseFee() + virtual override(UsingWitnetRequest, WitnetConsumer) + internal view + returns (uint256) + { + return WitnetConsumer._witnetEstimateBaseFee(); + } + + function _witnetReportCallbackMaxGas() virtual override internal view returns (uint256) { + return __witnetReportCallbackMaxGas; + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA, + bytes32 _witnetRadHash + ) + virtual override(UsingWitnet, WitnetConsumer) internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + _witnetRadHash + ); + } + + function reportWitnetQueryResult( + uint256 _witnetQueryId, + WitnetCBOR.CBOR calldata _value + ) + virtual override + external + onlyFromWitnet + // optional: burnQueryAfterReport(_witnetQueryId) + { + // TODO ... + } + + function reportWitnetQueryError( + uint256 _witnetQueryId, + Witnet.ResultErrorCodes, + uint256 + ) + virtual override external + onlyFromWitnet + // optional: burnQueryAfterReport(_witnetQueryId) + { + // TODO ... + } +} diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol new file mode 100644 index 000000000..e66fd0041 --- /dev/null +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "./UsingWitnetRequestTemplate.sol"; +import "./WitnetConsumer.sol"; + +abstract contract WitnetRequestTemplateConsumer + is + UsingWitnetRequestTemplate, + WitnetConsumer +{ + using WitnetCBOR for WitnetCBOR.CBOR; + using WitnetCBOR for WitnetCBOR.CBOR[]; + + uint256 private immutable __witnetReportCallbackMaxGas; + + constructor(WitnetRequestTemplate _requestTemplate, uint256 _maxCallbackGas) + UsingWitnetRequestTemplate(_requestTemplate) + { + require( + _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), + "WitnetRequestTemplateConsumer: max callback gas too low" + ); + __witnetReportCallbackMaxGas = _maxCallbackGas; + } + + function _witnetEstimateBaseFee() + virtual override(UsingWitnetRequestTemplate, WitnetConsumer) + internal view + returns (uint256) + { + return WitnetConsumer._witnetEstimateBaseFee(); + } + + function _witnetReportCallbackMaxGas() virtual override internal view returns (uint256) { + return __witnetReportCallbackMaxGas; + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA, + bytes32 _witnetRadHash + ) + virtual override(UsingWitnet, WitnetConsumer) internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + _witnetRadHash + ); + } + + function reportWitnetQueryResult( + uint256 _witnetQueryId, + WitnetCBOR.CBOR calldata _value + ) + virtual override + external + onlyFromWitnet + // optional: burnQueryAfterReport(_witnetQueryId) + { + // TODO ... + } + + function reportWitnetQueryError( + uint256 _witnetQueryId, + Witnet.ResultErrorCodes, + uint256 + ) + virtual override external + onlyFromWitnet + // optional: burnQueryAfterReport(_witnetQueryId) + { + // TODO ... + } +} diff --git a/contracts/core/WitnetDeployer.sol b/contracts/core/WitnetDeployer.sol index 99250caf4..ddcda5a87 100644 --- a/contracts/core/WitnetDeployer.sol +++ b/contracts/core/WitnetDeployer.sol @@ -23,7 +23,6 @@ contract WitnetDeployer { { _deployed = determineAddr(_initCode, _salt); if (_deployed.code.length == 0) { - // address _justDeployed; assembly { _deployed := create2(0, add(_initCode, 0x20), mload(_initCode), _salt) } From 03201dd666b29742f7f5c11bee0baf9885ce806d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 11:37:21 +0100 Subject: [PATCH 030/149] refactor: WitnetBoardData* -> WitnetRequestBoardData* --- contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- .../{WitnetBoardData.sol => WitnetRequestBoardData.sol} | 6 +++--- ...tnetBoardDataACLs.sol => WitnetRequestBoardDataACLs.sol} | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) rename contracts/data/{WitnetBoardData.sol => WitnetRequestBoardData.sol} (95%) rename contracts/data/{WitnetBoardDataACLs.sol => WitnetRequestBoardDataACLs.sol} (90%) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 3a444ca34..ee0ef3374 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -7,7 +7,7 @@ import "../WitnetUpgradableBase.sol"; import "../../WitnetRequestBoard.sol"; import "../../WitnetRequestFactory.sol"; -import "../../data/WitnetBoardDataACLs.sol"; +import "../../data/WitnetRequestBoardDataACLs.sol"; import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; import "../../interfaces/IWitnetRequestBoardReporter.sol"; @@ -23,7 +23,7 @@ abstract contract WitnetRequestBoardTrustableBase is WitnetUpgradableBase, WitnetRequestBoard, - WitnetBoardDataACLs, + WitnetRequestBoardDataACLs, IWitnetRequestBoardReporter, IWitnetRequestBoardAdminACLs, Payable diff --git a/contracts/data/WitnetBoardData.sol b/contracts/data/WitnetRequestBoardData.sol similarity index 95% rename from contracts/data/WitnetBoardData.sol rename to contracts/data/WitnetRequestBoardData.sol index c24664377..021e5ff30 100644 --- a/contracts/data/WitnetBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -6,9 +6,9 @@ import "../libs/Witnet.sol"; /// @title Witnet Request Board base data model. /// @author The Witnet Foundation. -abstract contract WitnetBoardData { +abstract contract WitnetRequestBoardData { - bytes32 internal constant _WITNET_BOARD_DATA_SLOTHASH = + bytes32 internal constant _WITNET_REQUEST_BOARD_DATA_SLOTHASH = /* keccak256("io.witnet.boards.data") */ 0xf595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183; @@ -75,7 +75,7 @@ abstract contract WitnetBoardData { returns (WitnetBoardState storage _ptr) { assembly { - _ptr.slot := _WITNET_BOARD_DATA_SLOTHASH + _ptr.slot := _WITNET_REQUEST_BOARD_DATA_SLOTHASH } } diff --git a/contracts/data/WitnetBoardDataACLs.sol b/contracts/data/WitnetRequestBoardDataACLs.sol similarity index 90% rename from contracts/data/WitnetBoardDataACLs.sol rename to contracts/data/WitnetRequestBoardDataACLs.sol index 989f79068..1652d16f9 100644 --- a/contracts/data/WitnetBoardDataACLs.sol +++ b/contracts/data/WitnetRequestBoardDataACLs.sol @@ -2,13 +2,13 @@ pragma solidity >=0.7.0 <0.9.0; -import "./WitnetBoardData.sol"; +import "./WitnetRequestBoardData.sol"; /// @title Witnet Access Control Lists storage layout, for Witnet-trusted request boards. /// @author The Witnet Foundation. -abstract contract WitnetBoardDataACLs +abstract contract WitnetRequestBoardDataACLs is - WitnetBoardData + WitnetRequestBoardData { bytes32 internal constant _WITNET_BOARD_ACLS_SLOTHASH = /* keccak256("io.witnet.boards.data.acls") */ From 07887336a317152b54b16c1daef360041d08eea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:23:11 +0100 Subject: [PATCH 031/149] refactor: WRBD.__* -> WRBD.__seek* --- .../WitnetRequestBoardTrustableBase.sol | 88 +++++++++---------- contracts/data/WitnetRequestBoardData.sol | 36 +++++--- 2 files changed, 65 insertions(+), 59 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index ee0ef3374..d54498c5a 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -389,7 +389,7 @@ abstract contract WitnetRequestBoardTrustableBase { Witnet.QueryStatus _queryStatus = _statusOf(_queryId); if (_queryStatus == Witnet.QueryStatus.Reported) { - bytes storage __cborValues = __response(_queryId).cborBytes; + bytes storage __cborValues = __seekQueryResponse(_queryId).cborBytes; // determine whether reported result is an error by peeking the first byte return (__cborValues[0] == bytes1(0xd8) ? Witnet.ResultStatus.Error @@ -420,7 +420,7 @@ abstract contract WitnetRequestBoardTrustableBase reason: "WitnetRequestBoardTrustableBase: unknown query" }); } else { - try WitnetErrorsLib.resultErrorFromCborBytes(__response(_queryId).cborBytes) + try WitnetErrorsLib.resultErrorFromCborBytes(__seekQueryResponse(_queryId).cborBytes) returns (Witnet.ResultError memory _error) { return _error; @@ -447,17 +447,12 @@ abstract contract WitnetRequestBoardTrustableBase function deleteQuery(uint256 _queryId) public virtual override + onlyRequester(_queryId) inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Response memory _response) { - Witnet.Query storage __query = __storage().queries[_queryId]; - require( - msg.sender == __query.from, - "WitnetRequestBoardTrustableBase: only requester" - ); - _response = __query.response; + _response = __seekQuery(_queryId).response; delete __storage().queries[_queryId]; - emit DeletedQuery(_queryId, msg.sender); } /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. @@ -481,15 +476,15 @@ abstract contract WitnetRequestBoardTrustableBase require(_value >= _baseReward, "WitnetRequestBoardTrustableBase: reward too low"); // Validates provided script: - require(_requestInterface.hash() != bytes32(0), "WitnetRequestBoardTrustableBase: no precompiled request"); + require(IWitnetRequest(_requestInterface).hash() != bytes32(0), "WitnetRequestBoardTrustableBase: no precompiled request"); _queryId = ++ __storage().numQueries; __storage().queries[_queryId].from = msg.sender; - Witnet.Request storage _request = __request(_queryId); - _request.addr = _requestInterface; - _request.gasprice = _gasPrice; - _request.reward = _value; + Witnet.Request storage __request = __seekQueryRequest(_queryId); + __request.addr = _requestInterface; + __request.gasprice = _gasPrice; + __request.reward = _value; // Let observers know that a new request has been posted emit PostedRequest(_queryId, msg.sender); @@ -520,11 +515,11 @@ abstract contract WitnetRequestBoardTrustableBase _queryId = ++ __storage().numQueries; __storage().queries[_queryId].from = msg.sender; - Witnet.Request storage _request = __request(_queryId); - _request.radHash = _radHash; - _request.slaHash = _slaHash; - _request.gasprice = _gasPrice; - _request.reward = _value; + Witnet.Request storage __request = __seekQueryRequest(_queryId); + __request.radHash = _radHash; + __request.slaHash = _slaHash; + __request.gasprice = _gasPrice; + __request.reward = _value; // Let observers know that a new request has been posted emit PostedRequest(_queryId, msg.sender); @@ -562,22 +557,22 @@ abstract contract WitnetRequestBoardTrustableBase virtual override inStatus(_queryId, Witnet.QueryStatus.Posted) { - Witnet.Request storage _request = __request(_queryId); + Witnet.Request storage __request = __seekQueryRequest(_queryId); - uint256 _newReward = _request.reward + _getMsgValue(); + uint256 _newReward = __request.reward + _getMsgValue(); uint256 _newGasPrice = _getGasPrice(); // If gas price is increased, then check if new rewards cover gas costs - if (_newGasPrice > _request.gasprice) { + if (_newGasPrice > __request.gasprice) { // Checks the reward is covering gas cost uint256 _minResultReward = estimateReward(_newGasPrice); require( _newReward >= _minResultReward, "WitnetRequestBoardTrustableBase: reward too low" ); - _request.gasprice = _newGasPrice; + __request.gasprice = _newGasPrice; } - _request.reward = _newReward; + __request.reward = _newReward; } @@ -627,9 +622,9 @@ abstract contract WitnetRequestBoardTrustableBase external view override inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (Witnet.Request memory _request) + returns (Witnet.Request memory) { - return __request(_queryId); + return __seekQueryRequest(_queryId); } /// Retrieves the serialized bytecode of a previously posted Witnet Data Request. @@ -646,13 +641,13 @@ abstract contract WitnetRequestBoardTrustableBase _statusOf(_queryId) != Witnet.QueryStatus.Unknown, "WitnetRequestBoardTrustableBase: not yet posted" ); - Witnet.Request storage _request = __request(_queryId); - if (_request.addr != address(0)) { - _bytecode = IWitnetRequest(_request.addr).bytecode(); - } else if (_request.radHash != bytes32(0)) { + Witnet.Request storage __request = __seekQueryRequest(_queryId); + if (__request.addr != address(0)) { + _bytecode = IWitnetRequest(__request.addr).bytecode(); + } else if (__request.radHash != bytes32(0)) { _bytecode = registry().bytecodeOf( - _request.radHash, - _request.slaHash + __request.radHash, + __request.slaHash ); } } @@ -693,7 +688,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Response memory _response) { - return __response(_queryId); + return __seekQueryResponse(_queryId); } /// Retrieves the hash of the Witnet transaction that actually solved the referred query. @@ -705,7 +700,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Reported) returns (bytes32) { - return __response(_queryId).drTxHash; + return __seekQueryResponse(_queryId).drTxHash; } /// Retrieves the address that reported the result to a previously-posted request. @@ -717,7 +712,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Reported) returns (address) { - return __response(_queryId).reporter; + return __seekQueryResponse(_queryId).reporter; } /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. @@ -729,7 +724,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Result memory) { - Witnet.Response storage _response = __response(_queryId); + Witnet.Response storage _response = __seekQueryResponse(_queryId); return _response.cborBytes.resultFromCborBytes(); } @@ -742,7 +737,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Reported) returns (uint256) { - return __response(_queryId).timestamp; + return __seekQueryResponse(_queryId).timestamp; } @@ -822,21 +817,18 @@ abstract contract WitnetRequestBoardTrustableBase internal returns (uint256 _reward) { - Witnet.Query storage _query = __query(_queryId); - Witnet.Request storage _request = _query.request; - Witnet.Response storage _response = _query.response; + Witnet.Query storage __query = __seekQuery(_queryId); + Witnet.Request storage __request = __query.request; + Witnet.Response storage __response = __query.response; // solhint-disable not-rely-on-time - _response.timestamp = _timestamp; - _response.drTxHash = _drTxHash; - _response.reporter = msg.sender; - _response.cborBytes = _cborBytes; + __response.timestamp = _timestamp; + __response.drTxHash = _drTxHash; + __response.reporter = msg.sender; + __response.cborBytes = _cborBytes; // return request latest reward - _reward = _request.reward; - - // Request data won't be needed anymore, so it can just get deleted right now: - delete _query.request; + _reward = __request.reward; } function __setReporters(address[] memory _reporters) internal { diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index 021e5ff30..677f343d3 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -28,33 +28,47 @@ abstract contract WitnetRequestBoardData { require( _statusOf(_queryId) == _status, _statusOfRevertMessage(_status) - ); - _; + ); _; } /// Asserts the given query was previously posted and that it was not yet deleted. modifier notDeleted(uint256 _queryId) { - require(_queryId > 0 && _queryId <= __storage().numQueries, "WitnetRequestBoard: not yet posted"); - require(__query(_queryId).from != address(0), "WitnetRequestBoard: deleted"); - _; + require( + _queryId > 0 && _queryId <= __storage().numQueries, + "WitnetRequestBoard: not yet posted" + ); + require( + __seekQuery(_queryId).from != address(0), + "WitnetRequestBoard: deleted" + ); _; + } + + /// Asserts the caller actually posted the referred query. + modifier onlyRequester(uint256 _queryId) { + require( + msg.sender == __seekQuery(_queryId).from, + "WitnetRequestBoardBase: not the requester" + ); _; } - /// Asserts the give query was actually posted before calling this method. + /// Asserts the given query was actually posted before calling this method. modifier wasPosted(uint256 _queryId) { - require(_queryId > 0 && _queryId <= __storage().numQueries, "WitnetRequestBoard: not yet posted"); - _; + require( + _queryId > 0 && _queryId <= __storage().numQueries, + "WitnetRequestBoard: not yet posted" + ); _; } // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- /// Gets query storage by query id. - function __query(uint256 _queryId) internal view returns (Witnet.Query storage) { + function __seekQuery(uint256 _queryId) internal view returns (Witnet.Query storage) { return __storage().queries[_queryId]; } /// Gets the Witnet.Request part of a given query. - function __request(uint256 _queryId) + function __seekQueryRequest(uint256 _queryId) internal view returns (Witnet.Request storage) { @@ -62,7 +76,7 @@ abstract contract WitnetRequestBoardData { } /// Gets the Witnet.Result part of a given query. - function __response(uint256 _queryId) + function __seekQueryResponse(uint256 _queryId) internal view returns (Witnet.Response storage) { From 420d285d0fd353ae3384d39a934d9e29a2f6f43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:25:56 +0100 Subject: [PATCH 032/149] feat: implement WRB.burnQuery --- .../defaults/WitnetRequestBoardTrustableBase.sol | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index d54498c5a..7638b3b0d 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -439,6 +439,18 @@ abstract contract WitnetRequestBoardTrustableBase } } } + /// @notice Delete query without further ado. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param _queryId The unique query identifier. + function burnQuery(uint256 _queryId) + external + virtual override + onlyRequester(_queryId) + inStatus(_queryId, Witnet.QueryStatus.Reported) + { + delete __storage().queries[_queryId]; + } /// 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 From e3f8c259495d66d9868b3e5c2cc41fb1b9416a06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:28:37 +0100 Subject: [PATCH 033/149] feat: implement WRB.checkResultTraceability --- .../WitnetRequestBoardTrustableBase.sol | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 7638b3b0d..7326bc3bc 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -439,6 +439,23 @@ abstract contract WitnetRequestBoardTrustableBase } } } + + /// @notice Returns query's result traceability data + /// @param _queryId The unique query identifier. + /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. + function checkResultTraceability(uint256 _queryId) + external view + override + returns (uint256, bytes32) + { + Witnet.Response storage __response = __seekQueryResponse(_queryId); + return ( + __response.timestamp, + __response.drTxHash + ); + } + /// @notice Delete query without further ado. /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. From fc9173eb232e6a8c41c064cff9f3231f9003aedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:29:07 +0100 Subject: [PATCH 034/149] chore: deprecate old WitnetRequestBoardTrustableBoba --- .../WitnetRequestBoardTrustableBoba.sol | 132 ------------------ 1 file changed, 132 deletions(-) delete mode 100644 contracts/core/customs/WitnetRequestBoardTrustableBoba.sol diff --git a/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol b/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol deleted file mode 100644 index d8e471010..000000000 --- a/contracts/core/customs/WitnetRequestBoardTrustableBoba.sol +++ /dev/null @@ -1,132 +0,0 @@ -// SPDX-License-Identifier: MIT - -/* solhint-disable var-name-mixedcase */ - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -// Inherits from: -import "../defaults/WitnetRequestBoardTrustableBase.sol"; - -// Uses: -import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; - -/// @title Witnet Request Board OVM-compatible (Optimism) "trustable" implementation. -/// @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 WitnetRequestBoardTrustableBoba - is - Payable, - WitnetRequestBoardTrustableBase -{ - uint256 internal lastBalance; - uint256 internal immutable _OVM_GAS_PRICE; - uint256 internal immutable _OVM_ESTIMATED_REPORT_RESULT_GAS; - - modifier ovmPayable virtual { - _; - // all calls to payable methods, - // MUST update internal 'lastBalance' value at the very end. - lastBalance = _balanceOf(address(this)); - } - - constructor( - WitnetRequestFactory _factory, - bool _upgradable, - bytes32 _versionTag, - uint256 _layer2ReportResultGasLimit, - uint256 _layer2GasPrice, - address _oETH - ) - WitnetRequestBoardTrustableBase(_factory, _upgradable, _versionTag, _oETH) - { - require(address(_oETH) != address(0), "WitnetRequestBoardTrustableBoba: null currency"); - _OVM_GAS_PRICE = _layer2GasPrice; - _OVM_ESTIMATED_REPORT_RESULT_GAS = _layer2ReportResultGasLimit; - } - - /// Gets lastBalance of given address. - function _balanceOf(address _from) - internal view - returns (uint256) - { - return currency.balanceOf(_from); - } - - - // ================================================================================================================ - // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- - - /// Gets current transaction price. - function _getGasPrice() - internal view - override - returns (uint256) - { - return _OVM_GAS_PRICE; - } - - /// Calculates `msg.value` equivalent OVM_ETH value. - /// @dev Based on `lastBalance` value. - function _getMsgValue() - internal view - override - returns (uint256) - { - uint256 _newBalance = _balanceOf(address(this)); - assert(_newBalance >= lastBalance); - return _newBalance - lastBalance; - } - - /// Transfers oETHs to given address. - /// @dev Updates `lastBalance` value. - /// @param _to OVM_ETH recipient account. - /// @param _amount Amount of oETHs to transfer. - function _safeTransferTo(address payable _to, uint256 _amount) - internal - override - { - uint256 _lastBalance = _balanceOf(address(this)); - require(_amount <= _lastBalance, "WitnetRequestBoardTrustableBoba: insufficient funds"); - lastBalance = _lastBalance - _amount; - currency.transfer(_to, _amount); - } - - - // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ - - /// @dev Estimate the minimal amount of reward we need to insert for a given gas price. - /// @return The minimal reward to be included for the given gas price. - function estimateReward(uint256) - public view - virtual override - returns (uint256) - { - return _OVM_GAS_PRICE * _OVM_ESTIMATED_REPORT_RESULT_GAS; - } - - - // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardRequestor' ------------------------------------------------- - - function postRequest(IWitnetRequest _request) - public payable - virtual override - ovmPayable - returns (uint256) - { - return WitnetRequestBoardTrustableBase.postRequest(_request); - } - - function upgradeReward(uint256 _queryId) - public payable - virtual override - ovmPayable - inStatus(_queryId, Witnet.QueryStatus.Posted) - { - WitnetRequestBoardTrustableBase.upgradeReward(_queryId); - } -} From 87f112ce5c23ece938d19c5d6922ac02e32996fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:43:21 +0100 Subject: [PATCH 035/149] chore: reordering source code --- .../WitnetRequestBoardTrustableBase.sol | 67 +++++++++++-------- contracts/interfaces/IWitnetRequestBoard.sol | 18 +++-- 2 files changed, 50 insertions(+), 35 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 7326bc3bc..c061cffb3 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -102,9 +102,17 @@ abstract contract WitnetRequestBoardTrustableBase } } + + // ================================================================================================================ + // --- Yet to be implemented virtual methods ---------------------------------------------------------------------- + + /// Estimates the amount of reward we need to insert for a given gas price. + /// @param _gasPrice The gas price for which we need to calculate the rewards. + function estimateBaseFee(uint256 _gasPrice) virtual override public view returns (uint256); + // ================================================================================================================ - // --- 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. @@ -226,7 +234,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardReporter' ------------------------------------------------------- + // --- IWitnetRequestBoard Reporter methods ----------------------------------------------------------------------- /// Reports the Witnet-provided result to a previously posted request. /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. @@ -375,7 +383,20 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardRequestor' ------------------------------------------------------ + // --- IWitnetRequestBoard Requester methods ---------------------------------------------------------------------- + + /// @notice Delete query without further ado. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param _queryId The unique query identifier. + function burnQuery(uint256 _queryId) + external + virtual override + onlyRequester(_queryId) + inStatus(_queryId, Witnet.QueryStatus.Reported) + { + delete __storage().queries[_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; @@ -456,19 +477,6 @@ abstract contract WitnetRequestBoardTrustableBase ); } - /// @notice Delete query without further ado. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function burnQuery(uint256 _queryId) - external - virtual override - onlyRequester(_queryId) - inStatus(_queryId, Witnet.QueryStatus.Reported) - { - delete __storage().queries[_queryId]; - } - /// 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 the one that actually posted the given request. @@ -501,7 +509,7 @@ abstract contract WitnetRequestBoardTrustableBase uint256 _gasPrice = _getGasPrice(); // check base reward - uint256 _baseReward = estimateReward(_gasPrice); + uint256 _baseReward = estimateBaseFee(_gasPrice, 32); require(_value >= _baseReward, "WitnetRequestBoardTrustableBase: reward too low"); // Validates provided script: @@ -535,7 +543,7 @@ abstract contract WitnetRequestBoardTrustableBase uint256 _gasPrice = _getGasPrice(); // check base reward - uint256 _baseReward = estimateReward(_gasPrice); + uint256 _baseReward = estimateBaseFee(_gasPrice, 32); require( _value >= _baseReward, "WitnetRequestBoardTrustableBase: reward too low" @@ -594,7 +602,7 @@ abstract contract WitnetRequestBoardTrustableBase // If gas price is increased, then check if new rewards cover gas costs if (_newGasPrice > __request.gasprice) { // Checks the reward is covering gas cost - uint256 _minResultReward = estimateReward(_newGasPrice); + uint256 _minResultReward = estimateReward(_newGasPrice, 32); require( _newReward >= _minResultReward, "WitnetRequestBoardTrustableBase: reward too low" @@ -606,14 +614,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardView' ----------------------------------------------------------- - - /// Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) - public view - virtual override - returns (uint256); + // --- 'IWitnetRequestBoard' Viewer methods ----------------------------------------------------------------------- /// Returns next request id to be generated by the Witnet Request Board. function getNextQueryId() @@ -771,7 +772,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoard' interface ------------------------------------------ + // --- Deprecating methods from 'IWitnetRequestBoard' ------------------------------------------------------------- /// Tell if a Witnet.Result is successful. /// @param _result An instance of Witnet.Result. @@ -822,6 +823,16 @@ abstract contract WitnetRequestBoardTrustableBase return uint64(_result.asUint()); } + /// Estimates the amount of reward we need to insert for a given gas price. + /// @param _gasPrice The gas price for which we need to calculate the rewards. + function estimateReward(uint256 _gasPrice) + external view + override + returns (uint256) + { + return estimateBaseFee(_gasPrice, 32); + } + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 5b1299fe1..643c5ec4b 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -17,8 +17,14 @@ interface IWitnetRequestBoard { /// =============================================================================================================== - /// --- Requestor interface --------------------------------------------------------------------------------------- + /// --- Requester interface --------------------------------------------------------------------------------------- + /// @notice Delete query without further ado. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param _queryId The unique query identifier. + function burnQuery(uint256 _queryId) external; + /// @notice Gets error code identifying some possible failure on the resolution of the given query. /// @param _queryId The unique query identifier. function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); @@ -31,13 +37,11 @@ interface IWitnetRequestBoard { /// @param _queryId The unique query identifier. function checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); - function checkResultTraceability(uint256 _queryId) external view returns (uint256, bytes32); - - /// @notice Delete query without further ado. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. + /// @notice Returns query's result traceability data /// @param _queryId The unique query identifier. - function burnQuery(uint256 _queryId) external; + /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. + function checkResultTraceability(uint256 _queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to From b9413ee2fcebe7919baabd7fd267f1d329c678c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 12:44:52 +0100 Subject: [PATCH 036/149] chore: deprecate IWRB.DeletedQuery --- contracts/interfaces/IWitnetRequestBoard.sol | 3 --- 1 file changed, 3 deletions(-) diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 643c5ec4b..bbb192ce3 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -12,9 +12,6 @@ interface IWitnetRequestBoard { /// Emitted when a Witnet-solved result is reported to the WRB. event PostedResult(uint256 queryId, address from); - /// Emitted when all data related to given query is deleted from the WRB. - event DeletedQuery(uint256 queryId, address from); - /// =============================================================================================================== /// --- Requester interface --------------------------------------------------------------------------------------- From c820012cbfbc56cc6cd8b714a6ed42188e5af810 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 13:42:04 +0100 Subject: [PATCH 037/149] feat: implement WRB.estimateBaseFee(uint,uint) --- .../WitnetRequestBoardTrustableOvm2.sol | 26 ++++++++++++------- .../WitnetRequestBoardTrustableReef.sol | 19 +++++++++----- .../WitnetRequestBoardTrustableBase.sol | 10 ++++--- .../WitnetRequestBoardTrustableDefault.sol | 26 +++++++++++++------ 4 files changed, 52 insertions(+), 29 deletions(-) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 34e8cc2a2..eac97c4f6 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -27,13 +27,15 @@ contract WitnetRequestBoardTrustableOvm2 WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, - uint256 _reportResultGasLimit + uint256 _reportResultGasBase, + uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableDefault( _factory, _upgradable, _versionTag, - _reportResultGasLimit + _reportResultGasBase, + _sstoreFromZeroGas ) { gasPriceOracleL1 = OVM_GasPriceOracle(0x420000000000000000000000000000000000000F); @@ -41,17 +43,21 @@ contract WitnetRequestBoardTrustableOvm2 // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ - - /// Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) - public view + // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- + + /// @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, uint256 _resultMaxSize) + public view virtual override returns (uint256) { - return _gasPrice * _ESTIMATED_REPORT_RESULT_GAS + gasPriceOracleL1.getL1Fee( - hex"c8f5cdd500000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000225820ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + return WitnetRequestBoardTrustableDefault.estimateBaseFee(_gasPrice, _resultMaxSize) + ( + _gasPrice * gasPriceOracleL1.getL1Fee( + hex"c8f5cdd500000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000225820ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ) ); } } diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index ed7ea2fde..9094c62a6 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -21,29 +21,34 @@ contract WitnetRequestBoardTrustableReef WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, - uint256 _reportResultGasLimit + uint256 _reportResultGasBase, + uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableDefault( _factory, _upgradable, _versionTag, - _reportResultGasLimit + _reportResultGasBase, + _sstoreFromZeroGas ) {} // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ + // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- - /// @dev Estimate the minimal amount of reward we need to insert for a given gas price. - /// @return The minimal reward to be included for the given gas price. - function estimateReward(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 _resultMaxSize Maximum expected size of returned data (in bytes). + function estimateBaseFee(uint256 _gasPrice, uint256 _resultMaxSize) public view virtual override returns (uint256) { - return _ESTIMATED_REPORT_RESULT_GAS; + return WitnetRequestBoardTrustableDefault.estimateBaseFee(1, _resultMaxSize); } + // ================================================================================================================ // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index c061cffb3..5ecaca577 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -106,9 +106,11 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- Yet to be implemented virtual methods ---------------------------------------------------------------------- - /// Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateBaseFee(uint256 _gasPrice) virtual override 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 _resultMaxSize Maximum expected size of returned data (in bytes). + function estimateBaseFee(uint256 _gasPrice, uint256 _resultMaxSize) virtual public view returns (uint256); // ================================================================================================================ @@ -602,7 +604,7 @@ abstract contract WitnetRequestBoardTrustableBase // If gas price is increased, then check if new rewards cover gas costs if (_newGasPrice > __request.gasprice) { // Checks the reward is covering gas cost - uint256 _minResultReward = estimateReward(_newGasPrice, 32); + uint256 _minResultReward = estimateBaseFee(_newGasPrice, 32); require( _newReward >= _minResultReward, "WitnetRequestBoardTrustableBase: reward too low" diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index dfbd77f08..ef7829193 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -16,13 +16,15 @@ contract WitnetRequestBoardTrustableDefault is WitnetRequestBoardTrustableBase { - uint256 internal immutable _ESTIMATED_REPORT_RESULT_GAS; + uint256 internal immutable __reportResultGasBase; + uint256 internal immutable __sstoreFromZeroGas; constructor( WitnetRequestFactory _factory, bool _upgradable, bytes32 _versionTag, - uint256 _reportResultGasLimit + uint256 _reportResultGasBase, + uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableBase( _factory, @@ -31,21 +33,29 @@ contract WitnetRequestBoardTrustableDefault address(0) ) { - _ESTIMATED_REPORT_RESULT_GAS = _reportResultGasLimit; + __reportResultGasBase = _reportResultGasBase; + __sstoreFromZeroGas = _sstoreFromZeroGas; } // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ + // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- - /// Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) + /// @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, uint256 _resultMaxSize) public view virtual override returns (uint256) { - return _gasPrice * _ESTIMATED_REPORT_RESULT_GAS; + return _gasPrice * ( + __reportResultGasBase + + __sstoreFromZeroGas * ( + 3 + _resultMaxSize / 32 + ) + ); } From c9286a8d72f50b4673b0263cbedf02fcd43ee388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 14:07:50 +0100 Subject: [PATCH 038/149] feat: implement WRB.estimateBaseFeeWithCallback --- .../customs/WitnetRequestBoardTrustableOvm2.sol | 15 +++++++++++++++ .../customs/WitnetRequestBoardTrustableReef.sol | 11 +++++++++++ .../WitnetRequestBoardTrustableDefault.sol | 15 +++++++++++++++ 3 files changed, 41 insertions(+) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index eac97c4f6..e00075c36 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -60,4 +60,19 @@ contract WitnetRequestBoardTrustableOvm2 ) ); } + + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + public view + virtual override + returns (uint256) + { + return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(_gasPrice, _maxCallbackGas) + ( + _gasPrice * gasPriceOracleL1.getL1Fee( + hex"c8f5cdd500000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000225820ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" + ) + ); + } } diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 9094c62a6..ed1872cdb 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -48,6 +48,17 @@ contract WitnetRequestBoardTrustableReef return WitnetRequestBoardTrustableDefault.estimateBaseFee(1, _resultMaxSize); } + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + public view + virtual override + returns (uint256) + { + return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(1, _maxCallbackGas); + } + // ================================================================================================================ // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index ef7829193..d3bf30358 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -58,6 +58,21 @@ contract WitnetRequestBoardTrustableDefault ); } + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + public view + virtual override + returns (uint256) + { + return _gasPrice * ( + __reportResultGasBase + + 3 * __sstoreFromZeroGas + + _maxCallbackGas + ); + } + // ================================================================================================================ // --- Overrides 'Payable' ---------------------------------------------------------------------------------------- From 6ad43c7ef6f75eb795a758ecaa2e5bc880f77750 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 14:10:21 +0100 Subject: [PATCH 039/149] feat: implement WRB.upgradeQueryReward --- .../WitnetRequestBoardTrustableBase.sol | 51 ++++++++++++------- contracts/interfaces/IWitnetRequestBoard.sol | 7 ++- 2 files changed, 39 insertions(+), 19 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 5ecaca577..5339cafec 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -591,27 +591,13 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Fails also in case the request `gasPrice` is increased, and the new /// @dev reward value gets below new recalculated threshold. /// @param _queryId The unique query identifier. - function upgradeReward(uint256 _queryId) + function upgradeQueryReward(uint256 _queryId) public payable virtual override inStatus(_queryId, Witnet.QueryStatus.Posted) { - Witnet.Request storage __request = __seekQueryRequest(_queryId); - - uint256 _newReward = __request.reward + _getMsgValue(); - uint256 _newGasPrice = _getGasPrice(); - - // If gas price is increased, then check if new rewards cover gas costs - if (_newGasPrice > __request.gasprice) { - // Checks the reward is covering gas cost - uint256 _minResultReward = estimateBaseFee(_newGasPrice, 32); - require( - _newReward >= _minResultReward, - "WitnetRequestBoardTrustableBase: reward too low" - ); - __request.gasprice = _newGasPrice; - } - __request.reward = _newReward; + __seekQueryRequest(_queryId).reward += _getMsgValue(); + emit UpgradedReward(_queryId); } @@ -846,6 +832,37 @@ abstract contract WitnetRequestBoardTrustableBase return Witnet.resultFromCborBytes(_cborBytes); } + /// Increments the reward of a previously posted request by adding the transaction value to it. + /// @dev Updates request `gasPrice` in case this method is called with a higher + /// @dev gas price value than the one used in previous calls to `postRequest` or + /// @dev `upgradeReward`. + /// @dev Fails if the `_queryId` is not in 'Posted' status. + /// @dev Fails also in case the request `gasPrice` is increased, and the new + /// @dev reward value gets below new recalculated threshold. + /// @param _queryId The unique query identifier. + function upgradeReward(uint256 _queryId) + public payable + virtual override + inStatus(_queryId, Witnet.QueryStatus.Posted) + { + Witnet.Request storage __request = __seekQueryRequest(_queryId); + + uint256 _newReward = __request.reward + _getMsgValue(); + uint256 _newGasPrice = _getGasPrice(); + + // If gas price is increased, then check if new rewards cover gas costs + if (_newGasPrice > __request.gasprice) { + // Checks the reward is covering gas cost + uint256 _minResultReward = estimateBaseFee(_newGasPrice, 32); + require( + _newReward >= _minResultReward, + "WitnetRequestBoardTrustableBase: reward too low" + ); + __request.gasprice = _newGasPrice; + } + __request.reward = _newReward; + } + // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index bbb192ce3..68b86ca00 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -7,10 +7,13 @@ import "../libs/WitnetV2.sol"; interface IWitnetRequestBoard { /// Emitted when a Witnet Data Request is posted to the WRB. - event PostedRequest(uint256 queryId, address from); + event PostedRequest(uint256 indexed queryId, address from); /// Emitted when a Witnet-solved result is reported to the WRB. - event PostedResult(uint256 queryId, address from); + event PostedResult(uint256 indexed queryId, address from); + + /// Emitted when the reward of some not-yet reported query is upgraded. + event UpgradedReward(uint256 indexed queryId); /// =============================================================================================================== From c4cb486a5e02b7381f38b4dee0640ac8ba08d8d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 14:18:56 +0100 Subject: [PATCH 040/149] chore: deprecating WRB.postRequest(address) --- .../WitnetRequestBoardTrustableBase.sol | 67 +++++++++---------- contracts/libs/Witnet.sol | 2 +- 2 files changed, 33 insertions(+), 36 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 5339cafec..86d7b3488 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -494,41 +494,6 @@ abstract contract WitnetRequestBoardTrustableBase delete __storage().queries[_queryId]; } - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @dev - provided address is zero. - /// @param _requestInterface The address of a IWitnetRequest contract, containing the actual Data Request seralized bytecode. - /// @return _queryId An unique query identifier. - function postRequest(address _requestInterface) - virtual override - public payable - returns (uint256 _queryId) - { - uint256 _value = _getMsgValue(); - uint256 _gasPrice = _getGasPrice(); - - // check base reward - uint256 _baseReward = estimateBaseFee(_gasPrice, 32); - require(_value >= _baseReward, "WitnetRequestBoardTrustableBase: reward too low"); - - // Validates provided script: - require(IWitnetRequest(_requestInterface).hash() != bytes32(0), "WitnetRequestBoardTrustableBase: no precompiled request"); - - _queryId = ++ __storage().numQueries; - __storage().queries[_queryId].from = msg.sender; - - Witnet.Request storage __request = __seekQueryRequest(_queryId); - __request.addr = _requestInterface; - __request.gasprice = _gasPrice; - __request.reward = _value; - - // Let observers know that a new request has been posted - emit PostedRequest(_queryId, msg.sender); - } - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// result to this request. @@ -821,6 +786,38 @@ abstract contract WitnetRequestBoardTrustableBase return estimateBaseFee(_gasPrice, 32); } + /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// result to this request. + /// @dev Fails if: + /// @dev - provided reward is too low. + /// @dev - provided address is zero. + /// @param _requestInterface The address of a IWitnetRequest contract, containing the actual Data Request seralized bytecode. + /// @return _queryId An unique query identifier. + function postRequest(address _requestInterface) + virtual override + public payable + returns (uint256 _queryId) + { + uint256 _value = _getMsgValue(); + uint256 _gasPrice = _getGasPrice(); + + // check base reward + uint256 _baseFee = estimateBaseFee(_gasPrice, 32); + require(_value >= _baseFee, "WitnetRequestBoardTrustableBase: reward too low"); + + _queryId = ++ __storage().numQueries; + __storage().queries[_queryId].from = msg.sender; + + Witnet.Request storage __request = __seekQueryRequest(_queryId); + __request._addr = _requestInterface; + __request.gasprice = _gasPrice; + __request.reward = _value; + + // Let observers know that a new request has been posted + emit PostedRequest(_queryId, msg.sender); + } + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index ee4ebfc8a..7ab1ffcfe 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -28,7 +28,7 @@ library Witnet { /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { - address addr; // Address of the IWitnetRequest contract containing Witnet data request raw bytecode. + address _addr; // Deprecating: Address of the IWitnetRequest contract containing Witnet data request raw bytecode. bytes32 slaHash; // Radon SLA hash of the Witnet data request. bytes32 radHash; // Radon radHash of the Witnet data request. uint256 gasprice; // Minimum gas price the DR resolver should pay on the solving tx. From d98e5b87bfc99ca355f30e6daf41f192ce2d238c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 17 Nov 2023 14:23:44 +0100 Subject: [PATCH 041/149] feat: deprecate Witnet.Request.gasprice --- .../WitnetRequestBoardTrustableReef.sol | 6 +- .../WitnetRequestBoardTrustableBase.sol | 56 +++++++++++-------- contracts/interfaces/IWitnetRequestBoard.sol | 14 ++--- contracts/libs/Witnet.sol | 8 +-- 4 files changed, 47 insertions(+), 37 deletions(-) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index ed1872cdb..9d7feaeab 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -38,9 +38,8 @@ contract WitnetRequestBoardTrustableReef /// @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, uint256 _resultMaxSize) + function estimateBaseFee(uint256, uint256 _resultMaxSize) public view virtual override returns (uint256) @@ -49,9 +48,8 @@ contract WitnetRequestBoardTrustableReef } /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + function estimateBaseFeeWithCallback(uint256, uint256 _maxCallbackGas) public view virtual override returns (uint256) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 86d7b3488..26de78298 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -510,9 +510,9 @@ abstract contract WitnetRequestBoardTrustableBase uint256 _gasPrice = _getGasPrice(); // check base reward - uint256 _baseReward = estimateBaseFee(_gasPrice, 32); + uint256 _baseFee = estimateBaseFee(_gasPrice, 32); require( - _value >= _baseReward, + _value >= _baseFee, "WitnetRequestBoardTrustableBase: reward too low" ); @@ -522,7 +522,6 @@ abstract contract WitnetRequestBoardTrustableBase Witnet.Request storage __request = __seekQueryRequest(_queryId); __request.radHash = _radHash; __request.slaHash = _slaHash; - __request.gasprice = _gasPrice; __request.reward = _value; // Let observers know that a new request has been posted @@ -546,6 +545,19 @@ abstract contract WitnetRequestBoardTrustableBase registry().verifyRadonSLA(_slaParams) ); } + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @dev The caller must be a contract implementing the IWitnetConsumer interface. + function postRequestWithCallback(bytes32, WitnetV2.RadonSLA calldata) + virtual override + external payable + returns (uint256) + { + revert("WitnetRequestBoardTrustableBase: not implemented"); + } /// Increments the reward of a previously posted request by adding the transaction value to it. @@ -625,8 +637,8 @@ abstract contract WitnetRequestBoardTrustableBase "WitnetRequestBoardTrustableBase: not yet posted" ); Witnet.Request storage __request = __seekQueryRequest(_queryId); - if (__request.addr != address(0)) { - _bytecode = IWitnetRequest(__request.addr).bytecode(); + if (__request._addr != address(0)) { + _bytecode = IWitnetRequest(__request._addr).bytecode(); } else if (__request.radHash != bytes32(0)) { _bytecode = registry().bytecodeOf( __request.radHash, @@ -635,20 +647,6 @@ abstract contract WitnetRequestBoardTrustableBase } } - /// Retrieves the gas price that any assigned reporter will have to pay when reporting - /// result to a previously posted Witnet data request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier - function readRequestGasPrice(uint256 _queryId) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - return __storage().queries[_queryId].request.gasprice; - } - /// Retrieves the reward currently set for a previously posted request. /// @dev Fails if the `_queryId` is not valid or, if it has already been /// @dev reported, or deleted. @@ -811,13 +809,27 @@ abstract contract WitnetRequestBoardTrustableBase Witnet.Request storage __request = __seekQueryRequest(_queryId); __request._addr = _requestInterface; - __request.gasprice = _gasPrice; + __request._gasprice = _gasPrice; __request.reward = _value; // Let observers know that a new request has been posted emit PostedRequest(_queryId, msg.sender); } + /// Retrieves the gas price that any assigned reporter will have to pay when reporting + /// result to a previously posted Witnet data request. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifier + function readRequestGasPrice(uint256 _queryId) + external view + override + inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (uint256) + { + return __storage().queries[_queryId].request._gasprice; + } + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. @@ -848,14 +860,14 @@ abstract contract WitnetRequestBoardTrustableBase uint256 _newGasPrice = _getGasPrice(); // If gas price is increased, then check if new rewards cover gas costs - if (_newGasPrice > __request.gasprice) { + if (_newGasPrice > __request._gasprice) { // Checks the reward is covering gas cost uint256 _minResultReward = estimateBaseFee(_newGasPrice, 32); require( _newReward >= _minResultReward, "WitnetRequestBoardTrustableBase: reward too low" ); - __request.gasprice = _newGasPrice; + __request._gasprice = _newGasPrice; } __request.reward = _newReward; } diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 68b86ca00..5026d0b65 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -110,13 +110,6 @@ interface IWitnetRequestBoard { /// @param _queryId The unique query identifier. function readRequestBytecode(uint256 _queryId) external view returns (bytes memory); - /// @notice Retrieves the gas price that any assigned reporter will have to pay when reporting - /// result to a previously posted Witnet data request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifie - function readRequestGasPrice(uint256 _queryId) external view returns (uint256); - /// @notice Retrieves the reward currently set for the referred query. /// @dev Fails if the `_queryId` is not valid or, if it has already been /// @dev reported, or deleted. @@ -198,6 +191,13 @@ interface IWitnetRequestBoard { /// @return _queryId Unique query identifier. function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); + /// @notice Retrieves the gas price that any assigned reporter will have to pay when reporting + /// result to a previously posted Witnet data request. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifie + function readRequestGasPrice(uint256 _queryId) external view returns (uint256); + /// Decode raw CBOR bytes into a Witnet.Result instance. /// @param _cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 7ab1ffcfe..cc7ad91d1 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -29,10 +29,10 @@ library Witnet { /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { address _addr; // Deprecating: Address of the IWitnetRequest contract containing Witnet data request raw bytecode. - bytes32 slaHash; // Radon SLA hash of the Witnet data request. - bytes32 radHash; // Radon radHash of the Witnet data request. - uint256 gasprice; // Minimum gas price the DR resolver should pay on the solving tx. - uint256 reward; // Escrowed reward to be paid to the DR resolver. + bytes32 slaHash; // Radon SLA hash of the Witnet data request. + bytes32 radHash; // Radon radHash of the Witnet data request. + uint256 _gasprice; // Deprecating: Minimum gas price the DR resolver should pay on the solving tx. + uint256 reward; // Escrowed reward to be paid to the DR resolver. } /// Data kept in EVM-storage containing Witnet-provided response metadata and result. From 3c41a2514132e2c06f7989fa2ed0f2db2ffce596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 12:47:03 +0100 Subject: [PATCH 042/149] refactor: WitnetV2.* -> Witnet.* --- contracts/WitnetRequestTemplate.sol | 8 +- contracts/apps/WitnetFeeds.sol | 4 +- contracts/apps/WitnetPriceFeeds.sol | 32 +-- contracts/apps/WitnetRandomness.sol | 32 +-- .../core/defaults/WitnetBytecodesDefault.sol | 272 +++++++++--------- .../defaults/WitnetRequestFactoryDefault.sol | 10 +- contracts/data/WitnetBytecodesData.sol | 26 +- contracts/data/WitnetRequestFactoryData.sol | 2 +- contracts/interfaces/IWitnetRandomness.sol | 2 +- .../interfaces/IWitnetRandomnessAdmin.sol | 2 +- contracts/interfaces/IWitnetRequestBoard.sol | 4 +- contracts/interfaces/V2/IWitnetBytecodes.sol | 44 +-- contracts/interfaces/V2/IWitnetFeeds.sol | 6 +- contracts/interfaces/V2/IWitnetFeedsAdmin.sol | 2 +- contracts/libs/Witnet.sol | 125 ++++++++ contracts/libs/WitnetEncodingLib.sol | 259 +++++++++-------- contracts/libs/WitnetV2.sol | 132 --------- 17 files changed, 489 insertions(+), 473 deletions(-) diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 3a2036da4..1593ef7d6 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -20,14 +20,14 @@ abstract contract WitnetRequestTemplate function aggregator() virtual external view returns (bytes32); function parameterized() virtual external view returns (bool); function resultDataMaxSize() virtual external view returns (uint16); - function resultDataType() virtual external view returns (WitnetV2.RadonDataTypes); + function resultDataType() virtual external view returns (Witnet.RadonDataTypes); function retrievals() virtual external view returns (bytes32[] memory); function tally() virtual external view returns (bytes32); - function getRadonAggregator() virtual external view returns (WitnetV2.RadonReducer memory); - function getRadonRetrievalByIndex(uint256) virtual external view returns (WitnetV2.RadonRetrieval memory); + function getRadonAggregator() virtual external view returns (Witnet.RadonReducer memory); + function getRadonRetrievalByIndex(uint256) virtual external view returns (Witnet.RadonRetrieval memory); function getRadonRetrievalsCount() virtual external view returns (uint256); - function getRadonTally() virtual external view returns (WitnetV2.RadonReducer memory); + function getRadonTally() virtual external view returns (Witnet.RadonReducer memory); function buildRequest(string[][] calldata args) virtual external returns (address); function verifyRadonRequest(string[][] calldata args) virtual external returns (bytes32); diff --git a/contracts/apps/WitnetFeeds.sol b/contracts/apps/WitnetFeeds.sol index 02b5db958..0eb7ef337 100644 --- a/contracts/apps/WitnetFeeds.sol +++ b/contracts/apps/WitnetFeeds.sol @@ -12,12 +12,12 @@ abstract contract WitnetFeeds IWitnetFeeds, IWitnetFeedsAdmin { - WitnetV2.RadonDataTypes immutable public override dataType; + Witnet.RadonDataTypes immutable public override dataType; bytes32 immutable internal __prefix; constructor( - WitnetV2.RadonDataTypes _dataType, + Witnet.RadonDataTypes _dataType, string memory _prefix ) { diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 76a6cd80b..83eee104d 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -27,14 +27,14 @@ contract WitnetPriceFeeds WitnetPriceFeedsData { using Witnet for Witnet.Result; - using WitnetV2 for WitnetV2.RadonSLA; + using Witnet for Witnet.RadonSLA; bytes4 immutable public class = type(IWitnetPriceFeeds).interfaceId; WitnetRequestBoard immutable public override witnet; constructor(address _operator, WitnetRequestBoard _wrb) WitnetFeeds( - WitnetV2.RadonDataTypes.Integer, + Witnet.RadonDataTypes.Integer, "Price-" ) { @@ -44,7 +44,7 @@ contract WitnetPriceFeeds "WitnetPriceFeeds: uncompliant request board" ); witnet = _wrb; - __settleDefaultRadonSLA(WitnetV2.RadonSLA({ + __settleDefaultRadonSLA(Witnet.RadonSLA({ numWitnesses: 5, witnessCollateral: 15 * 10 ** 9, witnessReward: 15 * 10 ** 7, @@ -138,7 +138,7 @@ contract WitnetPriceFeeds function defaultRadonSLA() override public view - returns (WitnetV2.RadonSLA memory) + returns (Witnet.RadonSLA memory) { return registry().lookupRadonSLA(__storage().defaultSlaHash); } @@ -149,7 +149,7 @@ contract WitnetPriceFeeds returns (uint) { // TODO: refactor when WRB.estimateBaseFee(bytes32,bytes32,uint256,uint256) is implemented. - return witnet.estimateReward(_evmGasPrice); + return witnet.estimateBaseFee(_evmGasPrice, 32); } function estimateUpdateBaseFee(bytes4, uint256 _evmGasPrice, uint256, bytes32) @@ -158,21 +158,21 @@ contract WitnetPriceFeeds returns (uint) { // TODO: refactor when WRB.estimateBaseFee(bytes32,bytes32,uint256,uint256) is implemented. - return witnet.estimateReward(_evmGasPrice); + return witnet.estimateBaseFee(_evmGasPrice, 32); } function latestResponse(bytes4 feedId) override public view returns (Witnet.Response memory) { - return witnet.readResponse(_latestValidQueryId(feedId)); + return witnet.getQueryResponse(_latestValidQueryId(feedId)); } function latestResult(bytes4 feedId) override external view returns (Witnet.Result memory) { - return witnet.readResponseResult(_latestValidQueryId(feedId)); + return witnet.getQueryResponseResult(_latestValidQueryId(feedId)); } function latestUpdateQueryId(bytes4 feedId) @@ -186,14 +186,14 @@ contract WitnetPriceFeeds override external view returns (Witnet.Request memory) { - return witnet.readRequest(latestUpdateQueryId(feedId)); + return witnet.getQueryRequest(latestUpdateQueryId(feedId)); } function latestUpdateResponse(bytes4 feedId) override external view returns (Witnet.Response memory) { - return witnet.readResponse(latestUpdateQueryId(feedId)); + return witnet.getQueryResponse(latestUpdateQueryId(feedId)); } function latestUpdateResultError(bytes4 feedId) @@ -234,10 +234,10 @@ contract WitnetPriceFeeds function lookupRetrievals(bytes4 feedId) override external view - returns (WitnetV2.RadonRetrieval[] memory _retrievals) + returns (Witnet.RadonRetrieval[] memory _retrievals) { bytes32[] memory _hashes = registry().lookupRadonRequestSources(lookupRadHash(feedId)); - _retrievals = new WitnetV2.RadonRetrieval[](_hashes.length); + _retrievals = new Witnet.RadonRetrieval[](_hashes.length); for (uint _ix = 0; _ix < _retrievals.length; _ix ++) { _retrievals[_ix] = registry().lookupRadonRetrieval(_hashes[_ix]); } @@ -321,7 +321,7 @@ contract WitnetPriceFeeds emit DeletedFeed(msg.sender, feedId, caption); } - function settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) + function settleDefaultRadonSLA(Witnet.RadonSLA memory sla) override public onlyOwner { @@ -630,10 +630,10 @@ contract WitnetPriceFeeds if (_latestStatus == Witnet.ResultStatus.Awaiting) { // latest update is still pending, so just increase the reward // accordingly to current tx gasprice: - int _deltaReward = int(witnet.readRequestReward(_latestId)) - int(_usedFunds); + int _deltaReward = int(witnet.getQueryReward(_latestId)) - int(_usedFunds); if (_deltaReward > 0) { _usedFunds = uint(_deltaReward); - witnet.upgradeReward{value: _usedFunds}(_latestId); + witnet.upgradeQueryReward{value: _usedFunds}(_latestId); emit UpdatingFeedReward(msg.sender, feedId, _usedFunds); } else { _usedFunds = 0; @@ -668,7 +668,7 @@ contract WitnetPriceFeeds } } - function __settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) internal { + function __settleDefaultRadonSLA(Witnet.RadonSLA memory sla) internal { __storage().defaultSlaHash = registry().verifyRadonSLA(sla); } } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index bb7ec2597..5d6d4d93c 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -50,22 +50,20 @@ contract WitnetRandomness // Build own Witnet Randomness Request: bytes32[] memory _retrievals = new bytes32[](1); _retrievals[0] = _registry.verifyRadonRetrieval( - WitnetV2.DataRequestMethods.Rng, + Witnet.RadonDataRequestMethods.Rng, "", // no url "", // no body new string[2][](0), // no headers hex"80" // no retrieval script ); - WitnetV2.RadonFilter[] memory _filters; - bytes32 _aggregator = _registry.verifyRadonReducer(WitnetV2.RadonReducer({ - opcode: WitnetV2.RadonReducerOpcodes.Mode, - filters: _filters, // no filters - script: hex"" // no aggregation script + Witnet.RadonFilter[] memory _filters; + bytes32 _aggregator = _registry.verifyRadonReducer(Witnet.RadonReducer({ + opcode: Witnet.RadonReducerOpcodes.Mode, + filters: _filters // no filters })); - bytes32 _tally = _registry.verifyRadonReducer(WitnetV2.RadonReducer({ - opcode: WitnetV2.RadonReducerOpcodes.ConcatenateAndHash, - filters: _filters, // no filters - script: hex"" // no aggregation script + bytes32 _tally = _registry.verifyRadonReducer(Witnet.RadonReducer({ + opcode: Witnet.RadonReducerOpcodes.ConcatenateAndHash, + filters: _filters // no filters })); WitnetRequestTemplate _template = WitnetRequestTemplate(_factory.buildRequestTemplate( _retrievals, @@ -149,7 +147,7 @@ contract WitnetRandomness Ownable.transferOwnership(_newOwner); } - function settleWitnetRandomnessSLA(WitnetV2.RadonSLA memory _radonSLA) + function settleWitnetRandomnessSLA(Witnet.RadonSLA memory _radonSLA) virtual override public onlyOwner @@ -169,7 +167,7 @@ contract WitnetRandomness virtual override returns (uint256) { - return witnet().estimateReward(_gasPrice); + return witnet().estimateBaseFee(_gasPrice, 32); } /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. @@ -218,7 +216,7 @@ contract WitnetRandomness require(_queryId != 0, "WitnetRandomness: not randomized"); Witnet.ResultStatus _resultStatus = witnet().checkResultStatus(_queryId); if (_resultStatus == Witnet.ResultStatus.Ready) { - return witnet().readResponseResult(_queryId).asBytes32(); + return witnet().getQueryResponseResult(_queryId).asBytes32(); } else if (_resultStatus == Witnet.ResultStatus.Error) { uint256 _nextRandomizeBlock = __randomize_[_block].nextBlock; require(_nextRandomizeBlock != 0, "WitnetRandomness: faulty randomize"); @@ -371,7 +369,7 @@ contract WitnetRandomness { RandomizeData storage _data = __randomize_[_block]; if (_data.witnetQueryId != 0) { - __witnet.upgradeReward{value: msg.value}(_data.witnetQueryId); + __witnet.upgradeQueryReward{value: msg.value}(_data.witnetQueryId); } return msg.value; } @@ -388,7 +386,7 @@ contract WitnetRandomness function witnetRandomnessSLA() virtual override external view - returns (WitnetV2.RadonSLA memory) + returns (Witnet.RadonSLA memory) { return witnet().registry().lookupRadonSLA(__witnetRandomnessSlaHash); } @@ -431,7 +429,7 @@ contract WitnetRandomness } function __initializeWitnetRandomnessSlaHash() virtual internal { - __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ + __settleWitnetRandomnessSLA(Witnet.RadonSLA({ numWitnesses: 5, minConsensusPercentage: 51, witnessReward: 10 ** 8, @@ -440,7 +438,7 @@ contract WitnetRandomness })); } - function __settleWitnetRandomnessSLA(WitnetV2.RadonSLA memory _radonSLA) + function __settleWitnetRandomnessSLA(Witnet.RadonSLA memory _radonSLA) internal returns (bytes32 _radonSlaHash) { diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 79f4f7ebb..37a578e94 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -21,12 +21,12 @@ contract WitnetBytecodesDefault using Witnet for bytes; using Witnet for string; - using WitnetEncodingLib for WitnetV2.DataRequestMethods; - using WitnetEncodingLib for WitnetV2.RadonRetrieval; - using WitnetEncodingLib for WitnetV2.RadonRetrieval[]; - using WitnetEncodingLib for WitnetV2.RadonReducer; - using WitnetEncodingLib for WitnetV2.RadonSLA; - using WitnetEncodingLib for WitnetV2.RadonDataTypes; + using WitnetEncodingLib for Witnet.RadonDataRequestMethods; + using WitnetEncodingLib for Witnet.RadonRetrieval; + using WitnetEncodingLib for Witnet.RadonRetrieval[]; + using WitnetEncodingLib for Witnet.RadonReducer; + using WitnetEncodingLib for Witnet.RadonSLA; + using WitnetEncodingLib for Witnet.RadonDataTypes; bytes4 public immutable override class = type(IWitnetBytecodes).interfaceId; @@ -153,9 +153,9 @@ contract WitnetBytecodesDefault external view returns (bytes memory) { - WitnetV2.RadonSLA storage __sla = __database().slas[_slaHash]; + Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; if (__sla.numWitnesses == 0) { - revert UnknownRadonSLA(_slaHash); + revert("WitnetBytecodesDefault: unknown Radon SLA"); } bytes memory _radBytecode = bytecodeOf(_radHash); return abi.encodePacked( @@ -204,7 +204,7 @@ contract WitnetBytecodesDefault virtual override returns (bytes32, uint32, uint256) { - WitnetV2.RadonSLA storage __sla = __database().slas[_slaHash]; + Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; { uint _numWitnesses = __sla.numWitnesses; uint _weight = __database().radsBytecode[_radHash].length; @@ -248,7 +248,7 @@ contract WitnetBytecodesDefault external view returns (bytes32[] memory _endpoints) { - WitnetV2.DataProvider storage __provider = __database().providers[_index]; + DataProvider storage __provider = __database().providers[_index]; uint _totalEndpoints = __provider.totalEndpoints; if (_offset < _totalEndpoints){ if (_offset + _length > _totalEndpoints) { @@ -264,10 +264,10 @@ contract WitnetBytecodesDefault function lookupRadonRetrieval(bytes32 _hash) external view override - returns (WitnetV2.RadonRetrieval memory _source) + returns (Witnet.RadonRetrieval memory _source) { _source = __database().retrievals[_hash]; - if (_source.method == WitnetV2.DataRequestMethods.Unknown) { + if (_source.method == Witnet.RadonDataRequestMethods.Unknown) { revert UnknownRadonRetrieval(_hash); } } @@ -277,7 +277,7 @@ contract WitnetBytecodesDefault override returns (uint8) { - if (__database().retrievals[_hash].method == WitnetV2.DataRequestMethods.Unknown) { + if (__database().retrievals[_hash].method == Witnet.RadonDataRequestMethods.Unknown) { revert UnknownRadonRetrieval(_hash); } return __database().retrievals[_hash].argsCount; @@ -286,9 +286,9 @@ contract WitnetBytecodesDefault function lookupRadonRetrievalResultDataType(bytes32 _hash) external view override - returns (WitnetV2.RadonDataTypes) + returns (Witnet.RadonDataTypes) { - if (__database().retrievals[_hash].method == WitnetV2.DataRequestMethods.Unknown) { + if (__database().retrievals[_hash].method == Witnet.RadonDataRequestMethods.Unknown) { revert UnknownRadonRetrieval(_hash); } return __database().retrievals[_hash].resultDataType; @@ -297,7 +297,7 @@ contract WitnetBytecodesDefault function lookupRadonReducer(bytes32 _hash) external view override - returns (WitnetV2.RadonReducer memory _reducer) + returns (Witnet.RadonReducer memory _reducer) { _reducer = __database().reducers[_hash]; if (uint8(_reducer.opcode) == 0) { @@ -308,7 +308,7 @@ contract WitnetBytecodesDefault function lookupRadonRequestAggregator(bytes32 _radHash) external view override - returns (WitnetV2.RadonReducer memory) + returns (Witnet.RadonReducer memory) { return __database().reducers[ __requests(_radHash).aggregator @@ -318,7 +318,7 @@ contract WitnetBytecodesDefault function lookupRadonRequestResultDataType(bytes32 _radHash) external view override - returns (WitnetV2.RadonDataTypes) + returns (Witnet.RadonDataTypes) { return __requests(_radHash).resultDataType; } @@ -350,17 +350,31 @@ contract WitnetBytecodesDefault function lookupRadonRequestTally(bytes32 _radHash) external view override - returns (WitnetV2.RadonReducer memory) + returns (Witnet.RadonReducer memory) { return __database().reducers[ __requests(_radHash).tally ]; } + function lookupRadonRAD(bytes32 _radHash) + external view + override + returns (Witnet.RadonRAD memory rad) + { + DataRequest storage __request = __requests(_radHash); + rad.retrieve = new Witnet.RadonRetrieval[](__request.retrievals.length); + for (uint _ix = 0; _ix < rad.retrieve.length; _ix ++) { + rad.retrieve[_ix] = __database().retrievals[__request.retrievals[_ix]]; + } + rad.aggregate = __database().reducers[__request.aggregator]; + rad.tally = __database().reducers[__request.tally]; + } + function lookupRadonSLA(bytes32 _slaHash) external view override - returns (WitnetV2.RadonSLA memory sla) + returns (Witnet.RadonSLA memory sla) { sla = __database().slas[_slaHash]; if (sla.numWitnesses == 0) { @@ -373,12 +387,12 @@ contract WitnetBytecodesDefault override returns (uint) { - WitnetV2.RadonSLA storage __sla = __database().slas[_slaHash]; + Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; return __sla.numWitnesses * __sla.witnessReward; } function verifyRadonRetrieval( - WitnetV2.DataRequestMethods _requestMethod, + Witnet.RadonDataRequestMethods _requestMethod, string calldata _requestURL, string calldata _requestBody, string[2][] memory _requestHeaders, @@ -387,85 +401,25 @@ contract WitnetBytecodesDefault public virtual override returns (bytes32 hash) - { - // validate data source params - hash = _requestMethod.validate(_requestURL, _requestBody, _requestHeaders, _requestRadonScript); - - // should it be a new data source: - if ( - __database().retrievals[hash].method == WitnetV2.DataRequestMethods.Unknown - ) { - // compose data source and save it in storage: - __database().retrievals[hash] = WitnetV2.RadonRetrieval({ - argsCount: - WitnetBuffer.argsCountOf( - abi.encode( - _requestURL, bytes(" "), - _requestBody, bytes(" "), - _requestHeaders, bytes(" "), - _requestRadonScript - ) - ), - - method: - _requestMethod, - - resultDataType: - WitnetEncodingLib.verifyRadonScriptResultDataType(_requestRadonScript), - - url: - _requestURL, - - body: - _requestBody, - - headers: - _requestHeaders, - - script: - _requestRadonScript - }); - emit NewRadonRetrievalHash(hash); - } - } - - function verifyRadonRetrieval( - WitnetV2.DataRequestMethods _requestMethod, - string memory _requestSchema, - string memory _requestAuthority, - string memory _requestPath, - string memory _requestQuery, - string memory _requestBody, - string[2][] memory _requestHeaders, - bytes calldata _requestRadonScript - ) - external - virtual override - returns (bytes32 hash) { // validate data source params hash = _requestMethod.validate( - _requestSchema, - _requestAuthority, - _requestPath, - _requestQuery, - _requestBody, - _requestHeaders, + _requestURL, + _requestBody, + _requestHeaders, _requestRadonScript ); // should it be a new data source: if ( - __database().retrievals[hash].method == WitnetV2.DataRequestMethods.Unknown + __database().retrievals[hash].method == Witnet.RadonDataRequestMethods.Unknown ) { // compose data source and save it in storage: - __database().retrievals[hash] = WitnetV2.RadonRetrieval({ + __database().retrievals[hash] = Witnet.RadonRetrieval({ argsCount: WitnetBuffer.argsCountOf( abi.encode( - _requestAuthority, bytes(" "), - _requestPath, bytes(" "), - _requestQuery, bytes(" "), + _requestURL, bytes(" "), _requestBody, bytes(" "), _requestHeaders, bytes(" "), _requestRadonScript @@ -479,16 +433,7 @@ contract WitnetBytecodesDefault WitnetEncodingLib.verifyRadonScriptResultDataType(_requestRadonScript), url: - string(abi.encodePacked( - _requestSchema, - _requestAuthority, - bytes(_requestPath).length > 0 - ? abi.encodePacked(bytes("/"), _requestPath) - : bytes(""), - bytes(_requestQuery).length > 0 - ? abi.encodePacked("?", _requestQuery) - : bytes("") - )), + _requestURL, body: _requestBody, @@ -499,16 +444,90 @@ contract WitnetBytecodesDefault script: _requestRadonScript }); - __pushDataProviderSource(_requestAuthority, hash); emit NewRadonRetrievalHash(hash); } } - function verifyRadonReducer(WitnetV2.RadonReducer memory _reducer) + // function verifyRadonRetrieval( + // Witnet.RadonDataRequestMethods _requestMethod, + // string memory _requestSchema, + // string memory _requestAuthority, + // string memory _requestPath, + // string memory _requestQuery, + // string memory _requestBody, + // string[2][] memory _requestHeaders, + // bytes calldata _requestRadonScript + // ) + // external + // virtual override + // returns (bytes32 hash) + // { + // // validate data source params + // hash = _requestMethod.validate( + // _requestSchema, + // _requestAuthority, + // _requestPath, + // _requestQuery, + // _requestBody, + // _requestHeaders, + // _requestRadonScript + // ); + + // // should it be a new data source: + // if ( + // __database().retrievals[hash].method == Witnet.RadonDataRequestMethods.Unknown + // ) { + // // compose data source and save it in storage: + // __database().retrievals[hash] = Witnet.RadonRetrieval({ + // argsCount: + // WitnetBuffer.argsCountOf( + // abi.encode( + // _requestAuthority, bytes(" "), + // _requestPath, bytes(" "), + // _requestQuery, bytes(" "), + // _requestBody, bytes(" "), + // _requestHeaders, bytes(" "), + // _requestRadonScript + // ) + // ), + + // method: + // _requestMethod, + + // resultDataType: + // WitnetEncodingLib.verifyRadonScriptResultDataType(_requestRadonScript), + + // url: + // string(abi.encodePacked( + // _requestSchema, + // _requestAuthority, + // bytes(_requestPath).length > 0 + // ? abi.encodePacked(bytes("/"), _requestPath) + // : bytes(""), + // bytes(_requestQuery).length > 0 + // ? abi.encodePacked("?", _requestQuery) + // : bytes("") + // )), + + // body: + // _requestBody, + + // headers: + // _requestHeaders, + + // script: + // _requestRadonScript + // }); + // __pushDataProviderSource(_requestAuthority, hash); + // emit NewRadonRetrievalHash(hash); + // } + // } + + function verifyRadonReducer(Witnet.RadonReducer memory _reducer) external returns (bytes32 hash) { hash = keccak256(abi.encode(_reducer)); - WitnetV2.RadonReducer storage __reducer = __database().reducers[hash]; + Witnet.RadonReducer storage __reducer = __database().reducers[hash]; if ( uint8(__reducer.opcode) == 0 && __reducer.filters.length == 0 @@ -545,46 +564,32 @@ contract WitnetBytecodesDefault // Check that at least one source is provided; if (_retrievalsIds.length == 0) { - revert WitnetV2.RadonRequestNoSources(); + revert("WitnetBytecodesDefault: no retrievals"); } // Check that number of args arrays matches the number of sources: if ( _retrievalsIds.length != _args.length) { - revert WitnetV2.RadonRequestSourcesArgsMismatch( - _retrievalsIds.length, - _args.length - ); + revert("WitnetBytecodesDefault: args mismatch"); } // Check sources and tally reducers: - WitnetV2.RadonReducer memory _aggregator = __database().reducers[_aggregatorId]; - WitnetV2.RadonReducer memory _tally = __database().reducers[_tallyId]; - if (_tally.script.length > 0) { - revert WitnetV2.UnsupportedRadonTallyScript(_tallyId); - } + Witnet.RadonReducer memory _aggregator = __database().reducers[_aggregatorId]; + Witnet.RadonReducer memory _tally = __database().reducers[_tallyId]; // Check result type consistency among all sources: - WitnetV2.RadonDataTypes _resultDataType; - WitnetV2.RadonRetrieval[] memory _retrievals = new WitnetV2.RadonRetrieval[](_retrievalsIds.length); + Witnet.RadonDataTypes _resultDataType; + Witnet.RadonRetrieval[] memory _retrievals = new Witnet.RadonRetrieval[](_retrievalsIds.length); for (uint _ix = 0; _ix < _retrievals.length; _ix ++) { _retrievals[_ix] = __database().retrievals[_retrievalsIds[_ix]]; // Check all sources return same Radon data type: if (_ix == 0) { _resultDataType = _retrievals[0].resultDataType; } else if (_retrievals[_ix].resultDataType != _resultDataType) { - revert WitnetV2.RadonRequestResultsMismatch( - _ix, - uint8(_retrievals[_ix].resultDataType), - uint8(_resultDataType) - ); + revert("WitnetBytecodesDefault: mismatching retrievals"); } // check enough args are provided for each source if (_args[_ix].length < uint(_retrievals[_ix].argsCount)) { - revert WitnetV2.RadonRequestMissingArgs( - _ix, - _retrievals[_ix].argsCount, - _args[_ix].length - ); + revert("WitnetBytecodesDefault: missing args"); } } @@ -599,14 +604,14 @@ contract WitnetBytecodesDefault _resultMaxSize ); if (_bytecode.length > 65535) { - revert WitnetV2.RadonRequestTooHeavy(_bytecode, _bytecode.length); + revert("WitnetBytecodesDefault: too heavy request"); } // Calculate radhash and add request metadata and rad bytecode to storage: _radHash = _witnetHash(_bytecode); __database().rads[hash] = _radHash; __database().radsBytecode[_radHash] = _bytecode; - __database().requests[_radHash] = RadonRequest({ + __database().requests[_radHash] = DataRequest({ aggregator: _aggregatorId, args: _args, radHash: _radHash, @@ -619,22 +624,23 @@ contract WitnetBytecodesDefault } } - function verifyRadonSLA(WitnetV2.RadonSLA calldata _sla) + function verifyRadonSLA(Witnet.RadonSLA calldata _sla) external virtual override returns (bytes32 _slaHash) - { - // Validate SLA params: - _sla.validate(); - + { // Build RadonSLA bytecode: bytes memory _bytecode = _sla.encode(); - // Calculate hash and add to storage if new: + // Add it to storage if not verified yet: _slaHash = _witnetHash(_bytecode); if (__database().slas[_slaHash].numWitnesses == 0) { + // validate SLA params: + _sla.validate(); + // save parameters and encoded bytecode in storage: __database().slas[_slaHash] = _sla; __database().slasBytecode[_slaHash] = _bytecode; + // emit event emit NewSlaHash(_slaHash); } } @@ -677,8 +683,8 @@ contract WitnetBytecodesDefault } function __pushRadonReducerFilters( - WitnetV2.RadonReducer storage __reducer, - WitnetV2.RadonFilter[] memory _filters + Witnet.RadonReducer storage __reducer, + Witnet.RadonFilter[] memory _filters ) internal virtual diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 6f39014c0..2367b46a3 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -80,7 +80,7 @@ contract WitnetRequestFactoryDefault returns (WitnetRequestTemplate) { // check that at least one retrieval is provided - WitnetV2.RadonDataTypes _resultDataType; + Witnet.RadonDataTypes _resultDataType; require( _retrievalsIds.length > 0, "WitnetRequestTemplate: no retrievals?" @@ -443,7 +443,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (WitnetV2.RadonDataTypes) + returns (Witnet.RadonDataTypes) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { @@ -486,7 +486,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (WitnetV2.RadonReducer memory) + returns (Witnet.RadonReducer memory) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { @@ -502,7 +502,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (WitnetV2.RadonRetrieval memory) + returns (Witnet.RadonRetrieval memory) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { @@ -536,7 +536,7 @@ contract WitnetRequestFactoryDefault override external view onlyDelegateCalls - returns (WitnetV2.RadonReducer memory) + returns (Witnet.RadonReducer memory) { WitnetRequestTemplate _template = __witnetRequest().template; if (address(_template) != address(0)) { diff --git a/contracts/data/WitnetBytecodesData.sol b/contracts/data/WitnetBytecodesData.sol index adb92052f..8d7da1371 100644 --- a/contracts/data/WitnetBytecodesData.sol +++ b/contracts/data/WitnetBytecodesData.sol @@ -22,25 +22,31 @@ abstract contract WitnetBytecodesData { // ... } - struct RadonRequest { + struct DataProvider { + string authority; + uint256 totalEndpoints; + mapping (uint256 => bytes32) endpoints; + } + + struct DataRequest { string[][] args; bytes32 aggregator; bytes32 radHash; - WitnetV2.RadonDataTypes resultDataType; + Witnet.RadonDataTypes resultDataType; uint16 resultMaxSize; bytes32[] retrievals; bytes32 tally; } struct Database { - mapping (uint256 => WitnetV2.DataProvider) providers; + mapping (uint256 => DataProvider) providers; mapping (bytes32 => uint256) providersIndex; - mapping (bytes32 => WitnetV2.RadonReducer) reducers; - mapping (bytes32 => WitnetV2.RadonRetrieval) retrievals; - mapping (bytes32 => WitnetV2.RadonSLA) slas; + mapping (bytes32 => Witnet.RadonReducer) reducers; + mapping (bytes32 => Witnet.RadonRetrieval) retrievals; + mapping (bytes32 => Witnet.RadonSLA) slas; - mapping (bytes32 => RadonRequest) requests; + mapping (bytes32 => DataRequest) requests; mapping (bytes32 => bytes32) rads; mapping (bytes32 => bytes) radsBytecode; @@ -74,10 +80,10 @@ abstract contract WitnetBytecodesData { return __bytecodes().db; } - function __requests(bytes32 _drRetrievalHash) + function __requests(bytes32 _radHash) internal view - returns (RadonRequest storage _ptr) + returns (DataRequest storage _ptr) { - return __database().requests[_drRetrievalHash]; + return __database().requests[_radHash]; } } \ No newline at end of file diff --git a/contracts/data/WitnetRequestFactoryData.sol b/contracts/data/WitnetRequestFactoryData.sol index c2111fd30..6679dfd64 100644 --- a/contracts/data/WitnetRequestFactoryData.sol +++ b/contracts/data/WitnetRequestFactoryData.sol @@ -45,7 +45,7 @@ contract WitnetRequestFactoryData { /// @notice Array of retrievals hashes passed upon construction. bytes32[] retrievals; /// @notice Result data type. - WitnetV2.RadonDataTypes resultDataType; + Witnet.RadonDataTypes resultDataType; /// @notice Result max size or rank (if variable type). uint16 resultDataMaxSize; } diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol index c6e561bce..c4d209b63 100644 --- a/contracts/interfaces/IWitnetRandomness.sol +++ b/contracts/interfaces/IWitnetRandomness.sol @@ -101,6 +101,6 @@ interface IWitnetRandomness { function witnetRandomnessRequest() external view returns (WitnetRequest); /// @notice Returns SLA parameters that are being used every time there's a new randomness request. - function witnetRandomnessSLA() external view returns (WitnetV2.RadonSLA memory); + function witnetRandomnessSLA() external view returns (Witnet.RadonSLA memory); } \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRandomnessAdmin.sol b/contracts/interfaces/IWitnetRandomnessAdmin.sol index 741eb6648..2dd7dd1b9 100644 --- a/contracts/interfaces/IWitnetRandomnessAdmin.sol +++ b/contracts/interfaces/IWitnetRandomnessAdmin.sol @@ -9,5 +9,5 @@ interface IWitnetRandomnessAdmin { function acceptOwnership() external; function pendingOwner() external returns (address); function transferOwnership(address) external; - function settleWitnetRandomnessSLA(WitnetV2.RadonSLA calldata) external returns (bytes32); + function settleWitnetRandomnessSLA(Witnet.RadonSLA calldata) external returns (bytes32); } \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 5026d0b65..3492e08b1 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -57,7 +57,7 @@ interface IWitnetRequestBoard { /// @param radHash 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 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); + function postRequest(bytes32 radHash, Witnet.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided @@ -67,7 +67,7 @@ interface IWitnetRequestBoard { /// @param radHash 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 postRequestWithCallback(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); + function postRequestWithCallback(bytes32 radHash, Witnet.RadonSLA calldata querySLA, uint256 maxCallbackGas) external payable returns (uint256 _queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param _queryId The unique query identifier. diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 938a61d80..6b3f76070 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -1,8 +1,7 @@ // SPDX-License-Identifier: MIT - pragma solidity >=0.8.0 <0.9.0; -import "../../libs/WitnetV2.sol"; +import "../../libs/Witnet.sol"; interface IWitnetBytecodes { @@ -38,42 +37,43 @@ interface IWitnetBytecodes { function lookupDataProviderIndex(string calldata authority) external view returns (uint); function lookupDataProviderSources(uint256 index, uint256 offset, uint256 length) external view returns (bytes32[] memory); - function lookupRadonReducer(bytes32 hash) external view returns (WitnetV2.RadonReducer memory); + function lookupRadonReducer(bytes32 hash) external view returns (Witnet.RadonReducer memory); - function lookupRadonRetrieval(bytes32 hash) external view returns (WitnetV2.RadonRetrieval memory); + function lookupRadonRetrieval(bytes32 hash) external view returns (Witnet.RadonRetrieval memory); function lookupRadonRetrievalArgsCount(bytes32 hash) external view returns (uint8); - function lookupRadonRetrievalResultDataType(bytes32 hash) external view returns (WitnetV2.RadonDataTypes); + function lookupRadonRetrievalResultDataType(bytes32 hash) external view returns (Witnet.RadonDataTypes); - function lookupRadonRequestAggregator(bytes32 radHash) external view returns (WitnetV2.RadonReducer memory); + function lookupRadonRequestAggregator(bytes32 radHash) external view returns (Witnet.RadonReducer memory); function lookupRadonRequestResultMaxSize(bytes32 radHash) external view returns (uint256); - function lookupRadonRequestResultDataType(bytes32 radHash) external view returns (WitnetV2.RadonDataTypes); + function lookupRadonRequestResultDataType(bytes32 radHash) external view returns (Witnet.RadonDataTypes); function lookupRadonRequestSources(bytes32 radHash) external view returns (bytes32[] memory); function lookupRadonRequestSourcesCount(bytes32 radHash) external view returns (uint); - function lookupRadonRequestTally(bytes32 radHash) external view returns (WitnetV2.RadonReducer memory); + function lookupRadonRequestTally(bytes32 radHash) external view returns (Witnet.RadonReducer memory); - function lookupRadonSLA(bytes32 slaHash) external view returns (WitnetV2.RadonSLA memory); + function lookupRadonRAD(bytes32 radHash) external view returns (Witnet.RadonRAD memory); + function lookupRadonSLA(bytes32 slaHash) external view returns (Witnet.RadonSLA memory); function lookupRadonSLAReward(bytes32 slaHash) external view returns (uint); - function verifyRadonRetrieval( - WitnetV2.DataRequestMethods requestMethod, - string calldata requestSchema, - string calldata requestAuthority, - string calldata requestPath, - string calldata requestQuery, - string calldata requestBody, - string[2][] calldata requestHeaders, - bytes calldata requestRadonScript - ) external returns (bytes32 hash); + // function verifyRadonRetrieval( + // Witnet.RadonDataRequestMethods requestMethod, + // string calldata requestSchema, + // string calldata requestAuthority, + // string calldata requestPath, + // string calldata requestQuery, + // string calldata requestBody, + // string[2][] calldata requestHeaders, + // bytes calldata requestRadonScript + // ) external returns (bytes32 hash); function verifyRadonRetrieval( - WitnetV2.DataRequestMethods requestMethod, + Witnet.RadonDataRequestMethods requestMethod, string calldata requestURL, string calldata requestBody, string[2][] calldata requestHeaders, bytes calldata requestRadonScript ) external returns (bytes32 hash); - function verifyRadonReducer(WitnetV2.RadonReducer calldata reducer) + function verifyRadonReducer(Witnet.RadonReducer calldata reducer) external returns (bytes32 hash); function verifyRadonRequest( @@ -84,7 +84,7 @@ interface IWitnetBytecodes { string[][] calldata args ) external returns (bytes32 radHash); - function verifyRadonSLA(WitnetV2.RadonSLA calldata sla) + function verifyRadonSLA(Witnet.RadonSLA calldata sla) external returns (bytes32 slaHash); function totalDataProviders() external view returns (uint); diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 0e2a99667..09ae8df0b 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -14,12 +14,12 @@ interface IWitnetFeeds { event UpdatingFeed(address indexed from, bytes4 indexed feedId, bytes32 slaHash, uint256 value); event UpdatingFeedReward(address indexed from, bytes4 indexed feedId, uint256 value); - function dataType() external view returns (WitnetV2.RadonDataTypes); + function dataType() external view returns (Witnet.RadonDataTypes); function prefix() external view returns (string memory); function registry() external view returns (WitnetBytecodes); function witnet() external view returns (WitnetRequestBoard); - function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); + function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); function estimateUpdateBaseFee(bytes4 feedId, uint256 evmGasPrice, uint256 witEvmPrice) external view returns (uint); function estimateUpdateBaseFee(bytes4 feedId, uint256 evmGasPrice, uint256 witEvmPrice, bytes32 slaHash) external view returns (uint); @@ -35,7 +35,7 @@ interface IWitnetFeeds { function lookupBytecode(bytes4 feedId) external view returns (bytes memory); function lookupRadHash(bytes4 feedId) external view returns (bytes32); - function lookupRetrievals(bytes4 feedId) external view returns (WitnetV2.RadonRetrieval[] memory); + function lookupRetrievals(bytes4 feedId) external view returns (Witnet.RadonRetrieval[] memory); function requestUpdate(bytes4 feedId) external payable returns (uint256 usedFunds); function requestUpdate(bytes4 feedId, bytes32 slaHash) external payable returns (uint256 usedFunds); diff --git a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol index 9388cddaa..39e55b4cb 100644 --- a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol +++ b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol @@ -10,7 +10,7 @@ interface IWitnetFeedsAdmin { function deleteFeed(string calldata caption) external; function owner() external view returns (address); function pendingOwner() external returns (address); - function settleDefaultRadonSLA(WitnetV2.RadonSLA calldata) external; + function settleDefaultRadonSLA(Witnet.RadonSLA calldata) external; function settleFeedRequest(string calldata caption, bytes32 radHash) external; function settleFeedRequest(string calldata caption, WitnetRequest request) external; function settleFeedRequest(string calldata caption, WitnetRequestTemplate template, string[][] calldata) external; diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index cc7ad91d1..7f64b1be4 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -176,6 +176,131 @@ library Witnet { UnhandledIntercept } + /// Possible Radon data request methods that can be used within a Radon Retrieval. + enum RadonDataRequestMethods { + /* 0 */ Unknown, + /* 1 */ HttpGet, + /* 2 */ Rng, + /* 3 */ HttpPost, + /* 4 */ HttpHead + } + + /// Possible types either processed by Witnet Radon Scripts or included within results to Witnet Data Requests. + enum RadonDataTypes { + /* 0x00 */ Any, + /* 0x01 */ Array, + /* 0x02 */ Bool, + /* 0x03 */ Bytes, + /* 0x04 */ Integer, + /* 0x05 */ Float, + /* 0x06 */ Map, + /* 0x07 */ String, + Unused0x08, Unused0x09, Unused0x0A, Unused0x0B, + Unused0x0C, Unused0x0D, Unused0x0E, Unused0x0F, + /* 0x10 */ Same, + /* 0x11 */ Inner, + /* 0x12 */ Match, + /* 0x13 */ Subscript + } + + /// Structure defining some data filtering that can be applied at the Aggregation or the Tally stages + /// within a Witnet Data Request resolution workflow. + struct RadonFilter { + RadonFilterOpcodes opcode; + bytes args; + } + + /// Filtering methods currently supported on the Witnet blockchain. + enum RadonFilterOpcodes { + /* 0x00 */ Reserved0x00, //GreaterThan, + /* 0x01 */ Reserved0x01, //LessThan, + /* 0x02 */ Reserved0x02, //Equals, + /* 0x03 */ Reserved0x03, //AbsoluteDeviation, + /* 0x04 */ Reserved0x04, //RelativeDeviation + /* 0x05 */ StandardDeviation, + /* 0x06 */ Reserved0x06, //Top, + /* 0x07 */ Reserved0x07, //Bottom, + /* 0x08 */ Mode, + /* 0x09 */ Reserved0x09 //LessOrEqualThan + } + + /// Structure defining the array of filters and reducting function to be applied at either the Aggregation + /// or the Tally stages within a Witnet Data Request resolution workflow. + struct RadonReducer { + RadonReducerOpcodes opcode; + RadonFilter[] filters; + // bytes script; + } + + /// Reducting functions currently supported on the Witnet blockchain. + enum RadonReducerOpcodes { + /* 0x00 */ Reserved0x00, //Minimum, + /* 0x01 */ Reserved0x01, //Maximum, + /* 0x02 */ Mode, + /* 0x03 */ AverageMean, + /* 0x04 */ Reserved0x04, //AverageMeanWeighted, + /* 0x05 */ AverageMedian, + /* 0x06 */ Reserved0x06, //AverageMedianWeighted, + /* 0x07 */ StandardDeviation, + /* 0x08 */ Reserved0x08, //AverageDeviation, + /* 0x09 */ Reserved0x09, //MedianDeviation, + /* 0x0A */ Reserved0x10, //MaximumDeviation, + /* 0x0B */ ConcatenateAndHash + } + + /// Structure containing all the parameters that fully describe a Witnet Radon Retrieval within a Witnet Data Request. + struct RadonRetrieval { + uint8 argsCount; + RadonDataRequestMethods method; + RadonDataTypes resultDataType; + string url; + string body; + string[2][] headers; + bytes script; + } + + /// Structure containing the Retrieve-Attestation-Delivery parts of a Witnet Data Request. + struct RadonRAD { + RadonRetrieval[] retrieve; + RadonReducer aggregate; + RadonReducer tally; + } + + /// Structure containing the Service Level Aggreement parameters of a Witnet Data Request. + struct RadonSLA { + uint8 numWitnesses; + uint8 minConsensusPercentage; + uint64 witnessReward; + uint64 witnessCollateral; + uint64 minerCommitRevealFee; + } + + + /// @notice Returns `true` if all witnessing parameters in `b` have same + /// @notice value or greater than the ones in `a`. + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) + internal pure returns (bool) + { + return ( + a.numWitnesses >= b.numWitnesses + && a.minConsensusPercentage >= b.minConsensusPercentage + && a.witnessReward >= b.witnessReward + && a.witnessCollateral >= b.witnessCollateral + && a.minerCommitRevealFee >= b.minerCommitRevealFee + ); + } + + function isValid(Witnet.RadonSLA memory sla) + internal pure returns (bool) + { + return ( + sla.witnessReward > 0 + && sla.numWitnesses > 0 && sla.numWitnesses <= 127 + && sla.minConsensusPercentage > 50 && sla.minConsensusPercentage < 100 + && sla.witnessCollateral > 0 + && sla.witnessCollateral / sla.witnessReward <= 127 + ); + } /// =============================================================================================================== /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index a033f5ee5..5f76550ad 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -2,7 +2,7 @@ pragma solidity >=0.8.0 <0.9.0; -import "./WitnetV2.sol"; +import "./Witnet.sol"; /// @title A library for encoding Witnet Data Requests. /// @author The Witnet Foundation. @@ -23,15 +23,25 @@ library WitnetEncodingLib { // ff010203050406070101ffffffffffff // 02ff050404000106060707070701ffff + error UnsupportedDataRequestMethod(uint8 method, string schema, string body, string[2][] headers); + error UnsupportedRadonDataType(uint8 datatype, uint256 maxlength); + error UnsupportedRadonFilterOpcode(uint8 opcode); + error UnsupportedRadonFilterArgs(uint8 opcode, bytes args); + error UnsupportedRadonReducerOpcode(uint8 opcode); + error UnsupportedRadonReducerScript(uint8 opcode, bytes script, uint256 offset); + error UnsupportedRadonScript(bytes script, uint256 offset); + error UnsupportedRadonScriptOpcode(bytes script, uint256 cursor, uint8 opcode); + error UnsupportedRadonTallyScript(bytes32 hash); + /// =============================================================================================================== /// --- WitnetLib internal methods -------------------------------------------------------------------------------- - function size(WitnetV2.RadonDataTypes _type) internal pure returns (uint16) { - if (_type == WitnetV2.RadonDataTypes.Integer - || _type == WitnetV2.RadonDataTypes.Float + function size(Witnet.RadonDataTypes _type) internal pure returns (uint16) { + if (_type == Witnet.RadonDataTypes.Integer + || _type == Witnet.RadonDataTypes.Float ) { return 9; - } else if (_type == WitnetV2.RadonDataTypes.Bool) { + } else if (_type == Witnet.RadonDataTypes.Bool) { return 1; } else { // undetermined @@ -131,7 +141,7 @@ library WitnetEncodingLib { } } - function encode(WitnetV2.RadonRetrieval memory source) + function encode(Witnet.RadonRetrieval memory source) public pure returns (bytes memory) { @@ -191,7 +201,7 @@ library WitnetEncodingLib { } function encode( - WitnetV2.RadonRetrieval[] memory sources, + Witnet.RadonRetrieval[] memory sources, string[][] memory args, bytes memory aggregatorInnerBytecode, bytes memory tallyInnerBytecode, @@ -218,11 +228,11 @@ library WitnetEncodingLib { ); } - function encode(WitnetV2.RadonReducer memory reducer) + function encode(Witnet.RadonReducer memory reducer) public pure returns (bytes memory bytecode) { - if (reducer.script.length == 0) { + // if (reducer.script.length == 0) { for (uint ix = 0; ix < reducer.filters.length; ix ++) { bytecode = abi.encodePacked( bytecode, @@ -233,15 +243,15 @@ library WitnetEncodingLib { bytecode, encode(reducer.opcode) ); - } else { - return abi.encodePacked( - encode(uint64(reducer.script.length), bytes1(0x18)), - reducer.script - ); - } + // } else { + // return abi.encodePacked( + // encode(uint64(reducer.script.length), bytes1(0x18)), + // reducer.script + // ); + // } } - function encode(WitnetV2.RadonFilter memory filter) + function encode(Witnet.RadonFilter memory filter) public pure returns (bytes memory bytecode) { @@ -259,7 +269,7 @@ library WitnetEncodingLib { ); } - function encode(WitnetV2.RadonReducerOpcodes opcode) + function encode(Witnet.RadonReducerOpcodes opcode) public pure returns (bytes memory) { @@ -267,7 +277,7 @@ library WitnetEncodingLib { return encode(uint64(opcode), bytes1(0x10)); } - function encode(WitnetV2.RadonSLA memory sla) + function encode(Witnet.RadonSLA memory sla) public pure returns (bytes memory) { @@ -299,7 +309,7 @@ library WitnetEncodingLib { return cbor.buffer.data; } - function replaceWildcards(WitnetV2.RadonRetrieval memory self, string[] memory args) + function replaceWildcards(Witnet.RadonRetrieval memory self, string[] memory args) public pure { self.url = WitnetBuffer.replace(self.url, args); @@ -311,7 +321,7 @@ library WitnetEncodingLib { } function validate( - WitnetV2.DataRequestMethods method, + Witnet.RadonDataRequestMethods method, string memory url, string memory body, string[2][] memory headers, @@ -323,16 +333,16 @@ library WitnetEncodingLib { if (!( bytes(url).length > 0 && ( - method == WitnetV2.DataRequestMethods.HttpGet - || method == WitnetV2.DataRequestMethods.HttpPost - || method == WitnetV2.DataRequestMethods.HttpHead + method == Witnet.RadonDataRequestMethods.HttpGet + || method == Witnet.RadonDataRequestMethods.HttpPost + || method == Witnet.RadonDataRequestMethods.HttpHead ) - || method == WitnetV2.DataRequestMethods.Rng + || method == Witnet.RadonDataRequestMethods.Rng && bytes(url).length == 0 && headers.length == 0 && script.length >= 1 )) { - revert WitnetV2.UnsupportedDataRequestMethod( + revert UnsupportedDataRequestMethod( uint8(method), url, body, @@ -342,168 +352,171 @@ library WitnetEncodingLib { return keccak256(abi.encode(method, url, body, headers, script)); } - function validate( - WitnetV2.DataRequestMethods method, - string memory schema, - string memory authority, - string memory path, - string memory query, - string memory body, - string[2][] memory headers, - bytes memory script - ) - public pure - returns (bytes32) - { - if (!( - (method == WitnetV2.DataRequestMethods.HttpGet - || method == WitnetV2.DataRequestMethods.HttpPost - || method == WitnetV2.DataRequestMethods.HttpHead - ) - && bytes(authority).length > 0 - && ( - bytes(schema).length == 0 - || keccak256(bytes(schema)) == keccak256(bytes("https://")) - || keccak256(bytes(schema)) == keccak256(bytes("http://")) - ) - || method == WitnetV2.DataRequestMethods.Rng - && bytes(schema).length == 0 - && bytes(authority).length == 0 - && bytes(path).length == 0 - && bytes(query).length == 0 - && bytes(body).length == 0 - && headers.length == 0 - && script.length >= 1 - )) { - revert WitnetV2.UnsupportedDataRequestMethod( - uint8(method), - schema, - body, - headers - ); - } - return keccak256(abi.encode( - method, - schema, - authority, - path, - query, - body, - headers, - script - )); - } + // function validate( + // Witnet.RadonDataRequestMethods method, + // string memory schema, + // string memory authority, + // string memory path, + // string memory query, + // string memory body, + // string[2][] memory headers, + // bytes memory script + // ) + // public pure + // returns (bytes32) + // { + // if (!( + // (method == Witnet.RadonDataRequestMethods.HttpGet + // || method == Witnet.RadonDataRequestMethods.HttpPost + // || method == Witnet.RadonDataRequestMethods.HttpHead + // ) + // && bytes(authority).length > 0 + // && ( + // bytes(schema).length == 0 + // || keccak256(bytes(schema)) == keccak256(bytes("https://")) + // || keccak256(bytes(schema)) == keccak256(bytes("http://")) + // ) + // || method == Witnet.RadonDataRequestMethods.Rng + // && bytes(schema).length == 0 + // && bytes(authority).length == 0 + // && bytes(path).length == 0 + // && bytes(query).length == 0 + // && bytes(body).length == 0 + // && headers.length == 0 + // && script.length >= 1 + // )) { + // revert UnsupportedDataRequestMethod( + // uint8(method), + // schema, + // body, + // headers + // ); + // } + // return keccak256(abi.encode( + // method, + // schema, + // authority, + // path, + // query, + // body, + // headers, + // script + // )); + // } function validate( - WitnetV2.RadonDataTypes dataType, + Witnet.RadonDataTypes dataType, uint16 maxDataSize ) public pure returns (uint16) { if ( - dataType == WitnetV2.RadonDataTypes.Any - || dataType == WitnetV2.RadonDataTypes.String - || dataType == WitnetV2.RadonDataTypes.Bytes - || dataType == WitnetV2.RadonDataTypes.Array - || dataType == WitnetV2.RadonDataTypes.Map + dataType == Witnet.RadonDataTypes.Any + || dataType == Witnet.RadonDataTypes.String + || dataType == Witnet.RadonDataTypes.Bytes + || dataType == Witnet.RadonDataTypes.Array + || dataType == Witnet.RadonDataTypes.Map ) { if (/*maxDataSize == 0 ||*/maxDataSize > 2048) { - revert WitnetV2.UnsupportedRadonDataType( + revert UnsupportedRadonDataType( uint8(dataType), maxDataSize ); } return maxDataSize; } else if ( - dataType == WitnetV2.RadonDataTypes.Integer - || dataType == WitnetV2.RadonDataTypes.Float - || dataType == WitnetV2.RadonDataTypes.Bool + dataType == Witnet.RadonDataTypes.Integer + || dataType == Witnet.RadonDataTypes.Float + || dataType == Witnet.RadonDataTypes.Bool ) { return 0; // TBD: size(dataType); } else { - revert WitnetV2.UnsupportedRadonDataType( + revert UnsupportedRadonDataType( uint8(dataType), size(dataType) ); } } - function validate(WitnetV2.RadonFilter memory filter) + function validate(Witnet.RadonFilter memory filter) public pure { if ( - filter.opcode == WitnetV2.RadonFilterOpcodes.StandardDeviation + filter.opcode == Witnet.RadonFilterOpcodes.StandardDeviation ) { // check filters that require arguments if (filter.args.length == 0) { - revert WitnetV2.RadonFilterMissingArgs(uint8(filter.opcode)); + revert UnsupportedRadonFilterArgs(uint8(filter.opcode), filter.args); } } else if ( - filter.opcode == WitnetV2.RadonFilterOpcodes.Mode + filter.opcode == Witnet.RadonFilterOpcodes.Mode ) { // check filters that don't require any arguments if (filter.args.length > 0) { - revert WitnetV2.UnsupportedRadonFilterArgs(uint8(filter.opcode), filter.args); + revert UnsupportedRadonFilterArgs(uint8(filter.opcode), filter.args); } } else { // reject unsupported opcodes - revert WitnetV2.UnsupportedRadonFilterOpcode(uint8(filter.opcode)); + revert UnsupportedRadonFilterOpcode(uint8(filter.opcode)); } } - function validate(WitnetV2.RadonReducer memory reducer) + function validate(Witnet.RadonReducer memory reducer) public pure { - if (reducer.script.length == 0) { + // if (reducer.script.length == 0) { if (!( - reducer.opcode == WitnetV2.RadonReducerOpcodes.AverageMean - || reducer.opcode == WitnetV2.RadonReducerOpcodes.StandardDeviation - || reducer.opcode == WitnetV2.RadonReducerOpcodes.Mode - || reducer.opcode == WitnetV2.RadonReducerOpcodes.ConcatenateAndHash - || reducer.opcode == WitnetV2.RadonReducerOpcodes.AverageMedian + reducer.opcode == Witnet.RadonReducerOpcodes.AverageMean + || reducer.opcode == Witnet.RadonReducerOpcodes.StandardDeviation + || reducer.opcode == Witnet.RadonReducerOpcodes.Mode + || reducer.opcode == Witnet.RadonReducerOpcodes.ConcatenateAndHash + || reducer.opcode == Witnet.RadonReducerOpcodes.AverageMedian )) { - revert WitnetV2.UnsupportedRadonReducerOpcode(uint8(reducer.opcode)); + revert UnsupportedRadonReducerOpcode(uint8(reducer.opcode)); } for (uint ix = 0; ix < reducer.filters.length; ix ++) { validate(reducer.filters[ix]); } - } else { - if (uint8(reducer.opcode) != 0xff || reducer.filters.length > 0) { - revert WitnetV2.UnsupportedRadonReducerScript( - uint8(reducer.opcode), - reducer.script, - 0 - ); - } - } + // } else { + // if (uint8(reducer.opcode) != 0xff || reducer.filters.length > 0) { + // revert UnsupportedRadonReducerScript( + // uint8(reducer.opcode), + // reducer.script, + // 0 + // ); + // } + // } } - function validate(WitnetV2.RadonSLA memory sla) + function validate(Witnet.RadonSLA memory sla) public pure { if (sla.witnessReward == 0) { - revert WitnetV2.RadonSlaNoReward(); + revert("WitnetEncodingLib: invalid SLA: no reward"); } if (sla.numWitnesses == 0) { - revert WitnetV2.RadonSlaNoWitnesses(); + revert("WitnetEncodingLib: invalid SLA: no witnesses"); } else if (sla.numWitnesses > 127) { - revert WitnetV2.RadonSlaTooManyWitnesses(sla.numWitnesses); + revert("WitnetEncodingLib: invalid SLA: too many witnesses (>127)"); } if ( sla.minConsensusPercentage < 51 || sla.minConsensusPercentage > 99 ) { - revert WitnetV2.RadonSlaConsensusOutOfRange(sla.minConsensusPercentage); + revert("WitnetEncodingLib: invalid SLA: consensus percentage out of range"); + } + if (sla.witnessCollateral > 0) { + revert("WitnetEncodingLib: invalid SLA: no collateral"); } - if (sla.witnessCollateral < 10 ** 9) { - revert WitnetV2.RadonSlaLowCollateral(sla.witnessCollateral); + if (sla.witnessCollateral / sla.witnessReward > 127) { + revert("WitnetEncodingLib: invalid SLA: collateral/reward ratio too high (>127)"); } } function verifyRadonScriptResultDataType(bytes memory script) public pure - returns (WitnetV2.RadonDataTypes) + returns (Witnet.RadonDataTypes) { return _verifyRadonScriptResultDataType( WitnetCBOR.fromBytes(script), @@ -538,7 +551,7 @@ library WitnetEncodingLib { function _verifyRadonScriptResultDataType(WitnetCBOR.CBOR memory self, bool flip) private pure - returns (WitnetV2.RadonDataTypes) + returns (Witnet.RadonDataTypes) { if (self.majorType == WitnetCBOR.MAJOR_TYPE_ARRAY) { WitnetCBOR.CBOR[] memory items = self.readArray(); @@ -548,7 +561,7 @@ library WitnetEncodingLib { : _verifyRadonScriptResultDataType(items[items.length - 2], true) ; } else { - return WitnetV2.RadonDataTypes.Any; + return Witnet.RadonDataTypes.Any; } } else if (self.majorType == WitnetCBOR.MAJOR_TYPE_INT) { uint cursor = self.buffer.cursor; @@ -557,14 +570,14 @@ library WitnetEncodingLib { ? 0xff : uint8(WITNET_RADON_OPCODES_RESULT_TYPES[opcode]) ); - if (dataType > uint8(type(WitnetV2.RadonDataTypes).max)) { - revert WitnetV2.UnsupportedRadonScriptOpcode( + if (dataType > uint8(type(Witnet.RadonDataTypes).max)) { + revert UnsupportedRadonScriptOpcode( self.buffer.data, cursor, uint8(opcode) ); } - return WitnetV2.RadonDataTypes(dataType); + return Witnet.RadonDataTypes(dataType); } else { revert WitnetCBOR.UnexpectedMajorType( WitnetCBOR.MAJOR_TYPE_INT, diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 4b9c0912c..ecfff6046 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -6,34 +6,6 @@ import "./Witnet.sol"; library WitnetV2 { - error IndexOutOfBounds(uint256 index, uint256 range); - error InsufficientBalance(uint256 weiBalance, uint256 weiExpected); - error InsufficientFee(uint256 weiProvided, uint256 weiExpected); - error Unauthorized(address violator); - - error RadonFilterMissingArgs(uint8 opcode); - - error RadonRequestNoSources(); - error RadonRequestSourcesArgsMismatch(uint expected, uint actual); - error RadonRequestMissingArgs(uint index, uint expected, uint actual); - error RadonRequestResultsMismatch(uint index, uint8 read, uint8 expected); - error RadonRequestTooHeavy(bytes bytecode, uint weight); - - error RadonSlaNoReward(); - error RadonSlaNoWitnesses(); - error RadonSlaTooManyWitnesses(uint256 numWitnesses); - error RadonSlaConsensusOutOfRange(uint256 percentage); - error RadonSlaLowCollateral(uint256 witnessCollateral); - - error UnsupportedDataRequestMethod(uint8 method, string schema, string body, string[2][] headers); - error UnsupportedRadonDataType(uint8 datatype, uint256 maxlength); - error UnsupportedRadonFilterOpcode(uint8 opcode); - error UnsupportedRadonFilterArgs(uint8 opcode, bytes args); - error UnsupportedRadonReducerOpcode(uint8 opcode); - error UnsupportedRadonReducerScript(uint8 opcode, bytes script, uint256 offset); - error UnsupportedRadonScript(bytes script, uint256 offset); - error UnsupportedRadonScriptOpcode(bytes script, uint256 cursor, uint8 opcode); - error UnsupportedRadonTallyScript(bytes32 hash); function toEpoch(uint _timestamp) internal pure returns (uint) { return 1 + (_timestamp - 11111) / 15; @@ -106,108 +78,4 @@ library WitnetV2 { Accepted, Rejected } - - struct DataProvider { - string authority; - uint256 totalEndpoints; - mapping (uint256 => bytes32) endpoints; - } - - enum DataRequestMethods { - /* 0 */ Unknown, - /* 1 */ HttpGet, - /* 2 */ Rng, - /* 3 */ HttpPost, - /* 4 */ HttpHead - } - - enum RadonDataTypes { - /* 0x00 */ Any, - /* 0x01 */ Array, - /* 0x02 */ Bool, - /* 0x03 */ Bytes, - /* 0x04 */ Integer, - /* 0x05 */ Float, - /* 0x06 */ Map, - /* 0x07 */ String, - Unused0x08, Unused0x09, Unused0x0A, Unused0x0B, - Unused0x0C, Unused0x0D, Unused0x0E, Unused0x0F, - /* 0x10 */ Same, - /* 0x11 */ Inner, - /* 0x12 */ Match, - /* 0x13 */ Subscript - } - - struct RadonFilter { - RadonFilterOpcodes opcode; - bytes args; - } - - enum RadonFilterOpcodes { - /* 0x00 */ GreaterThan, - /* 0x01 */ LessThan, - /* 0x02 */ Equals, - /* 0x03 */ AbsoluteDeviation, - /* 0x04 */ RelativeDeviation, - /* 0x05 */ StandardDeviation, - /* 0x06 */ Top, - /* 0x07 */ Bottom, - /* 0x08 */ Mode, - /* 0x09 */ LessOrEqualThan - } - - struct RadonReducer { - RadonReducerOpcodes opcode; - RadonFilter[] filters; - bytes script; - } - - enum RadonReducerOpcodes { - /* 0x00 */ Minimum, - /* 0x01 */ Maximum, - /* 0x02 */ Mode, - /* 0x03 */ AverageMean, - /* 0x04 */ AverageMeanWeighted, - /* 0x05 */ AverageMedian, - /* 0x06 */ AverageMedianWeighted, - /* 0x07 */ StandardDeviation, - /* 0x08 */ AverageDeviation, - /* 0x09 */ MedianDeviation, - /* 0x0A */ MaximumDeviation, - /* 0x0B */ ConcatenateAndHash - } - - struct RadonRetrieval { - uint8 argsCount; - DataRequestMethods method; - RadonDataTypes resultDataType; - string url; - string body; - string[2][] headers; - bytes script; - } - - struct RadonSLA { - uint numWitnesses; - uint minConsensusPercentage; - uint witnessReward; - uint witnessCollateral; - uint minerCommitRevealFee; - } - - /// @notice Returns `true` if all witnessing parameters in `b` have same - /// @notice value or greater than the ones in `a`. - function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) - internal pure - returns (bool) - { - return ( - a.numWitnesses >= b.numWitnesses - && a.minConsensusPercentage >= b.minConsensusPercentage - && a.witnessReward >= b.witnessReward - && a.witnessCollateral >= b.witnessCollateral - && a.minerCommitRevealFee >= b.minerCommitRevealFee - ); - } - } \ No newline at end of file From f502d965d0e0ea368fa9b2ab3e1e93ae105e5af2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 12:50:02 +0100 Subject: [PATCH 043/149] refactor: deprecate ballast on WitnetBytecodes --- .../core/defaults/WitnetBytecodesDefault.sol | 75 ------------------- contracts/interfaces/V2/IWitnetBytecodes.sol | 11 --- contracts/libs/WitnetEncodingLib.sol | 54 +------------ 3 files changed, 1 insertion(+), 139 deletions(-) diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 37a578e94..3f0704fcc 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -448,81 +448,6 @@ contract WitnetBytecodesDefault } } - // function verifyRadonRetrieval( - // Witnet.RadonDataRequestMethods _requestMethod, - // string memory _requestSchema, - // string memory _requestAuthority, - // string memory _requestPath, - // string memory _requestQuery, - // string memory _requestBody, - // string[2][] memory _requestHeaders, - // bytes calldata _requestRadonScript - // ) - // external - // virtual override - // returns (bytes32 hash) - // { - // // validate data source params - // hash = _requestMethod.validate( - // _requestSchema, - // _requestAuthority, - // _requestPath, - // _requestQuery, - // _requestBody, - // _requestHeaders, - // _requestRadonScript - // ); - - // // should it be a new data source: - // if ( - // __database().retrievals[hash].method == Witnet.RadonDataRequestMethods.Unknown - // ) { - // // compose data source and save it in storage: - // __database().retrievals[hash] = Witnet.RadonRetrieval({ - // argsCount: - // WitnetBuffer.argsCountOf( - // abi.encode( - // _requestAuthority, bytes(" "), - // _requestPath, bytes(" "), - // _requestQuery, bytes(" "), - // _requestBody, bytes(" "), - // _requestHeaders, bytes(" "), - // _requestRadonScript - // ) - // ), - - // method: - // _requestMethod, - - // resultDataType: - // WitnetEncodingLib.verifyRadonScriptResultDataType(_requestRadonScript), - - // url: - // string(abi.encodePacked( - // _requestSchema, - // _requestAuthority, - // bytes(_requestPath).length > 0 - // ? abi.encodePacked(bytes("/"), _requestPath) - // : bytes(""), - // bytes(_requestQuery).length > 0 - // ? abi.encodePacked("?", _requestQuery) - // : bytes("") - // )), - - // body: - // _requestBody, - - // headers: - // _requestHeaders, - - // script: - // _requestRadonScript - // }); - // __pushDataProviderSource(_requestAuthority, hash); - // emit NewRadonRetrievalHash(hash); - // } - // } - function verifyRadonReducer(Witnet.RadonReducer memory _reducer) external returns (bytes32 hash) { diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 6b3f76070..685735b40 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -54,17 +54,6 @@ interface IWitnetBytecodes { function lookupRadonSLA(bytes32 slaHash) external view returns (Witnet.RadonSLA memory); function lookupRadonSLAReward(bytes32 slaHash) external view returns (uint); - // function verifyRadonRetrieval( - // Witnet.RadonDataRequestMethods requestMethod, - // string calldata requestSchema, - // string calldata requestAuthority, - // string calldata requestPath, - // string calldata requestQuery, - // string calldata requestBody, - // string[2][] calldata requestHeaders, - // bytes calldata requestRadonScript - // ) external returns (bytes32 hash); - function verifyRadonRetrieval( Witnet.RadonDataRequestMethods requestMethod, string calldata requestURL, diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index 5f76550ad..654e6f4ac 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -350,59 +350,7 @@ library WitnetEncodingLib { ); } return keccak256(abi.encode(method, url, body, headers, script)); - } - - // function validate( - // Witnet.RadonDataRequestMethods method, - // string memory schema, - // string memory authority, - // string memory path, - // string memory query, - // string memory body, - // string[2][] memory headers, - // bytes memory script - // ) - // public pure - // returns (bytes32) - // { - // if (!( - // (method == Witnet.RadonDataRequestMethods.HttpGet - // || method == Witnet.RadonDataRequestMethods.HttpPost - // || method == Witnet.RadonDataRequestMethods.HttpHead - // ) - // && bytes(authority).length > 0 - // && ( - // bytes(schema).length == 0 - // || keccak256(bytes(schema)) == keccak256(bytes("https://")) - // || keccak256(bytes(schema)) == keccak256(bytes("http://")) - // ) - // || method == Witnet.RadonDataRequestMethods.Rng - // && bytes(schema).length == 0 - // && bytes(authority).length == 0 - // && bytes(path).length == 0 - // && bytes(query).length == 0 - // && bytes(body).length == 0 - // && headers.length == 0 - // && script.length >= 1 - // )) { - // revert UnsupportedDataRequestMethod( - // uint8(method), - // schema, - // body, - // headers - // ); - // } - // return keccak256(abi.encode( - // method, - // schema, - // authority, - // path, - // query, - // body, - // headers, - // script - // )); - // } + } function validate( Witnet.RadonDataTypes dataType, From f91d4d03ecffc987174eb8d2972083f60a2bb18a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 12:51:45 +0100 Subject: [PATCH 044/149] refactor: IWRB.read* -> IWRB.getQuery* --- .../WitnetRequestBoardTrustableBase.sol | 35 ++++++------------- contracts/interfaces/IWitnetRequestBoard.sol | 23 +++++------- 2 files changed, 20 insertions(+), 38 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 26de78298..b2130cf1d 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -613,7 +613,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Fails if the `_queryId` is not valid or, if it has already been reported /// @dev or deleted. /// @param _queryId The unique identifier of a previously posted query. - function readRequest(uint256 _queryId) + function getQueryRequest(uint256 _queryId) external view override inStatus(_queryId, Witnet.QueryStatus.Posted) @@ -627,7 +627,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev got changed after being posted. Returns empty array once it gets reported, /// @dev or deleted. /// @param _queryId The unique query identifier. - function readRequestBytecode(uint256 _queryId) + function getQueryRequestBytecode(uint256 _queryId) external view virtual override returns (bytes memory _bytecode) @@ -647,23 +647,10 @@ abstract contract WitnetRequestBoardTrustableBase } } - /// Retrieves the reward currently set for a previously posted request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier - function readRequestReward(uint256 _queryId) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - return __storage().queries[_queryId].request.reward; - } - /// Retrieves the Witnet-provided 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 readResponse(uint256 _queryId) + function getQueryResponse(uint256 _queryId) external view override inStatus(_queryId, Witnet.QueryStatus.Reported) @@ -699,7 +686,7 @@ abstract contract WitnetRequestBoardTrustableBase /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier - function readResponseResult(uint256 _queryId) + function getQueryResponseResult(uint256 _queryId) external view override inStatus(_queryId, Witnet.QueryStatus.Reported) @@ -709,19 +696,19 @@ abstract contract WitnetRequestBoardTrustableBase return _response.cborBytes.resultFromCborBytes(); } - /// Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseTimestamp(uint256 _queryId) + /// Retrieves the reward currently set for a previously posted request. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifier + function getQueryReward(uint256 _queryId) external view override - inStatus(_queryId, Witnet.QueryStatus.Reported) + inStatus(_queryId, Witnet.QueryStatus.Posted) returns (uint256) { - return __seekQueryResponse(_queryId).timestamp; + return __storage().queries[_queryId].request.reward; } - // ================================================================================================================ // --- Deprecating methods from 'IWitnetRequestBoard' ------------------------------------------------------------- diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 3492e08b1..9997f59ec 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -101,30 +101,25 @@ interface IWitnetRequestBoard { /// @dev Fails if the `_queryId` is not valid or, if it has already been reported /// @dev or deleted. /// @param _queryId The unique identifier of a previously posted query. - function readRequest(uint256 _queryId) external view returns (Witnet.Request memory); + function getQueryRequest(uint256 _queryId) external view returns (Witnet.Request memory); /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode /// @dev got changed after being posted. Returns empty array once it gets reported, /// @dev or deleted. /// @param _queryId The unique query identifier. - function readRequestBytecode(uint256 _queryId) external view returns (bytes memory); - - /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier. - function readRequestReward(uint256 _queryId) external view returns (uint256); - + function getQueryRequestBytecode(uint256 _queryId) external view returns (bytes memory); + /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier. - function readResponse(uint256 _queryId) external view returns (Witnet.Response memory); + function getQueryResponse(uint256 _queryId) external view returns (Witnet.Response memory); - /// @notice Retrieves error codes of given query. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or if no actual error. + /// @notice Retrieves the reward currently set for the referred query. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. /// @param _queryId The unique query identifier. - function readResponseDrTxHash(uint256 _queryId) external view returns (bytes32); + function getQueryReward(uint256 _queryId) external view returns (uint256); /// @notice Retrieves the address that reported the result to a previously-posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. @@ -134,7 +129,7 @@ interface IWitnetRequestBoard { /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier. - function readResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); + function getQueryResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); /// @notice Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. /// @dev Fails if the `_queryId` is not in 'Reported' status. From 9827c1476bc7774ebd3dcee5d73895253e2bff8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 13:02:53 +0100 Subject: [PATCH 045/149] refactor: deprecate ballast on WitnetRequestBoard --- .../WitnetRequestBoardTrustableBase.sol | 104 ++++-------------- contracts/interfaces/IWitnetRequestBoard.sol | 80 -------------- contracts/libs/WitnetErrorsLib.sol | 19 ++++ 3 files changed, 39 insertions(+), 164 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index b2130cf1d..c9856d930 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -62,44 +62,16 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 /// @dev (i.e. calling methods in IWitnetRequestBoard) /// @dev (Until 'function ... abi(...)' modifier is allegedly supported in solc versions >= 0.9.1) - // solhint-disable-next-line payable-fallback - fallback() override external { /* solhint-disable no-complex-fallback */ - bytes4 _newSig = msg.sig; - if (msg.sig == 0xA8604C1A) { - // IWitnetRequestParser.isOk({bool,CBOR}) --> IWitnetRequestBoard.isOk({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoard.isOk.selector; - } else if (msg.sig == 0xCF62D115) { - // IWitnetRequestParser.asBytes32({bool,CBOR}) --> IWitnetRequestBoard.asBytes32({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoard.asBytes32.selector; - } else if (msg.sig == 0xBC7E25FF) { - // IWitnetRequestParser.asUint64({bool,CBOR}) --> IWitnetRequestBoard.asUint64({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoard.asUint64.selector; - } else if (msg.sig == 0xD74803BE) { - // IWitnetRequestParser.asErrorMessage({bool,CBOR}) --> IWitnetRequestBoard.asErrorMessage({bool,WitnetCBOR.CBOR}) - _newSig = IWitnetRequestBoard.asErrorMessage.selector; - } - if (_newSig != msg.sig) { - address _self = address(this); - assembly { - let ptr := mload(0x40) - calldatacopy(ptr, 0, calldatasize()) - mstore(ptr, or(and(mload(ptr), 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff), _newSig)) - let result := delegatecall(gas(), _self, ptr, calldatasize(), 0, 0) - let size := returndatasize() - returndatacopy(ptr, 0, size) - switch result - case 0 { revert(ptr, size) } - default { return(ptr, size) } - } - } else { - revert(string(abi.encodePacked( - "WitnetRequestBoardTrustableBase: 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))) - ))); - } + /* solhint-disable payable-fallback */ + /* solhint-disable no-complex-fallback */ + fallback() override external { + revert(string(abi.encodePacked( + "WitnetRequestBoardTrustableBase: 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))) + ))); } @@ -432,34 +404,22 @@ abstract contract WitnetRequestBoardTrustableBase returns (Witnet.ResultError memory) { Witnet.ResultStatus _status = checkResultStatus(_queryId); - if (_status == Witnet.ResultStatus.Awaiting) { + try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_queryId).cborBytes) + returns (Witnet.ResultError memory _resultError) + { + return _resultError; + } + catch Error(string memory _reason) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetRequestBoardTrustableBase: not yet solved" + reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) }); - } else if (_status == Witnet.ResultStatus.Void) { + } + catch (bytes memory) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetRequestBoardTrustableBase: unknown query" + reason: "WitnetErrorsLib: assertion failed" }); - } else { - try WitnetErrorsLib.resultErrorFromCborBytes(__seekQueryResponse(_queryId).cborBytes) - returns (Witnet.ResultError memory _error) - { - return _error; - } - catch Error(string memory _reason) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) - }); - } - catch (bytes memory) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetErrorsLib: assertion failed" - }); - } } } @@ -659,30 +619,6 @@ abstract contract WitnetRequestBoardTrustableBase return __seekQueryResponse(_queryId); } - /// Retrieves the hash of the Witnet transaction that actually solved the referred query. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseDrTxHash(uint256 _queryId) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Reported) - returns (bytes32) - { - return __seekQueryResponse(_queryId).drTxHash; - } - - /// Retrieves the address that reported the result to a previously-posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier - function readResponseReporter(uint256 _queryId) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Reported) - returns (address) - { - return __seekQueryResponse(_queryId).reporter; - } - /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 9997f59ec..3985c6cd4 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -121,90 +121,10 @@ interface IWitnetRequestBoard { /// @param _queryId The unique query identifier. function getQueryReward(uint256 _queryId) external view returns (uint256); - /// @notice Retrieves the address that reported the result to a previously-posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseReporter(uint256 _queryId) external view returns (address); - /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier. function getQueryResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); - /// @notice Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function readResponseTimestamp(uint256 _queryId) external view returns (uint256); - - - /// =============================================================================================================== - /// --- Deprecating funcionality v0.5 ----------------------------------------------------------------------------- - - /// Tell if a Witnet.Result is successful. - /// @param _result An instance of Witnet.Result. - /// @return `true` if successful, `false` if errored. - function isOk(Witnet.Result memory _result) external pure returns (bool); - - /// Decode a bytes value from a Witnet.Result as a `bytes32` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bytes32` decoded from the Witnet.Result. - function asBytes32(Witnet.Result memory _result) external pure returns (bytes32); - - /// Generate a suitable error message for a member of `Witnet.ResultErrorCodes` and its corresponding arguments. - /// @dev WARN: Note that client contracts should wrap this function into a try-catch foreseing potential errors generated in this function - /// @param _result An instance of `Witnet.Result`. - /// @return A tuple containing the `CBORValue.Error memory` decoded from the `Witnet.Result`, plus a loggable error message. - function asErrorMessage(Witnet.Result memory _result) external pure returns (Witnet.ResultErrorCodes, string memory); - - /// Decode a natural numeric value from a Witnet.Result as a `uint` value. - /// @param _result An instance of Witnet.Result. - /// @return The `uint` decoded from the Witnet.Result. - function asUint64(Witnet.Result memory _result) external pure returns (uint64); - - /// @notice Estimate the minimum reward required for posting a data request. - /// @dev Underestimates if the size of returned data is greater than 32 bytes. - /// @param _gasPrice Expected gas price to pay upon posting the data request. - function estimateReward(uint256 _gasPrice) external view returns (uint256); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @dev - provided script is zero address. - /// @dev - provided script bytecode is empty. - /// @param _requestAddr The address of the IWitnetRequest contract that can provide the actual Data Request bytecode. - /// @return _queryId Unique query identifier. - function postRequest(address _requestAddr) external payable returns (uint256 _queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. - /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaHash The SLA hash of the data request to be solved by Witnet. - /// @return _queryId Unique query identifier. - function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); - - /// @notice Retrieves the gas price that any assigned reporter will have to pay when reporting - /// result to a previously posted Witnet data request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifie - function readRequestGasPrice(uint256 _queryId) external view returns (uint256); - /// Decode raw CBOR bytes into a Witnet.Result instance. - /// @param _cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory _cborBytes) external pure returns (Witnet.Result memory); - - /// @notice Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Updates request `gasPrice` in case this method is called with a higher - /// @dev gas price value than the one used in previous calls to `postRequest` or - /// @dev `upgradeReward`. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @dev Fails also in case the request `gasPrice` is increased, and the new - /// @dev reward value gets below new recalculated threshold. - /// @param _queryId The unique query identifier. - function upgradeReward(uint256 _queryId) external payable; } diff --git a/contracts/libs/WitnetErrorsLib.sol b/contracts/libs/WitnetErrorsLib.sol index 54c017569..ae1f38ec6 100644 --- a/contracts/libs/WitnetErrorsLib.sol +++ b/contracts/libs/WitnetErrorsLib.sol @@ -28,6 +28,25 @@ library WitnetErrorsLib { ); } + function asResultError(Witnet.ResultStatus _status, bytes memory _cborBytes) + public pure + returns (Witnet.ResultError memory) + { + if (_status == Witnet.ResultStatus.Awaiting) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitnetRequestBoard: not yet solved" + }); + } else if (_status == Witnet.ResultStatus.Void) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitnetRequestBoard: unknown query" + }); + } else { + return resultErrorFromCborBytes(_cborBytes); + } + } + /// @notice Extract error code and description string from given CBOR-encoded value. /// @dev Client contracts should wrap this function into a try-catch foreseeing potential parsing errors. /// @return _error Witnet.ResultError data struct containing error code and description. From 879bfc48dd9733d9d7df0b8445e5038f05928218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 13:29:30 +0100 Subject: [PATCH 046/149] refactor: IWRB events --- .../WitnetRequestBoardTrustableBase.sol | 100 ++++++++++-------- contracts/interfaces/IWitnetRequestBoard.sol | 12 ++- 2 files changed, 60 insertions(+), 52 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index c9856d930..b271f4c27 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -33,6 +33,14 @@ abstract contract WitnetRequestBoardTrustableBase bytes4 public immutable override class = type(IWitnetRequestBoard).interfaceId; WitnetRequestFactory immutable public override factory; + + modifier checkReward(uint256 _baseFee) { + require( + _getMsgValue() >= _baseFee, + "WitnetRequestBoardTrustableBase: reward too low" + ); _; + } + constructor( WitnetRequestFactory _factory, @@ -229,10 +237,16 @@ abstract contract WitnetRequestBoardTrustableBase onlyReporters inStatus(_queryId, Witnet.QueryStatus.Posted) { - require(_drTxHash != 0, "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero"); + require( + _drTxHash != 0, + "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + ); // Ensures the result bytes do not have zero length // This would not be a valid encoding with CBOR and could trigger a reentrancy attack - require(_cborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty"); + require( + _cborBytes.length != 0, + "WitnetRequestBoardTrustableDefault: result cannot be empty" + ); // solhint-disable not-rely-on-time _safeTransferTo( payable(msg.sender), @@ -243,7 +257,6 @@ abstract contract WitnetRequestBoardTrustableBase _cborBytes ) ); - emit PostedResult(_queryId, msg.sender); } /// Reports the Witnet-provided result to a previously posted request. @@ -267,21 +280,27 @@ abstract contract WitnetRequestBoardTrustableBase onlyReporters inStatus(_queryId, Witnet.QueryStatus.Posted) { - require(_timestamp <= block.timestamp, "WitnetRequestBoardTrustableDefault: bad timestamp"); - require(_drTxHash != 0, "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero"); - // Ensures the result bytes do not have zero length - // This would not be a valid encoding with CBOR and could trigger a reentrancy attack - require(_cborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty"); - _safeTransferTo( - payable(msg.sender), - __reportResult( - _queryId, - _timestamp, - _drTxHash, - _cborBytes - ) + require( + _timestamp <= block.timestamp, + "WitnetRequestBoardTrustableDefault: bad timestamp" + ); + require( + _drTxHash != 0, + "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + ); + // Ensures the result bytes do not have zero length (this would not be a valid CBOR encoding + // and could trigger a reentrancy attack) + require( + _cborBytes.length != 0, + "WitnetRequestBoardTrustableDefault: result cannot be empty" ); - emit PostedResult(_queryId, msg.sender); + // Transfer query's reward to the reporter: + _safeTransferTo(payable(msg.sender), __reportResult( + _queryId, + _timestamp, + _drTxHash, + _cborBytes + )); } /// Reports Witnet-provided results to multiple requests within a single EVM tx. @@ -340,10 +359,6 @@ abstract contract WitnetRequestBoardTrustableBase _result.drTxHash, _result.cborBytes ); - emit PostedResult( - _result.queryId, - msg.sender - ); } } // Transfer all successful rewards in one single shot to the authorized reporter, if any: @@ -464,28 +479,12 @@ abstract contract WitnetRequestBoardTrustableBase function postRequest(bytes32 _radHash, bytes32 _slaHash) virtual override public payable + checkReward(estimateBaseFee(_getGasPrice(), 32)) returns (uint256 _queryId) { - uint256 _value = _getMsgValue(); - uint256 _gasPrice = _getGasPrice(); - - // check base reward - uint256 _baseFee = estimateBaseFee(_gasPrice, 32); - require( - _value >= _baseFee, - "WitnetRequestBoardTrustableBase: reward too low" - ); - - _queryId = ++ __storage().numQueries; - __storage().queries[_queryId].from = msg.sender; - - Witnet.Request storage __request = __seekQueryRequest(_queryId); - __request.radHash = _radHash; - __request.slaHash = _slaHash; - __request.reward = _value; - + _queryId = __postRequest(_radHash, _slaHash); // Let observers know that a new request has been posted - emit PostedRequest(_queryId, msg.sender); + emit NewQuery(_queryId, _getMsgValue()); } /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. @@ -494,18 +493,25 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Fails if: /// @dev - provided reward is too low. /// @param _radHash The RAD hash of the data tequest to be solved by Witnet. - /// @param _slaParams The SLA param of the data request to be solved by Witnet. - function postRequest(bytes32 _radHash, WitnetV2.RadonSLA calldata _slaParams) + /// @param _querySLA The SLA param of the data request to be solved by Witnet. + function postRequest( + bytes32 _radHash, + Witnet.RadonSLA calldata _querySLA + ) virtual override public payable + checkReward(estimateBaseFee(_getGasPrice(), 32)) returns (uint256 _queryId) { - return postRequest( - _radHash, - registry().verifyRadonSLA(_slaParams) + _queryId = __postRequest( + _radHash, + registry().verifyRadonSLA(_querySLA) ); + // Let observers know that a new request has been posted + emit NewQuery(_queryId, _getMsgValue()); } - + } + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// @notice result to this request. @@ -534,7 +540,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Posted) { __seekQueryRequest(_queryId).reward += _getMsgValue(); - emit UpgradedReward(_queryId); + emit QueryRewardUpgraded(_queryId, __seekQueryRequest(_queryId).reward); } diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 3985c6cd4..41dec51d7 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -2,19 +2,21 @@ pragma solidity >=0.7.0 <0.9.0; -import "../libs/WitnetV2.sol"; +import "../libs/Witnet.sol"; interface IWitnetRequestBoard { - - /// Emitted when a Witnet Data Request is posted to the WRB. - event PostedRequest(uint256 indexed queryId, address from); + + /// Emitted every time a new query containing some verified data request is posted to the WRB. + event NewQuery(uint256 indexed id, uint256 evmReward); /// Emitted when a Witnet-solved result is reported to the WRB. event PostedResult(uint256 indexed queryId, address from); /// Emitted when the reward of some not-yet reported query is upgraded. - event UpgradedReward(uint256 indexed queryId); + event QueryRewardUpgraded(uint256 indexed id, uint256 evmReward); + /// Emitted when a query with no callback gets reported into the WRB. + event QueryReport(uint256 indexed id, uint256 evmGasPrice); /// =============================================================================================================== /// --- Requester interface --------------------------------------------------------------------------------------- From 30fd3f47b07522371ce752df438c74b973c8f107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 13:52:23 +0100 Subject: [PATCH 047/149] feat: implement query callbacks from the WRB --- .../WitnetRequestBoardTrustableBase.sol | 281 ++++++++---------- contracts/interfaces/IWitnetRequestBoard.sol | 38 ++- contracts/interfaces/V2/IWitnetConsumer.sol | 41 ++- 3 files changed, 195 insertions(+), 165 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index b271f4c27..9348e8ab0 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -11,6 +11,7 @@ import "../../data/WitnetRequestBoardDataACLs.sol"; import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; import "../../interfaces/IWitnetRequestBoardReporter.sol"; +import "../../interfaces/V2/IWitnetConsumer.sol"; import "../../libs/WitnetErrorsLib.sol"; import "../../patterns/Payable.sol"; @@ -30,6 +31,7 @@ abstract contract WitnetRequestBoardTrustableBase { using Witnet for bytes; using Witnet for Witnet.Result; + using WitnetCBOR for WitnetCBOR.CBOR; bytes4 public immutable override class = type(IWitnetRequestBoard).interfaceId; WitnetRequestFactory immutable public override factory; @@ -41,6 +43,12 @@ abstract contract WitnetRequestBoardTrustableBase ); _; } + modifier checkCallbackRecipient(address _addr) { + require( + _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)), + "WitnetRequestBoardTrustableBase: invalid callback recipient" + ); _; + } constructor( WitnetRequestFactory _factory, @@ -92,6 +100,11 @@ abstract contract WitnetRequestBoardTrustableBase /// @param _resultMaxSize Maximum expected size of returned data (in bytes). function estimateBaseFee(uint256 _gasPrice, uint256 _resultMaxSize) virtual public view returns (uint256); + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) virtual public view returns (uint256); + // ================================================================================================================ // --- Overrides 'Upgradeable' ------------------------------------------------------------------------------------ @@ -517,15 +530,25 @@ abstract contract WitnetRequestBoardTrustableBase /// @notice result to this request. /// @dev Fails if, provided reward is too low. /// @dev The caller must be a contract implementing the IWitnetConsumer interface. - function postRequestWithCallback(bytes32, WitnetV2.RadonSLA calldata) + function postRequestWithCallback( + bytes32 _radHash, + Witnet.RadonSLA calldata _querySLA, + uint256 _queryMaxCallbackGas + ) virtual override external payable - returns (uint256) + checkCallbackRecipient(msg.sender) + checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryMaxCallbackGas)) + returns (uint256 _queryId) { - revert("WitnetRequestBoardTrustableBase: not implemented"); + _queryId = __postRequest( + _radHash, + registry().verifyRadonSLA(_querySLA) + ); + __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; + emit NewQuery(_queryId, _getMsgValue()); } - /// Increments the reward of a previously posted request by adding the transaction value to it. /// @dev Updates request `gasPrice` in case this method is called with a higher /// @dev gas price value than the one used in previous calls to `postRequest` or @@ -651,160 +674,29 @@ abstract contract WitnetRequestBoardTrustableBase return __storage().queries[_queryId].request.reward; } - // ================================================================================================================ - // --- Deprecating methods from 'IWitnetRequestBoard' ------------------------------------------------------------- - /// Tell if a Witnet.Result is successful. - /// @param _result An instance of Witnet.Result. - /// @return `true` if successful, `false` if errored. - function isOk(Witnet.Result memory _result) - external pure - override - returns (bool) - { - return _result.success; - } - - /// Decode a bytes value from a Witnet.Result as a `bytes32` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bytes32` decoded from the Witnet.Result. - function asBytes32(Witnet.Result memory _result) - external pure - override - returns (bytes32) - { - return _result.asBytes32(); - } - - /// Generate a suitable error message for a member of `Witnet.ResultErrorCodes` and its corresponding arguments. - /// @dev WARN: Note that client contracts should wrap this function into a try-catch foreseing potential errors generated in this function - /// @param _result An instance of `Witnet.Result`. - /// @return A tuple containing the `CBORValue.Error memory` decoded from the `Witnet.Result`, plus a loggable error message. - function asErrorMessage(Witnet.Result memory _result) - external pure - override - returns (Witnet.ResultErrorCodes, string memory) - { - Witnet.ResultError memory _resultError = WitnetErrorsLib.asError(_result); - return ( - _resultError.code, - _resultError.reason - ); - } - - /// Decode a natural numeric value from a Witnet.Result as a `uint` value. - /// @param _result An instance of Witnet.Result. - /// @return The `uint` decoded from the Witnet.Result. - function asUint64(Witnet.Result memory _result) - external pure - override - returns (uint64) - { - return uint64(_result.asUint()); - } + // ================================================================================================================ + // --- Internal functions ----------------------------------------------------------------------------------------- - /// Estimates the amount of reward we need to insert for a given gas price. - /// @param _gasPrice The gas price for which we need to calculate the rewards. - function estimateReward(uint256 _gasPrice) - external view - override - returns (uint256) + function __newQuery() + virtual internal returns (uint256) { - return estimateBaseFee(_gasPrice, 32); + return ++ __storage().numQueries; } - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @dev - provided address is zero. - /// @param _requestInterface The address of a IWitnetRequest contract, containing the actual Data Request seralized bytecode. - /// @return _queryId An unique query identifier. - function postRequest(address _requestInterface) - virtual override - public payable + function __postRequest(bytes32 _radHash, bytes32 _slaHash) + virtual internal returns (uint256 _queryId) { - uint256 _value = _getMsgValue(); - uint256 _gasPrice = _getGasPrice(); - - // check base reward - uint256 _baseFee = estimateBaseFee(_gasPrice, 32); - require(_value >= _baseFee, "WitnetRequestBoardTrustableBase: reward too low"); - - _queryId = ++ __storage().numQueries; - __storage().queries[_queryId].from = msg.sender; - + _queryId = __newQuery(); Witnet.Request storage __request = __seekQueryRequest(_queryId); - __request._addr = _requestInterface; - __request._gasprice = _gasPrice; - __request.reward = _value; - - // Let observers know that a new request has been posted - emit PostedRequest(_queryId, msg.sender); - } - - /// Retrieves the gas price that any assigned reporter will have to pay when reporting - /// result to a previously posted Witnet data request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier - function readRequestGasPrice(uint256 _queryId) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - return __storage().queries[_queryId].request._gasprice; - } - - /// Decode raw CBOR bytes into a Witnet.Result instance. - /// @param _cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory _cborBytes) - external pure - override - returns (Witnet.Result memory) - { - return Witnet.resultFromCborBytes(_cborBytes); - } - - /// Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Updates request `gasPrice` in case this method is called with a higher - /// @dev gas price value than the one used in previous calls to `postRequest` or - /// @dev `upgradeReward`. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @dev Fails also in case the request `gasPrice` is increased, and the new - /// @dev reward value gets below new recalculated threshold. - /// @param _queryId The unique query identifier. - function upgradeReward(uint256 _queryId) - public payable - virtual override - inStatus(_queryId, Witnet.QueryStatus.Posted) - { - Witnet.Request storage __request = __seekQueryRequest(_queryId); - - uint256 _newReward = __request.reward + _getMsgValue(); - uint256 _newGasPrice = _getGasPrice(); - - // If gas price is increased, then check if new rewards cover gas costs - if (_newGasPrice > __request._gasprice) { - // Checks the reward is covering gas cost - uint256 _minResultReward = estimateBaseFee(_newGasPrice, 32); - require( - _newReward >= _minResultReward, - "WitnetRequestBoardTrustableBase: reward too low" - ); - __request._gasprice = _newGasPrice; + { + __request.radHash = _radHash; + __request.slaHash = _slaHash; + __request.reward = _getMsgValue(); } - __request.reward = _newReward; } - - // ================================================================================================================ - // --- Internal functions ----------------------------------------------------------------------------------------- - function __reportResult( uint256 _queryId, uint256 _timestamp, @@ -812,20 +704,105 @@ abstract contract WitnetRequestBoardTrustableBase bytes memory _cborBytes ) internal - returns (uint256 _reward) + returns (uint256 _evmReward) { Witnet.Query storage __query = __seekQuery(_queryId); + + // read and erase query report reward Witnet.Request storage __request = __query.request; - Witnet.Response storage __response = __query.response; + _evmReward = __request.reward; + __request.reward = 0; + // write report traceability data in storage + // (could potentially be deleted from a callback method within same transaction) + Witnet.Response storage __response = __query.response; // solhint-disable not-rely-on-time __response.timestamp = _timestamp; __response.drTxHash = _drTxHash; __response.reporter = msg.sender; - __response.cborBytes = _cborBytes; - // return request latest reward - _reward = __request.reward; + // determine whether a callback is required + if (__request.maxCallbackGas > 0) { + uint _evmCallbackGas = gasleft(); + bool _evmCallbackSuccess; + bytes memory _evmCallbackRevertBytes; + // if callback is required, select which callback method to call + // depending on whether the query was solved with or without errors: + if (_cborBytes[0] == bytes1(0xd8)) { + WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_cborBytes).readArray(); + if (_errors.length < 2) { + // result with unknown error: + (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( + abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryError.selector, + _queryId, + Witnet.ResultErrorCodes.Unknown, + WitnetCBOR.CBOR({ + buffer: WitnetBuffer.Buffer({ data: hex"", cursor: 0}), + initialByte: 0, + majorType: 0, + additionalInformation: 0, + len: 0, + tag: 0 + }) + ) + ); + } else { + // result with parsable error: + (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( + abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryError.selector, + _queryId, + Witnet.ResultErrorCodes(_errors[0].readUint()), + _errors[0] + ) + ); + } + } else { + // result with no error + (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( + abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryResult.selector, + _queryId, + WitnetCBOR.fromBytes(_cborBytes) + ) + ); + } + _evmCallbackGas -= gasleft(); + if (_evmCallbackSuccess) { + emit QueryCallback( + _queryId, + _getGasPrice(), + _evmCallbackGas + ); + } else { + if (_evmCallbackRevertBytes.length < 68) { + emit QueryCallbackRevert( + _queryId, + _getGasPrice(), + _evmCallbackGas, + "WitnetRequestBoardTrustableDefault: unhandled callback revert" + ); + } else { + assembly { + _evmCallbackRevertBytes := add(_evmCallbackRevertBytes, 0x04) + } + emit QueryCallbackRevert( + _queryId, + _getGasPrice(), + _evmCallbackGas, + string(abi.encodePacked( + "WitnetRequestBoardTrustableDefault: callback revert: ", + _evmCallbackRevertBytes + )) + ); + } + } + } else { + // no callback is involved, so just keep the cbor-encoded result in storage: + __response.cborBytes = _cborBytes; + emit QueryReport( + _queryId, + _getGasPrice() + ); + } } function __setReporters(address[] memory _reporters) internal { diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 41dec51d7..70446cc96 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -17,6 +17,12 @@ interface IWitnetRequestBoard { /// Emitted when a query with no callback gets reported into the WRB. event QueryReport(uint256 indexed id, uint256 evmGasPrice); + + /// Emitted when a query with a callback gets successfully reported into the WRB. + event QueryCallback(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); + + /// Emitted when a query with a callback cannot get reported into the WRB. + event QueryCallbackRevert(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); /// =============================================================================================================== /// --- Requester interface --------------------------------------------------------------------------------------- @@ -51,6 +57,26 @@ interface IWitnetRequestBoard { /// @param _queryId The unique query identifier. function deleteQuery(uint256 _queryId) external returns (Witnet.Response memory); + /// @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, uint256 _resultMaxSize) external view returns (uint256); + + /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) external view returns (uint256); + + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @param slaHash The SLA hash of the data request to be solved by Witnet. + /// @return _queryId Unique query identifier. + function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// @notice result to this request. @@ -68,6 +94,7 @@ interface IWitnetRequestBoard { /// @dev The caller must be a contract implementing the IWitnetConsumer interface. /// @param radHash 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. /// @return _queryId Unique query identifier. function postRequestWithCallback(bytes32 radHash, Witnet.RadonSLA calldata querySLA, uint256 maxCallbackGas) external payable returns (uint256 _queryId); @@ -79,17 +106,6 @@ interface IWitnetRequestBoard { /// =============================================================================================================== /// --- Reader interface ------------------------------------------------------------------------------------------ - /// @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, uint256 _resultMaxSize) external view returns (uint256); - - /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) external view returns (uint256); - /// @notice Returns next query id to be generated by the Witnet Request Board. function getNextQueryId() external view returns (uint256); diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index 0ea6aaa49..af065fec3 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -4,6 +4,43 @@ pragma solidity ^0.8.0; import "../../libs/Witnet.sol"; interface IWitnetConsumer { - function reportWitnetQueryResult(uint256, WitnetCBOR.CBOR calldata) external; - function reportWitnetQueryError(uint256, Witnet.ResultErrorCodes, uint) external; + + /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` + /// @notice gets reported, if reported with no errors. + /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used + /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer + /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` + /// @dev and `witnetDrCommitTimestamp`), or the finality status, of the result being reported. + /// @param queryId The unique identifier of the Witnet query being reported. + /// @param cborValue The CBOR-encoded resulting value of the Witnet query being reported. + function reportWitnetQueryResult( + uint256 queryId, + WitnetCBOR.CBOR calldata cborValue + ) external; + + /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` + /// @notice gets reported, if reported WITH errors. + /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used + /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer + /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` + /// @dev and `witnetDrCommitTimestamp`), or the finality status, of the result being reported. + /// @param queryId The unique identifier of the Witnet query being reported. + /// @param errorCode The error code enum identifying the error produced during resolution on the Witnet blockchain. + /// @param errorArgs Error arguments, if any. An empty buffer is to be passed if no error arguments apply. + function reportWitnetQueryError( + uint256 queryId, + Witnet.ResultErrorCodes errorCode, + WitnetCBOR.CBOR calldata errorArgs + ) external; + + /// @notice Method to be called from the WitnetRequestBoard contract as soon as some dispute + /// @notice arises concerning the given Witnet `queryId`. + /// @param queryId The unique identifier of the Witnet query being disputed. + /// @param resolutionBlock The EVM block number at which the query resolution is expected to be final. + function reportWitnetQueryDispute(uint256 queryId, uint256 resolutionBlock) external; + + /// @notice Determines if Witnet queries can be reported from given address. + /// @dev In practice, must only be true on the WitnetRequestBoard address that's being used by + /// @dev the WitnetConsumer to post queries. + function reportableFrom(address) external view returns (bool); } \ No newline at end of file From 87e8f2936f7673f8236dcb75fec3f67f59ae18d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 19:50:25 +0100 Subject: [PATCH 048/149] feat: 5-param Witnet.RadonSLA -> 2-param WitnetV2.RadonSLA --- contracts/apps/UsingWitnet.sol | 4 +- contracts/apps/UsingWitnetRequest.sol | 4 +- contracts/apps/UsingWitnetRequestTemplate.sol | 6 +- contracts/apps/WitnetPriceFeeds.sol | 79 ++++++------ contracts/apps/WitnetRandomness.sol | 90 ++++++------- .../core/defaults/WitnetBytecodesDefault.sol | 122 ++---------------- .../WitnetRequestBoardTrustableBase.sol | 69 +++++++--- contracts/data/WitnetBytecodesData.sol | 4 +- contracts/data/WitnetPriceFeedsData.sol | 2 +- contracts/interfaces/IWitnetRandomness.sol | 2 +- .../interfaces/IWitnetRandomnessAdmin.sol | 2 +- contracts/interfaces/IWitnetRequestBoard.sol | 35 ++--- contracts/interfaces/V2/IWitnetBytecodes.sol | 27 +--- contracts/interfaces/V2/IWitnetFeeds.sol | 8 +- contracts/interfaces/V2/IWitnetFeedsAdmin.sol | 2 +- contracts/libs/Witnet.sol | 37 +++++- contracts/libs/WitnetV2.sol | 117 ++++++++--------- 17 files changed, 277 insertions(+), 333 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index f219138df..d5b3d28dd 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -89,8 +89,8 @@ abstract contract UsingWitnet { function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA, - bytes32 _witnetRadHash + bytes32 _witnetRadHash, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) virtual internal returns (uint256) { diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 8631804df..d7103c3b7 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -42,8 +42,8 @@ abstract contract UsingWitnetRequest { return __witnetRequestData( _witnetEvmReward, - _witnetQuerySLA, - __witnetRequestRadHash + __witnetRequestRadHash, + _witnetQuerySLA ); } diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index 0d4ea08ed..dfeaf2573 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -35,7 +35,7 @@ abstract contract UsingWitnetRequestTemplate } function _witnetEstimateBaseFee() - internal view + virtual internal view returns (uint256) { return __witnet.estimateBaseFee( @@ -53,8 +53,8 @@ abstract contract UsingWitnetRequestTemplate { return __witnetRequestData( _witnetEvmReward, - _witnetQuerySLA, - _witnetBuildRadHash(_witnetRequestArgs) + _witnetBuildRadHash(_witnetRequestArgs), + _witnetQuerySLA ); } diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 83eee104d..182a6a1a0 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -27,7 +27,7 @@ contract WitnetPriceFeeds WitnetPriceFeedsData { using Witnet for Witnet.Result; - using Witnet for Witnet.RadonSLA; + using WitnetV2 for WitnetV2.RadonSLA; bytes4 immutable public class = type(IWitnetPriceFeeds).interfaceId; WitnetRequestBoard immutable public override witnet; @@ -44,12 +44,9 @@ contract WitnetPriceFeeds "WitnetPriceFeeds: uncompliant request board" ); witnet = _wrb; - __settleDefaultRadonSLA(Witnet.RadonSLA({ + __settleDefaultRadonSLA(WitnetV2.RadonSLA({ numWitnesses: 5, - witnessCollateral: 15 * 10 ** 9, - witnessReward: 15 * 10 ** 7, - minerCommitRevealFee: 10 ** 7, - minConsensusPercentage: 51 + witnessingCollateralRatio: 10 })); } @@ -138,26 +135,16 @@ contract WitnetPriceFeeds function defaultRadonSLA() override public view - returns (Witnet.RadonSLA memory) + returns (WitnetV2.RadonSLA memory) { - return registry().lookupRadonSLA(__storage().defaultSlaHash); + return WitnetV2.toRadonSLA(__storage().packedDefaultSLA); } - function estimateUpdateBaseFee(bytes4, uint256 _evmGasPrice, uint256) + function estimateUpdateBaseFee(uint256 _evmGasPrice) virtual override public view returns (uint) { - // TODO: refactor when WRB.estimateBaseFee(bytes32,bytes32,uint256,uint256) is implemented. - return witnet.estimateBaseFee(_evmGasPrice, 32); - } - - function estimateUpdateBaseFee(bytes4, uint256 _evmGasPrice, uint256, bytes32) - virtual override - public view - returns (uint) - { - // TODO: refactor when WRB.estimateBaseFee(bytes32,bytes32,uint256,uint256) is implemented. return witnet.estimateBaseFee(_evmGasPrice, 32); } @@ -219,10 +206,7 @@ contract WitnetPriceFeeds __record.radHash != 0, "WitnetPriceFeeds: no RAD hash" ); - return registry().bytecodeOf( - __record.radHash, - __storage().defaultSlaHash - ); + return registry().bytecodeOf(__record.radHash); } function lookupRadHash(bytes4 feedId) @@ -252,19 +236,22 @@ contract WitnetPriceFeeds virtual override returns (uint256) { - return __requestUpdate(feedId, __storage().defaultSlaHash); + return __requestUpdate( + feedId, + WitnetV2.toRadonSLA(__storage().packedDefaultSLA) + ); } - function requestUpdate(bytes4 feedId, bytes32 _slaHash) + function requestUpdate(bytes4 feedId, WitnetV2.RadonSLA calldata updateSLA) public payable virtual override returns (uint256 _usedFunds) { require( - registry().lookupRadonSLA(_slaHash).equalOrGreaterThan(defaultRadonSLA()), + updateSLA.equalOrGreaterThan(defaultRadonSLA()), "WitnetPriceFeeds: unsecure update" ); - return __requestUpdate(feedId, _slaHash); + return __requestUpdate(feedId, updateSLA); } @@ -321,11 +308,11 @@ contract WitnetPriceFeeds emit DeletedFeed(msg.sender, feedId, caption); } - function settleDefaultRadonSLA(Witnet.RadonSLA memory sla) + function settleDefaultRadonSLA(WitnetV2.RadonSLA memory defaultSLA) override public onlyOwner { - __settleDefaultRadonSLA(sla); + __settleDefaultRadonSLA(defaultSLA); } function settleFeedRequest(string calldata caption, bytes32 radHash) @@ -607,24 +594,27 @@ contract WitnetPriceFeeds } } - function __requestUpdate(bytes4[] memory _deps, bytes32 slaHash) + function __requestUpdate(bytes4[] memory _deps, WitnetV2.RadonSLA memory sla) virtual internal returns (uint256 _usedFunds) { uint _partial = msg.value / _deps.length; for (uint _ix = 0; _ix < _deps.length; _ix ++) { - _usedFunds += this.requestUpdate{value: _partial}(_deps[_ix], slaHash); + _usedFunds += this.requestUpdate{value: _partial}(_deps[_ix], sla); } } - function __requestUpdate(bytes4 feedId, bytes32 _slaHash) + function __requestUpdate(bytes4 feedId, WitnetV2.RadonSLA memory querySLA) virtual internal returns (uint256 _usedFunds) { Record storage __feed = __records_(feedId); if (__feed.radHash != 0) { - _usedFunds = estimateUpdateBaseFee(feedId, tx.gasprice, 0, _slaHash); - require(msg.value>= _usedFunds, "WitnetPriceFeeds: reward too low"); + _usedFunds = estimateUpdateBaseFee(tx.gasprice); + require( + msg.value >= _usedFunds, + "WitnetPriceFeeds: reward too low" + ); uint _latestId = __feed.latestUpdateQueryId; Witnet.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); if (_latestStatus == Witnet.ResultStatus.Awaiting) { @@ -652,13 +642,24 @@ contract WitnetPriceFeeds try witnet.deleteQuery(_latestId) {} catch {} } // Post update request to the WRB: - _latestId = witnet.postRequest{value: _usedFunds}(__feed.radHash, _slaHash); + _latestId = witnet.postRequest{value: _usedFunds}( + __feed.radHash, + querySLA + ); // Update latest query id: __feed.latestUpdateQueryId = _latestId; - emit UpdatingFeed(msg.sender, feedId, _slaHash, _usedFunds); + emit UpdatingFeed( + msg.sender, + feedId, + querySLA.packed(), + _usedFunds + ); } } else if (__feed.solver != address(0)) { - _usedFunds = __requestUpdate(_depsOf(feedId), _slaHash); + _usedFunds = __requestUpdate( + _depsOf(feedId), + querySLA + ); } else { revert("WitnetPriceFeeds: unknown feed"); } @@ -668,7 +669,7 @@ contract WitnetPriceFeeds } } - function __settleDefaultRadonSLA(Witnet.RadonSLA memory sla) internal { - __storage().defaultSlaHash = registry().verifyRadonSLA(sla); + function __settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) internal { + __storage().packedDefaultSLA = WitnetV2.packed(sla); } } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 5d6d4d93c..14de02640 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -23,13 +23,15 @@ contract WitnetRandomness UsingWitnet { using Witnet for Witnet.Result; + using WitnetV2 for bytes32; + using WitnetV2 for WitnetV2.RadonSLA; bytes4 public immutable class = type(IWitnetRandomness).interfaceId; uint256 public override latestRandomizeBlock; WitnetRequest public immutable override witnetRandomnessRequest; bytes32 internal immutable __witnetRandomnessRadHash; - bytes32 internal __witnetRandomnessSlaHash; + bytes32 internal __witnetRandomnessPackedSLA; mapping (uint256 => RandomizeData) internal __randomize_; struct RandomizeData { @@ -74,7 +76,7 @@ contract WitnetRandomness witnetRandomnessRequest = WitnetRequest(_template.buildRequest(new string[][](_retrievals.length))); __witnetRandomnessRadHash = witnetRandomnessRequest.radHash(); } - __initializeWitnetRandomnessSlaHash(); + __initializeWitnetRandomnessSLA(); } /// Deploys and returns the address of a minimal proxy clone that replicates contract @@ -147,13 +149,14 @@ contract WitnetRandomness Ownable.transferOwnership(_newOwner); } - function settleWitnetRandomnessSLA(Witnet.RadonSLA memory _radonSLA) + function settleWitnetRandomnessSLA(WitnetV2.RadonSLA calldata sla) virtual override public onlyOwner returns (bytes32) { - return __settleWitnetRandomnessSLA(_radonSLA); + require(sla.isValid(), "WitnetRandomness: invalid SLA"); + return __settleWitnetRandomnessSLA(sla); } @@ -330,7 +333,7 @@ contract WitnetRandomness _usedFunds = _witnetEstimateBaseFee(tx.gasprice); uint _queryId = witnet().postRequest{value: _usedFunds}( __witnetRandomnessRadHash, - __witnetRandomnessSlaHash + __witnetRandomnessPackedSLA.toRadonSLA() ); // Keep Randomize data in storage: RandomizeData storage _data = __randomize_[block.number]; @@ -386,9 +389,9 @@ contract WitnetRandomness function witnetRandomnessSLA() virtual override external view - returns (Witnet.RadonSLA memory) + returns (WitnetV2.RadonSLA memory) { - return witnet().registry().lookupRadonSLA(__witnetRandomnessSlaHash); + return __witnetRandomnessPackedSLA.toRadonSLA(); } @@ -408,44 +411,6 @@ contract WitnetRandomness // ================================================================================================================ // --- INTERNAL FUNCTIONS ----------------------------------------------------------------------------------------- - /// @dev Common steps for both deterministic and non-deterministic cloning. - function __afterClone(address _instance) - virtual internal - returns (WitnetRandomness) - { - WitnetRandomness(_instance).initializeClone(hex""); - return WitnetRandomness(_instance); - } - - /// @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 internal - { - // settle ownership: - _transferOwnership(msg.sender); - // initialize default Witnet SLA parameters used for every randomness request; - __initializeWitnetRandomnessSlaHash(); - } - - function __initializeWitnetRandomnessSlaHash() virtual internal { - __settleWitnetRandomnessSLA(Witnet.RadonSLA({ - numWitnesses: 5, - minConsensusPercentage: 51, - witnessReward: 10 ** 8, - witnessCollateral: 10 ** 9, - minerCommitRevealFee: 10 ** 7 - })); - } - - function __settleWitnetRandomnessSLA(Witnet.RadonSLA memory _radonSLA) - internal - returns (bytes32 _radonSlaHash) - { - _radonSlaHash = witnet().registry().verifyRadonSLA(_radonSLA); - __witnetRandomnessSlaHash = _radonSlaHash; - } - /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. function _msbDeBruijn32(uint32 _v) internal pure @@ -486,4 +451,39 @@ contract WitnetRandomness ); } + /// @dev Common steps for both deterministic and non-deterministic cloning. + function __afterClone(address _instance) + virtual internal + returns (WitnetRandomness) + { + WitnetRandomness(_instance).initializeClone(hex""); + return WitnetRandomness(_instance); + } + + /// @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 internal + { + // settle ownership: + _transferOwnership(msg.sender); + // initialize default Witnet SLA parameters used for every randomness request; + __initializeWitnetRandomnessSLA(); + } + + function __initializeWitnetRandomnessSLA() virtual internal { + __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ + numWitnesses: 5, + witnessingCollateralRatio: 10 + })); + } + + function __settleWitnetRandomnessSLA(WitnetV2.RadonSLA memory sla) + internal + returns (bytes32 _packed) + { + _packed = sla.packed(); + __witnetRandomnessPackedSLA = _packed; + } + } diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 3f0704fcc..e456f60ac 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -149,78 +149,6 @@ contract WitnetBytecodesDefault return __database().radsBytecode[_radHash]; } - function bytecodeOf(bytes32 _radHash, bytes32 _slaHash) - external view - returns (bytes memory) - { - Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; - if (__sla.numWitnesses == 0) { - revert("WitnetBytecodesDefault: unknown Radon SLA"); - } - bytes memory _radBytecode = bytecodeOf(_radHash); - return abi.encodePacked( - WitnetEncodingLib.encode(uint64(_radBytecode.length), 0x0a), - _radBytecode, - __database().slasBytecode[_slaHash] - ); - } - - function hashOf( - bytes32[] calldata _retrievalsIds, - bytes32 _aggregatorId, - bytes32 _tallyId, - uint16 _resultMaxSize, - string[][] calldata _args - ) - external pure - virtual override - returns (bytes32) - { - return keccak256(abi.encode( - _retrievalsIds, - _aggregatorId, - _tallyId, - _resultMaxSize, - _args - )); - } - - function hashOf(bytes32 _radHash, bytes32 _slaHash) - public pure - virtual override - returns (bytes32) - { - return sha256(abi.encode( - _radHash, - _slaHash - )); - } - - function hashWeightWitsOf( - bytes32 _radHash, - bytes32 _slaHash - ) - external view - virtual override - returns (bytes32, uint32, uint256) - { - Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; - { - uint _numWitnesses = __sla.numWitnesses; - uint _weight = __database().radsBytecode[_radHash].length; - uint _witnessWits = __sla.witnessReward + 2 * __sla.minerCommitRevealFee; - return ( - hashOf(_radHash, _slaHash), - uint32(_weight - + _numWitnesses * 636 - // + (8 + 2 + 8 + 4 + 8) - + 100 - ), - _numWitnesses * _witnessWits - ); - } - } - function lookupDataProvider(uint256 _index) external view override @@ -371,25 +299,16 @@ contract WitnetBytecodesDefault rad.tally = __database().reducers[__request.tally]; } - function lookupRadonSLA(bytes32 _slaHash) - external view - override - returns (Witnet.RadonSLA memory sla) - { - sla = __database().slas[_slaHash]; - if (sla.numWitnesses == 0) { - revert UnknownRadonSLA(_slaHash); - } - } - - function lookupRadonSLAReward(bytes32 _slaHash) - public view - override - returns (uint) - { - Witnet.RadonSLA storage __sla = __database().slas[_slaHash]; - return __sla.numWitnesses * __sla.witnessReward; - } + // function lookupRadonSLA(bytes32 _slaHash) + // external view + // override + // returns (Witnet.RadonSLA memory sla) + // { + // sla = __database().slas[_slaHash]; + // if (sla.numWitnesses == 0) { + // revert UnknownRadonSLA(_slaHash); + // } + // } function verifyRadonRetrieval( Witnet.RadonDataRequestMethods _requestMethod, @@ -549,27 +468,6 @@ contract WitnetBytecodesDefault } } - function verifyRadonSLA(Witnet.RadonSLA calldata _sla) - external - virtual override - returns (bytes32 _slaHash) - { - // Build RadonSLA bytecode: - bytes memory _bytecode = _sla.encode(); - - // Add it to storage if not verified yet: - _slaHash = _witnetHash(_bytecode); - if (__database().slas[_slaHash].numWitnesses == 0) { - // validate SLA params: - _sla.validate(); - // save parameters and encoded bytecode in storage: - __database().slas[_slaHash] = _sla; - __database().slasBytecode[_slaHash] = _bytecode; - // emit event - emit NewSlaHash(_slaHash); - } - } - function totalDataProviders() external view override diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 9348e8ab0..ff43a3eef 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -32,10 +32,18 @@ abstract contract WitnetRequestBoardTrustableBase using Witnet for bytes; using Witnet for Witnet.Result; using WitnetCBOR for WitnetCBOR.CBOR; + using WitnetV2 for WitnetV2.RadonSLA; bytes4 public immutable override class = type(IWitnetRequestBoard).interfaceId; WitnetRequestFactory immutable public override factory; + modifier checkCallbackRecipient(address _addr) { + require( + _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)), + "WitnetRequestBoardTrustableBase: invalid callback recipient" + ); _; + } + modifier checkReward(uint256 _baseFee) { require( _getMsgValue() >= _baseFee, @@ -43,10 +51,10 @@ abstract contract WitnetRequestBoardTrustableBase ); _; } - modifier checkCallbackRecipient(address _addr) { + modifier checkSLA(WitnetV2.RadonSLA calldata sla) { require( - _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)), - "WitnetRequestBoardTrustableBase: invalid callback recipient" + WitnetV2.isValid(sla), + "WitnetRequestBoardTrustableBase: invalid SLA" ); _; } @@ -482,6 +490,29 @@ abstract contract WitnetRequestBoardTrustableBase delete __storage().queries[_queryId]; } + /// @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. + /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. + function estimateQueryEarnings(uint256 _queryId) + virtual override + external view + returns (int256 _earnings) + { + Witnet.Request storage __request = __seekQueryRequest(_queryId); + _earnings = int(__request.evmReward); + if (__request.maxCallbackGas > 0) { + _earnings -= int(estimateBaseFeeWithCallback( + _getGasPrice(), + __request.maxCallbackGas + )); + } else { + _earnings -= int(estimateBaseFee( + _getGasPrice(), + registry().lookupRadonRequestResultMaxSize(__request.radHash) + )); + } + } + /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// result to this request. @@ -509,16 +540,17 @@ abstract contract WitnetRequestBoardTrustableBase /// @param _querySLA The SLA param of the data request to be solved by Witnet. function postRequest( bytes32 _radHash, - Witnet.RadonSLA calldata _querySLA + WitnetV2.RadonSLA calldata _querySLA ) virtual override public payable checkReward(estimateBaseFee(_getGasPrice(), 32)) + checkSLA(_querySLA) returns (uint256 _queryId) { _queryId = __postRequest( _radHash, - registry().verifyRadonSLA(_querySLA) + _querySLA.packed() ); // Let observers know that a new request has been posted emit NewQuery(_queryId, _getMsgValue()); @@ -532,18 +564,19 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev The caller must be a contract implementing the IWitnetConsumer interface. function postRequestWithCallback( bytes32 _radHash, - Witnet.RadonSLA calldata _querySLA, + WitnetV2.RadonSLA calldata _querySLA, uint256 _queryMaxCallbackGas ) virtual override external payable checkCallbackRecipient(msg.sender) checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryMaxCallbackGas)) + checkSLA(_querySLA) returns (uint256 _queryId) { _queryId = __postRequest( _radHash, - registry().verifyRadonSLA(_querySLA) + _querySLA.packed() ); __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; emit NewQuery(_queryId, _getMsgValue()); @@ -562,8 +595,9 @@ abstract contract WitnetRequestBoardTrustableBase virtual override inStatus(_queryId, Witnet.QueryStatus.Posted) { - __seekQueryRequest(_queryId).reward += _getMsgValue(); - emit QueryRewardUpgraded(_queryId, __seekQueryRequest(_queryId).reward); + Witnet.Request storage __request = __seekQueryRequest(_queryId); + __request.evmReward += _getMsgValue(); + emit QueryRewardUpgraded(_queryId, __request.evmReward); } @@ -629,10 +663,7 @@ abstract contract WitnetRequestBoardTrustableBase if (__request._addr != address(0)) { _bytecode = IWitnetRequest(__request._addr).bytecode(); } else if (__request.radHash != bytes32(0)) { - _bytecode = registry().bytecodeOf( - __request.radHash, - __request.slaHash - ); + _bytecode = registry().bytecodeOf(__request.radHash); } } @@ -671,7 +702,7 @@ abstract contract WitnetRequestBoardTrustableBase inStatus(_queryId, Witnet.QueryStatus.Posted) returns (uint256) { - return __storage().queries[_queryId].request.reward; + return __seekQueryRequest(_queryId).evmReward; } @@ -684,7 +715,7 @@ abstract contract WitnetRequestBoardTrustableBase return ++ __storage().numQueries; } - function __postRequest(bytes32 _radHash, bytes32 _slaHash) + function __postRequest(bytes32 _radHash, bytes32 _slaPacked) virtual internal returns (uint256 _queryId) { @@ -692,8 +723,8 @@ abstract contract WitnetRequestBoardTrustableBase Witnet.Request storage __request = __seekQueryRequest(_queryId); { __request.radHash = _radHash; - __request.slaHash = _slaHash; - __request.reward = _getMsgValue(); + __request.slaPacked = _slaPacked; + __request.evmReward = _getMsgValue(); } } @@ -710,8 +741,8 @@ abstract contract WitnetRequestBoardTrustableBase // read and erase query report reward Witnet.Request storage __request = __query.request; - _evmReward = __request.reward; - __request.reward = 0; + _evmReward = __request.evmReward; + __request.evmReward = 0; // write report traceability data in storage // (could potentially be deleted from a callback method within same transaction) diff --git a/contracts/data/WitnetBytecodesData.sol b/contracts/data/WitnetBytecodesData.sol index 8d7da1371..624f5f4e3 100644 --- a/contracts/data/WitnetBytecodesData.sol +++ b/contracts/data/WitnetBytecodesData.sol @@ -44,13 +44,13 @@ abstract contract WitnetBytecodesData { mapping (bytes32 => Witnet.RadonReducer) reducers; mapping (bytes32 => Witnet.RadonRetrieval) retrievals; - mapping (bytes32 => Witnet.RadonSLA) slas; + mapping (bytes32 => Witnet.RadonSLA) _slas; mapping (bytes32 => DataRequest) requests; mapping (bytes32 => bytes32) rads; mapping (bytes32 => bytes) radsBytecode; - mapping (bytes32 => bytes) slasBytecode; + mapping (bytes32 => bytes) _slasBytecode; } constructor() { diff --git a/contracts/data/WitnetPriceFeedsData.sol b/contracts/data/WitnetPriceFeedsData.sol index 94e486d97..e1fc4b4ed 100644 --- a/contracts/data/WitnetPriceFeedsData.sol +++ b/contracts/data/WitnetPriceFeedsData.sol @@ -11,7 +11,7 @@ abstract contract WitnetPriceFeedsData { 0xe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ff; struct Storage { - bytes32 defaultSlaHash; + bytes32 packedDefaultSLA; bytes4[] ids; mapping (bytes4 => Record) records; } diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol index c4d209b63..c6e561bce 100644 --- a/contracts/interfaces/IWitnetRandomness.sol +++ b/contracts/interfaces/IWitnetRandomness.sol @@ -101,6 +101,6 @@ interface IWitnetRandomness { function witnetRandomnessRequest() external view returns (WitnetRequest); /// @notice Returns SLA parameters that are being used every time there's a new randomness request. - function witnetRandomnessSLA() external view returns (Witnet.RadonSLA memory); + function witnetRandomnessSLA() external view returns (WitnetV2.RadonSLA memory); } \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRandomnessAdmin.sol b/contracts/interfaces/IWitnetRandomnessAdmin.sol index 2dd7dd1b9..741eb6648 100644 --- a/contracts/interfaces/IWitnetRandomnessAdmin.sol +++ b/contracts/interfaces/IWitnetRandomnessAdmin.sol @@ -9,5 +9,5 @@ interface IWitnetRandomnessAdmin { function acceptOwnership() external; function pendingOwner() external returns (address); function transferOwnership(address) external; - function settleWitnetRandomnessSLA(Witnet.RadonSLA calldata) external returns (bytes32); + function settleWitnetRandomnessSLA(WitnetV2.RadonSLA calldata) external returns (bytes32); } \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 70446cc96..164c9c1c2 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -1,8 +1,7 @@ // SPDX-License-Identifier: MIT - pragma solidity >=0.7.0 <0.9.0; -import "../libs/Witnet.sol"; +import "../libs/WitnetV2.sol"; interface IWitnetRequestBoard { @@ -84,8 +83,8 @@ interface IWitnetRequestBoard { /// @dev The result to the query will be saved into the WitnetRequestBoard storage. /// @param radHash 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 radHash, Witnet.RadonSLA calldata querySLA) external payable returns (uint256 _queryId); + /// @return queryId Unique query identifier. + function postRequest(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 queryId); /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided @@ -95,12 +94,12 @@ interface IWitnetRequestBoard { /// @param radHash 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. - /// @return _queryId Unique query identifier. - function postRequestWithCallback(bytes32 radHash, Witnet.RadonSLA calldata querySLA, uint256 maxCallbackGas) external payable returns (uint256 _queryId); + /// @return queryId Unique query identifier. + function postRequestWithCallback(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA, uint256 maxCallbackGas) external payable returns (uint256 queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. - /// @param _queryId The unique query identifier. - function upgradeQueryReward(uint256 _queryId) external payable; + /// @param queryId The unique query identifier. + function upgradeQueryReward(uint256 queryId) external payable; /// =============================================================================================================== @@ -134,15 +133,21 @@ interface IWitnetRequestBoard { function getQueryResponse(uint256 _queryId) external view returns (Witnet.Response memory); /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev Fails if the `queryId` is not valid or, if it has already been /// @dev reported, or deleted. - /// @param _queryId The unique query identifier. - function getQueryReward(uint256 _queryId) external view returns (uint256); + /// @param queryId The unique query identifier. + function getQueryReward(uint256 queryId) external view returns (uint256); - /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function getQueryResponseResult(uint256 _queryId) external view returns (Witnet.Result memory); + /// =============================================================================================================== + /// --- Deprecating methods --------------------------------------------------------------------------------------- + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// @notice result to this request. + /// @dev Fails if, provided reward is too low. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @param slaHash The SLA hash of the data request to be solved by Witnet. + /// @return queryId Unique query identifier. + function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 queryId); } diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 685735b40..06527664c 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -8,30 +8,13 @@ interface IWitnetBytecodes { error UnknownRadonRetrieval(bytes32 hash); error UnknownRadonReducer(bytes32 hash); error UnknownRadonRequest(bytes32 hash); - error UnknownRadonSLA(bytes32 hash); event NewDataProvider(uint256 index); event NewRadonRetrievalHash(bytes32 hash); event NewRadonReducerHash(bytes32 hash); event NewRadHash(bytes32 hash); - event NewSlaHash(bytes32 hash); function bytecodeOf(bytes32 radHash) external view returns (bytes memory); - function bytecodeOf(bytes32 radHash, bytes32 slahHash) external view returns (bytes memory); - - function hashOf( - bytes32[] calldata sources, - bytes32 aggregator, - bytes32 tally, - uint16 resultMaxSize, - string[][] calldata args - ) external pure returns (bytes32); - function hashOf(bytes32 radHash, bytes32 slaHash) external pure returns (bytes32 drQueryHash); - function hashWeightWitsOf(bytes32 radHash, bytes32 slaHash) external view returns ( - bytes32 drQueryHash, - uint32 drQueryWeight, - uint256 drQueryWits - ); function lookupDataProvider(uint256 index) external view returns (string memory, uint); function lookupDataProviderIndex(string calldata authority) external view returns (uint); @@ -51,8 +34,6 @@ interface IWitnetBytecodes { function lookupRadonRequestTally(bytes32 radHash) external view returns (Witnet.RadonReducer memory); function lookupRadonRAD(bytes32 radHash) external view returns (Witnet.RadonRAD memory); - function lookupRadonSLA(bytes32 slaHash) external view returns (Witnet.RadonSLA memory); - function lookupRadonSLAReward(bytes32 slaHash) external view returns (uint); function verifyRadonRetrieval( Witnet.RadonDataRequestMethods requestMethod, @@ -72,10 +53,12 @@ interface IWitnetBytecodes { uint16 resultMaxSize, string[][] calldata args ) external returns (bytes32 radHash); - - function verifyRadonSLA(Witnet.RadonSLA calldata sla) - external returns (bytes32 slaHash); function totalDataProviders() external view returns (uint); + + /// =============================================================================================================== + /// --- Deprecating methods --------------------------------------------------------------------------------------- + + // function lookupRadonSLA(bytes32 slaHash) external view returns (Witnet.RadonSLA memory); } \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 09ae8df0b..59807c4b8 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -19,10 +19,8 @@ interface IWitnetFeeds { function registry() external view returns (WitnetBytecodes); function witnet() external view returns (WitnetRequestBoard); - function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); - - function estimateUpdateBaseFee(bytes4 feedId, uint256 evmGasPrice, uint256 witEvmPrice) external view returns (uint); - function estimateUpdateBaseFee(bytes4 feedId, uint256 evmGasPrice, uint256 witEvmPrice, bytes32 slaHash) external view returns (uint); + function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); + function estimateUpdateBaseFee(uint256 evmGasPrice) external view returns (uint); function latestResponse(bytes4 feedId) external view returns (Witnet.Response memory); function latestResult(bytes4 feedId) external view returns (Witnet.Result memory); @@ -38,5 +36,5 @@ interface IWitnetFeeds { function lookupRetrievals(bytes4 feedId) external view returns (Witnet.RadonRetrieval[] memory); function requestUpdate(bytes4 feedId) external payable returns (uint256 usedFunds); - function requestUpdate(bytes4 feedId, bytes32 slaHash) external payable returns (uint256 usedFunds); + function requestUpdate(bytes4 feedId, WitnetV2.RadonSLA calldata updateSLA) external payable returns (uint256 usedFunds); } \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol index 39e55b4cb..9388cddaa 100644 --- a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol +++ b/contracts/interfaces/V2/IWitnetFeedsAdmin.sol @@ -10,7 +10,7 @@ interface IWitnetFeedsAdmin { function deleteFeed(string calldata caption) external; function owner() external view returns (address); function pendingOwner() external returns (address); - function settleDefaultRadonSLA(Witnet.RadonSLA calldata) external; + function settleDefaultRadonSLA(WitnetV2.RadonSLA calldata) external; function settleFeedRequest(string calldata caption, bytes32 radHash) external; function settleFeedRequest(string calldata caption, WitnetRequest request) external; function settleFeedRequest(string calldata caption, WitnetRequestTemplate template, string[][] calldata) external; diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 7f64b1be4..6758615b5 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -28,11 +28,12 @@ library Witnet { /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { - address _addr; // Deprecating: Address of the IWitnetRequest contract containing Witnet data request raw bytecode. - bytes32 slaHash; // Radon SLA hash of the Witnet data request. + address _addr; // Deprecating: Formerly used as address of the (deprecated) IWitnetRequest contract. + bytes32 slaPacked; // Radon SLA of the Witnet data request (packed). bytes32 radHash; // Radon radHash of the Witnet data request. - uint256 _gasprice; // Deprecating: Minimum gas price the DR resolver should pay on the solving tx. - uint256 reward; // Escrowed reward to be paid to the DR resolver. + uint256 _gasprice; // Deprecating: Formerly used as minimum gas price the DR resolver should pay on the solving tx. + uint256 evmReward; // Escrowed reward to be paid to the DR resolver. + uint256 maxCallbackGas; // Maximum gas to be spent when reporting the data request result. } /// Data kept in EVM-storage containing Witnet-provided response metadata and result. @@ -275,7 +276,6 @@ library Witnet { uint64 minerCommitRevealFee; } - /// @notice Returns `true` if all witnessing parameters in `b` have same /// @notice value or greater than the ones in `a`. function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) @@ -302,6 +302,33 @@ library Witnet { ); } + function packed(RadonSLA memory sla) internal pure returns (bytes32) { + return bytes32( + uint(sla.witnessReward) + | sla.witnessCollateral << 64 + | sla.minerCommitRevealFee << 128 + | sla.numWitnesses << 248 + | sla.minConsensusPercentage << 232 + ); + } + + function toRadonSLA(bytes32 _packed) internal pure returns (RadonSLA memory) { + return RadonSLA({ + numWitnesses: uint8(uint(_packed >> 248)), + minConsensusPercentage: uint8(uint(_packed >> 232) & 0xff), + witnessReward: uint64(uint(_packed) & 0xffffffffffffffff), + witnessCollateral: uint64(uint(_packed >> 64) & 0xffffffffffffffff), + minerCommitRevealFee: uint64(uint(_packed >> 128) & 0xffffffffffffffff) + }); + } + + function totalWitnessingReward(Witnet.RadonSLA memory sla) + internal pure returns (uint64) + { + return sla.witnessReward * sla.numWitnesses; + } + + /// =============================================================================================================== /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index ecfff6046..20a692bd2 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -6,76 +6,77 @@ import "./Witnet.sol"; library WitnetV2 { + uint256 internal constant _WITNET_GENESIS_TIMESTAMP = 1602666045; + uint256 internal constant _WITNET_GENESIS_EPOCH_SECONDS = 45; - function toEpoch(uint _timestamp) internal pure returns (uint) { - return 1 + (_timestamp - 11111) / 15; - } + uint256 internal constant _WITNET_2_0_EPOCH = 1234567; + uint256 internal constant _WITNET_2_0_EPOCH_SECONDS = 30; + uint256 internal constant _WITNET_2_0_TIMESTAMP = _WITNET_GENESIS_TIMESTAMP + _WITNET_2_0_EPOCH * _WITNET_GENESIS_EPOCH_SECONDS; - function toTimestamp(uint _epoch) internal pure returns (uint) { - return 111111+ _epoch * 15; + struct RadonSLA { + uint8 numWitnesses; + uint8 witnessingCollateralRatio; } - struct Beacon { - uint256 escrow; - uint256 evmBlock; - uint256 gasprice; - address relayer; - address slasher; - uint256 superblockIndex; - uint256 superblockRoot; + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) + internal pure returns (bool) + { + return ( + a.numWitnesses * a.witnessingCollateralRatio + >= b.numWitnesses * b.witnessingCollateralRatio + ); } - - enum BeaconStatus { - Idle + + function isValid(RadonSLA calldata sla) internal pure returns (bool) { + return ( + sla.numWitnesses > 0 && sla.numWitnesses <= 127 + && sla.witnessingCollateralRatio > 0 && sla.witnessingCollateralRatio <= 127 + ); } - struct Block { - bytes32 blockHash; - bytes32 drTxsRoot; - bytes32 drTallyTxsRoot; - } - - enum BlockStatus { - Idle + function packed(RadonSLA memory sla) internal pure returns (bytes32) { + return bytes32( + uint(sla.numWitnesses) << 248 + | uint(sla.witnessingCollateralRatio) << 240 + ); } - struct DrPost { - uint256 block; - DrPostStatus status; - DrPostRequest request; - DrPostResponse response; - } - - /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. - struct DrPostRequest { - uint256 epoch; - address requester; - address reporter; - bytes32 radHash; - bytes32 slaHash; - uint256 weiReward; + function toRadonSLA(bytes32 _packed) + internal pure returns (RadonSLA memory) + { + return RadonSLA({ + numWitnesses: uint8(uint(_packed >> 248)), + witnessingCollateralRatio: uint8(uint(_packed >> 240)) + }); } - /// Data kept in EVM-storage containing Witnet-provided response metadata and result. - struct DrPostResponse { - address disputer; - address reporter; - uint256 escrowed; - uint256 drCommitTxEpoch; - uint256 drTallyTxEpoch; - bytes32 drTallyTxHash; - bytes drTallyResultCborBytes; + function timestampToWitnetEpoch(uint _timestamp) internal pure returns (uint) { + if (_timestamp > _WITNET_2_0_TIMESTAMP ) { + return ( + _WITNET_2_0_EPOCH + ( + _timestamp - _WITNET_2_0_TIMESTAMP + ) / _WITNET_2_0_EPOCH_SECONDS + ); + } else if (_timestamp > _WITNET_GENESIS_TIMESTAMP) { + return ( + 1 + ( + _timestamp - _WITNET_GENESIS_TIMESTAMP + ) / _WITNET_GENESIS_EPOCH_SECONDS + ); + } else { + return 0; + } } - enum DrPostStatus { - Void, - Deleted, - Expired, - Posted, - Disputed, - Reported, - Finalized, - Accepted, - Rejected + function witnetEpochToTimestamp(uint _epoch) internal pure returns (uint) { + if (_epoch >= _WITNET_2_0_EPOCH) { + return ( + _WITNET_2_0_TIMESTAMP + ( + _epoch - _WITNET_2_0_EPOCH + ) * _WITNET_2_0_EPOCH_SECONDS + ); + } else { + return (_WITNET_GENESIS_TIMESTAMP + _epoch * _WITNET_GENESIS_EPOCH_SECONDS); + } } } \ No newline at end of file From dc79d526c8d88574355dc2c07474f2ebb08e1346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 20:16:40 +0100 Subject: [PATCH 049/149] feat: implement posting of RAD raw bytecodes --- .../core/defaults/WitnetBytecodesDefault.sol | 5 + .../WitnetRequestBoardTrustableBase.sol | 80 ++++++++-- contracts/interfaces/IWitnetRequestBoard.sol | 142 +++++++++++------- contracts/interfaces/V2/IWitnetBytecodes.sol | 1 + 4 files changed, 165 insertions(+), 63 deletions(-) diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index e456f60ac..3a9ec6e4e 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -149,6 +149,11 @@ contract WitnetBytecodesDefault return __database().radsBytecode[_radHash]; } + function hashOf(bytes calldata _radBytecode) external pure override returns (bytes32) { + // todo: validate correctness of _radBytecode + return _witnetHash(_radBytecode); + } + function lookupDataProvider(uint256 _index) external view override diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index ff43a3eef..c215c19b0 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -531,13 +531,14 @@ abstract contract WitnetRequestBoardTrustableBase emit NewQuery(_queryId, _getMsgValue()); } - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @param _radHash The RAD hash of the data tequest to be solved by Witnet. - /// @param _querySLA The SLA param of the data request to be solved by Witnet. + /// @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-provided result to this request. + /// @dev Fails if provided reward is too low. + /// @dev The result to the query will be saved into the WitnetRequestBoard storage. + /// @param _radHash 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 _radHash, WitnetV2.RadonSLA calldata _querySLA @@ -555,13 +556,42 @@ abstract contract WitnetRequestBoardTrustableBase // Let observers know that a new request has been posted emit NewQuery(_queryId, _getMsgValue()); } + + /// @notice Requests the execution of the given Witnet Data Request bytecode, 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-provided result to this request. + /// @dev Fails if provided reward is too low. + /// @dev The result to the query will be saved into the WitnetRequestBoard storage. + /// @param _radBytecode The raw bytecode of the Witnet Data Request to be solved by Witnet. + /// @param _querySLA The data query SLA to be fulfilled by the Witnet blockchain. + /// @return _queryId A unique query identifier. + function postRequest( + bytes calldata _radBytecode, + WitnetV2.RadonSLA calldata _querySLA + ) + virtual override + public payable + checkReward(estimateBaseFee(_getGasPrice(), 32)) + checkSLA(_querySLA) + returns (uint256 _queryId) + { + _queryId = __postRequest( + registry().hashOf(_radBytecode), + _querySLA.packed() + ); + // Let observers know that a new request has been posted + emit NewQueryWithBytecode(_queryId, _getMsgValue(), _radBytecode); } - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. + /// @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-provided result to this request. /// @dev Fails if, provided reward is too low. /// @dev The caller must be a contract implementing the IWitnetConsumer interface. + /// @param _radHash 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 _queryMaxCallbackGas Maximum gas to be spent when reporting the data request result. + /// @return _queryId Unique query identifier. function postRequestWithCallback( bytes32 _radHash, WitnetV2.RadonSLA calldata _querySLA, @@ -581,6 +611,35 @@ abstract contract WitnetRequestBoardTrustableBase __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; emit NewQuery(_queryId, _getMsgValue()); } + + /// @notice Requests the execution of the given Witnet Data Request bytecode, in expectation that it will be + /// @notice relayed and solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board + /// @notice that will be transferred to the reporter who relays back the Witnet-provided result to this request. + /// @dev Fails if, provided reward is too low. + /// @dev The caller must be a contract implementing the IWitnetConsumer interface. + /// @param _radBytecode 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 _queryMaxCallbackGas Maximum gas to be spent when reporting the data request result. + /// @return _queryId A unique query identifier. + function postRequestWithCallback( + bytes calldata _radBytecode, + WitnetV2.RadonSLA calldata _querySLA, + uint256 _queryMaxCallbackGas + ) + virtual override + external payable + checkCallbackRecipient(msg.sender) + checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryMaxCallbackGas)) + checkSLA(_querySLA) + returns (uint256 _queryId) + { + _queryId = __postRequest( + registry().hashOf(_radBytecode), + _querySLA.packed() + ); + __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; + emit NewQueryWithBytecode(_queryId, _getMsgValue(), _radBytecode); + } /// Increments the reward of a previously posted request by adding the transaction value to it. /// @dev Updates request `gasPrice` in case this method is called with a higher @@ -843,4 +902,5 @@ abstract contract WitnetRequestBoardTrustableBase } emit ReportersSet(_reporters); } + } \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 164c9c1c2..c06aa1972 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -8,9 +8,9 @@ interface IWitnetRequestBoard { /// Emitted every time a new query containing some verified data request is posted to the WRB. event NewQuery(uint256 indexed id, uint256 evmReward); - /// Emitted when a Witnet-solved result is reported to the WRB. - event PostedResult(uint256 indexed queryId, address from); - + /// Emitted every time a new query containing non-verified data request is posted to the WRB. + event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); + /// Emitted when the reward of some not-yet reported query is upgraded. event QueryRewardUpgraded(uint256 indexed id, uint256 evmReward); @@ -27,75 +27,106 @@ interface IWitnetRequestBoard { /// --- Requester interface --------------------------------------------------------------------------------------- /// @notice Delete query without further ado. - /// @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 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function burnQuery(uint256 _queryId) external; + /// @param queryId The unique query identifier. + function burnQuery(uint256 queryId) external; /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param _queryId The unique query identifier. - function checkResultError(uint256 _queryId) external view returns (Witnet.ResultError memory); + /// @param queryId The unique query identifier. + function checkResultError(uint256 queryId) external view returns (Witnet.ResultError memory); /// @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 checkResultStatus(uint256 _queryId) external view returns (Witnet.ResultStatus); + /// @param queryId The unique query identifier. + function checkResultStatus(uint256 queryId) external view returns (Witnet.ResultStatus); /// @notice Returns query's result traceability data - /// @param _queryId The unique query identifier. + /// @param queryId The unique query identifier. /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. - function checkResultTraceability(uint256 _queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); + function checkResultTraceability(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB 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 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function deleteQuery(uint256 _queryId) external returns (Witnet.Response memory); + /// @param queryId The unique query identifier. + function deleteQuery(uint256 queryId) external returns (Witnet.Response memory); /// @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, uint256 _resultMaxSize) external view returns (uint256); + /// @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, uint256 resultMaxSize) external view returns (uint256); /// @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 _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) external view returns (uint256); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. - /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaHash The SLA hash of the data request to be solved by Witnet. - /// @return _queryId Unique query identifier. - function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 _queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. + /// @param gasPrice Expected gas price to pay upon posting the data request. + /// @param maxCallbackGas Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 gasPrice, uint256 maxCallbackGas) external view returns (uint256); + + /// @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. + /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. + function estimateQueryEarnings(uint256 queryId) external view returns (int256); + + /// @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-provided result to this request. /// @dev Fails if provided reward is too low. /// @dev The result to the query will be saved into the WitnetRequestBoard storage. /// @param radHash 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 radHash, WitnetV2.RadonSLA calldata querySLA) external payable returns (uint256 queryId); - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. + function postRequest( + bytes32 radHash, + WitnetV2.RadonSLA calldata querySLA + ) external payable returns (uint256 queryId); + + /// @notice Requests the execution of the given Witnet Data Request bytecode, 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-provided result to this request. + /// @dev Fails if provided reward is too low. + /// @dev The result to the query will be saved into the WitnetRequestBoard storage. + /// @param radBytecode The raw bytecode of the Witnet Data Request to be solved by Witnet. + /// @param querySLA The data query SLA to be fulfilled by the Witnet blockchain. + /// @return A unique query identifier. + function postRequest( + bytes calldata radBytecode, + WitnetV2.RadonSLA calldata querySLA + ) external payable returns (uint256); + + /// @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-provided result to this request. /// @dev Fails if, provided reward is too low. /// @dev The caller must be a contract implementing the IWitnetConsumer interface. /// @param radHash 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. /// @return queryId Unique query identifier. - function postRequestWithCallback(bytes32 radHash, WitnetV2.RadonSLA calldata querySLA, uint256 maxCallbackGas) external payable returns (uint256 queryId); + function postRequestWithCallback( + bytes32 radHash, + WitnetV2.RadonSLA calldata querySLA, + uint256 maxCallbackGas + ) external payable returns (uint256 queryId); + + /// @notice Requests the execution of the given Witnet Data Request bytecode, in expectation that it will be + /// @notice relayed and solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board + /// @notice that will be transferred to the reporter who relays back the Witnet-provided result to this request. + /// @dev Fails if, provided reward is too low. + /// @dev The caller must be a contract implementing the IWitnetConsumer interface. + /// @param radBytecode 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. + /// @return A unique query identifier. + function postRequestWithCallback( + bytes calldata radBytecode, + WitnetV2.RadonSLA calldata querySLA, + uint256 maxCallbackGas + ) external payable returns (uint256); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param queryId The unique query identifier. @@ -109,28 +140,33 @@ interface IWitnetRequestBoard { function getNextQueryId() external view returns (uint256); /// @notice Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 _queryId) external view returns (Witnet.Query memory); + function getQueryData(uint256 queryId) external view returns (Witnet.Query memory); /// @notice Gets current status of given query. - function getQueryStatus(uint256 _queryId) external view returns (Witnet.QueryStatus); + function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); /// @notice Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `_queryId` is not valid or, if it has already been reported + /// @dev Fails if the `queryId` is not valid or, if it has already been reported /// @dev or deleted. - /// @param _queryId The unique identifier of a previously posted query. - function getQueryRequest(uint256 _queryId) external view returns (Witnet.Request memory); + /// @param queryId The unique identifier of a previously posted query. + function getQueryRequest(uint256 queryId) external view returns (Witnet.Request memory); /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode + /// @dev Fails if the `queryId` is not valid, or if the related script bytecode /// @dev got changed after being posted. Returns empty array once it gets reported, /// @dev or deleted. - /// @param _queryId The unique query identifier. - function getQueryRequestBytecode(uint256 _queryId) external view returns (bytes memory); + /// @param queryId The unique query identifier. + function getQueryRequestBytecode(uint256 queryId) external view returns (bytes memory); /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier. - function getQueryResponse(uint256 _queryId) external view returns (Witnet.Response memory); + /// @dev Fails if the `queryId` is not in 'Reported' status. + /// @param queryId The unique query identifier. + function getQueryResponse(uint256 queryId) external view returns (Witnet.Response memory); + + /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. + /// @dev Fails if the `queryId` is not in 'Reported' status. + /// @param queryId The unique query identifier. + function getQueryResponseResult(uint256 queryId) external view returns (Witnet.Result memory); /// @notice Retrieves the reward currently set for the referred query. /// @dev Fails if the `queryId` is not valid or, if it has already been @@ -141,7 +177,7 @@ interface IWitnetRequestBoard { /// =============================================================================================================== /// --- Deprecating methods --------------------------------------------------------------------------------------- - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet blockchain. /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// @notice result to this request. /// @dev Fails if, provided reward is too low. diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index 06527664c..d33c22b98 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -15,6 +15,7 @@ interface IWitnetBytecodes { event NewRadHash(bytes32 hash); function bytecodeOf(bytes32 radHash) external view returns (bytes memory); + function hashOf(bytes calldata) external view returns (bytes32); function lookupDataProvider(uint256 index) external view returns (string memory, uint); function lookupDataProviderIndex(string calldata authority) external view returns (uint); From e7370028705c04e63c3cbaa1ff2f4e8f088cf16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 20:29:23 +0100 Subject: [PATCH 050/149] refactor: postpone dispute of queries to v2.1+ --- contracts/interfaces/V2/IWitnetConsumer.sol | 6 ------ 1 file changed, 6 deletions(-) diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index af065fec3..dc60dd49e 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -33,12 +33,6 @@ interface IWitnetConsumer { WitnetCBOR.CBOR calldata errorArgs ) external; - /// @notice Method to be called from the WitnetRequestBoard contract as soon as some dispute - /// @notice arises concerning the given Witnet `queryId`. - /// @param queryId The unique identifier of the Witnet query being disputed. - /// @param resolutionBlock The EVM block number at which the query resolution is expected to be final. - function reportWitnetQueryDispute(uint256 queryId, uint256 resolutionBlock) external; - /// @notice Determines if Witnet queries can be reported from given address. /// @dev In practice, must only be true on the WitnetRequestBoard address that's being used by /// @dev the WitnetConsumer to post queries. From f83f37f748be712153f4e741ff8ebf362f47d1e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 20:30:09 +0100 Subject: [PATCH 051/149] chore: polish contract/apps --- contracts/apps/UsingWitnet.sol | 13 +++++ contracts/apps/WitnetConsumer.sol | 52 ++++++++++++++++--- contracts/apps/WitnetRequestConsumer.sol | 47 ++++++----------- .../apps/WitnetRequestTemplateConsumer.sol | 48 ++++++----------- contracts/interfaces/V2/IWitnetConsumer.sol | 4 +- 5 files changed, 94 insertions(+), 70 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index d5b3d28dd..f6c08980f 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -99,4 +99,17 @@ abstract contract UsingWitnet { _witnetQuerySLA ); } + + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes calldata _witnetRadBytecode, + WitnetV2.RadonSLA calldata _witnetQuerySLA + ) + virtual internal returns (uint256) + { + return __witnet.postRequest{value: _witnetEvmReward}( + _witnetRadBytecode, + _witnetQuerySLA + ); + } } diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 3704ed996..862394752 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -8,7 +8,9 @@ abstract contract WitnetConsumer is IWitnetConsumer, UsingWitnet -{ +{ + uint256 private immutable __witnetReportCallbackMaxGas; + modifier burnQueryAfterReport(uint256 _witnetQueryId) { _; __witnet.burnQuery(_witnetQueryId); @@ -19,26 +21,64 @@ abstract contract WitnetConsumer _; } + constructor (uint256 _maxCallbackGas) { + __witnetReportCallbackMaxGas = _maxCallbackGas; + } + + + /// =============================================================================================================== + /// --- Base implementation of IWitnetConsumer -------------------------------------------------------------------- + + function reportableFrom(address _from) virtual override external view returns (bool) { + return _from == address(__witnet); + } + + + /// =============================================================================================================== + /// --- WitnetConsumer virtual methods ---------------------------------------------------------------------------- + function _witnetEstimateBaseFee() - virtual internal view + virtual internal view returns (uint256) { return _witnetEstimateBaseFeeWithCallback(_witnetReportCallbackMaxGas()); } + function _witnetReportCallbackMaxGas() + virtual internal view + returns (uint256) + { + return __witnetReportCallbackMaxGas; + } + function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA, - bytes32 _witnetRadHash + bytes32 _witnetRadHash, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) virtual override internal returns (uint256) { return __witnet.postRequestWithCallback{value: _witnetEvmReward}( _witnetRadHash, - _witnetQuerySLA + _witnetQuerySLA, + __witnetReportCallbackMaxGas + ); + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes calldata _witnetRadBytecode, + WitnetV2.RadonSLA calldata _witnetQuerySLA + ) + virtual override internal + returns (uint256) + { + return __witnet.postRequestWithCallback{value: _witnetEvmReward}( + _witnetRadBytecode, + _witnetQuerySLA, + __witnetReportCallbackMaxGas ); } - function _witnetReportCallbackMaxGas() virtual internal view returns (uint256); } diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index 369f054c7..ca7b3431b 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -11,17 +11,15 @@ abstract contract WitnetRequestConsumer { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - - uint256 private immutable __witnetReportCallbackMaxGas; constructor(WitnetRequest _witnetRequest, uint256 _maxCallbackGas) UsingWitnetRequest(_witnetRequest) + WitnetConsumer(_maxCallbackGas) { require( _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequest._witnetEstimateBaseFee(), "WitnetRequestConsumer: max callback gas too low" ); - __witnetReportCallbackMaxGas = _maxCallbackGas; } function _witnetEstimateBaseFee() @@ -32,46 +30,33 @@ abstract contract WitnetRequestConsumer return WitnetConsumer._witnetEstimateBaseFee(); } - function _witnetReportCallbackMaxGas() virtual override internal view returns (uint256) { - return __witnetReportCallbackMaxGas; - } - function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA, - bytes32 _witnetRadHash + bytes32 _witnetRadHash, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) { return WitnetConsumer.__witnetRequestData( _witnetEvmReward, - _witnetQuerySLA, - _witnetRadHash + _witnetRadHash, + _witnetQuerySLA ); } - function reportWitnetQueryResult( - uint256 _witnetQueryId, - WitnetCBOR.CBOR calldata _value - ) - virtual override - external - onlyFromWitnet - // optional: burnQueryAfterReport(_witnetQueryId) - { - // TODO ... - } - - function reportWitnetQueryError( - uint256 _witnetQueryId, - Witnet.ResultErrorCodes, - uint256 + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes calldata _witnetRadBytecode, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) - virtual override external - onlyFromWitnet - // optional: burnQueryAfterReport(_witnetQueryId) + virtual override(UsingWitnet, WitnetConsumer) internal + returns (uint256) { - // TODO ... + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetRadBytecode, + _witnetQuerySLA + ); } } diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index e66fd0041..b08b1cc1f 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -11,17 +11,16 @@ abstract contract WitnetRequestTemplateConsumer { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - - uint256 private immutable __witnetReportCallbackMaxGas; constructor(WitnetRequestTemplate _requestTemplate, uint256 _maxCallbackGas) UsingWitnetRequestTemplate(_requestTemplate) + WitnetConsumer(_maxCallbackGas) { require( _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), "WitnetRequestTemplateConsumer: max callback gas too low" ); - __witnetReportCallbackMaxGas = _maxCallbackGas; + } function _witnetEstimateBaseFee() @@ -32,46 +31,33 @@ abstract contract WitnetRequestTemplateConsumer return WitnetConsumer._witnetEstimateBaseFee(); } - function _witnetReportCallbackMaxGas() virtual override internal view returns (uint256) { - return __witnetReportCallbackMaxGas; - } - function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA, - bytes32 _witnetRadHash + bytes32 _witnetRadHash, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) { return WitnetConsumer.__witnetRequestData( _witnetEvmReward, - _witnetQuerySLA, - _witnetRadHash + _witnetRadHash, + _witnetQuerySLA ); } - function reportWitnetQueryResult( - uint256 _witnetQueryId, - WitnetCBOR.CBOR calldata _value - ) - virtual override - external - onlyFromWitnet - // optional: burnQueryAfterReport(_witnetQueryId) - { - // TODO ... - } - - function reportWitnetQueryError( - uint256 _witnetQueryId, - Witnet.ResultErrorCodes, - uint256 + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes calldata _witnetRadBytecode, + WitnetV2.RadonSLA calldata _witnetQuerySLA ) - virtual override external - onlyFromWitnet - // optional: burnQueryAfterReport(_witnetQueryId) + virtual override(UsingWitnet, WitnetConsumer) internal + returns (uint256) { - // TODO ... + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetRadBytecode, + _witnetQuerySLA + ); } } diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index dc60dd49e..c1b314c58 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -10,7 +10,7 @@ interface IWitnetConsumer { /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` - /// @dev and `witnetDrCommitTimestamp`), or the finality status, of the result being reported. + /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. /// @param queryId The unique identifier of the Witnet query being reported. /// @param cborValue The CBOR-encoded resulting value of the Witnet query being reported. function reportWitnetQueryResult( @@ -23,7 +23,7 @@ interface IWitnetConsumer { /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` - /// @dev and `witnetDrCommitTimestamp`), or the finality status, of the result being reported. + /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. /// @param queryId The unique identifier of the Witnet query being reported. /// @param errorCode The error code enum identifying the error produced during resolution on the Witnet blockchain. /// @param errorArgs Error arguments, if any. An empty buffer is to be passed if no error arguments apply. From 77bee1d0bef24133f5a6f6de4239c14133ebf685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 20:39:19 +0100 Subject: [PATCH 052/149] refactor: Witnet*.class() -> Witnet*.specs() --- contracts/WitnetBytecodes.sol | 2 +- contracts/WitnetRequestBoard.sol | 2 +- contracts/WitnetRequestFactory.sol | 2 +- contracts/WitnetRequestTemplate.sol | 2 +- contracts/apps/UsingWitnet.sol | 2 +- contracts/apps/UsingWitnetRequest.sol | 2 +- contracts/apps/UsingWitnetRequestTemplate.sol | 2 +- contracts/apps/WitnetPriceFeeds.sol | 4 ++-- contracts/apps/WitnetRandomness.sol | 4 ++-- contracts/core/defaults/WitnetBytecodesDefault.sol | 2 +- contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- contracts/core/defaults/WitnetRequestFactoryDefault.sol | 4 ++-- contracts/interfaces/V2/IWitnetPriceSolver.sol | 2 +- contracts/libs/WitnetPriceFeedsLib.sol | 2 +- 14 files changed, 18 insertions(+), 18 deletions(-) diff --git a/contracts/WitnetBytecodes.sol b/contracts/WitnetBytecodes.sol index f96fc4c10..0a79a6271 100644 --- a/contracts/WitnetBytecodes.sol +++ b/contracts/WitnetBytecodes.sol @@ -9,5 +9,5 @@ abstract contract WitnetBytecodes is IWitnetBytecodes { - function class() virtual external view returns (bytes4); + function specs() virtual external view returns (bytes4); } \ No newline at end of file diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 8f47e1ba5..85953ad18 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -12,7 +12,7 @@ abstract contract WitnetRequestBoard is IWitnetRequestBoard { - function class() virtual external view returns (bytes4); function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); + function specs() virtual external view returns (bytes4); } \ No newline at end of file diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 1debb0636..7fb997b5e 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -11,7 +11,7 @@ abstract contract WitnetRequestFactory is IWitnetRequestFactory { - function class() virtual external view returns (bytes4); function registry() virtual external view returns (WitnetBytecodes); + function specs() virtual external view returns (bytes4); function witnet() virtual external view returns (WitnetRequestBoard); } \ No newline at end of file diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 1593ef7d6..9ad8835e6 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -11,9 +11,9 @@ abstract contract WitnetRequestTemplate { event WitnetRequestBuilt(address indexed request, bytes32 indexed radHash, string[][] args); - function class() virtual external view returns (bytes4); function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); + function specs() virtual external view returns (bytes4); function version() virtual external view returns (string memory); function witnet() virtual external view returns (WitnetRequestBoard); diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index f6c08980f..0d7dda68e 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -16,7 +16,7 @@ abstract contract UsingWitnet { /// @param _wrb The WitnetRequestBoard entry point address. constructor(WitnetRequestBoard _wrb) { require( - _wrb.class() == type(IWitnetRequestBoard).interfaceId, + _wrb.specs() == type(IWitnetRequestBoard).interfaceId, "UsingWitnet: uncompliant WitnetRequestBoard" ); __witnet = _wrb; diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index d7103c3b7..13412c5fb 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -16,7 +16,7 @@ abstract contract UsingWitnetRequest UsingWitnet(_witnetRequest.witnet()) { require( - _witnetRequest.class() == type(WitnetRequest).interfaceId, + _witnetRequest.specs() == type(WitnetRequest).interfaceId, "UsingWitnetRequest: uncompliant WitnetRequest" ); dataRequest = _witnetRequest; diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index dfeaf2573..dcb0bd772 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -15,7 +15,7 @@ abstract contract UsingWitnetRequestTemplate UsingWitnet(_requestTemplate.witnet()) { require( - _requestTemplate.class() == type(WitnetRequestTemplate).interfaceId, + _requestTemplate.specs() == type(WitnetRequestTemplate).interfaceId, "UsingWitnetRequestTemplate: uncompliant WitnetRequestTemplate" ); dataRequestTemplate = _requestTemplate; diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 182a6a1a0..c8fee5d8e 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -29,7 +29,7 @@ contract WitnetPriceFeeds using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.RadonSLA; - bytes4 immutable public class = type(IWitnetPriceFeeds).interfaceId; + bytes4 immutable public specs = type(IWitnetPriceFeeds).interfaceId; WitnetRequestBoard immutable public override witnet; constructor(address _operator, WitnetRequestBoard _wrb) @@ -40,7 +40,7 @@ contract WitnetPriceFeeds { _transferOwnership(_operator); require( - _wrb.class() == type(IWitnetRequestBoard).interfaceId, + _wrb.specs() == type(IWitnetRequestBoard).interfaceId, "WitnetPriceFeeds: uncompliant request board" ); witnet = _wrb; diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 14de02640..0803a1790 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -26,7 +26,7 @@ contract WitnetRandomness using WitnetV2 for bytes32; using WitnetV2 for WitnetV2.RadonSLA; - bytes4 public immutable class = type(IWitnetRandomness).interfaceId; + bytes4 public immutable specs = type(IWitnetRandomness).interfaceId; uint256 public override latestRandomizeBlock; WitnetRequest public immutable override witnetRandomnessRequest; @@ -45,7 +45,7 @@ contract WitnetRandomness UsingWitnet(_wrb) { _transferOwnership(_operator); - assert(_wrb.class() == type(IWitnetRequestBoard).interfaceId); + assert(_wrb.specs() == type(IWitnetRequestBoard).interfaceId); WitnetRequestFactory _factory = witnet().factory(); WitnetBytecodes _registry = witnet().registry(); { diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 3a9ec6e4e..5faa772e8 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -28,7 +28,7 @@ contract WitnetBytecodesDefault using WitnetEncodingLib for Witnet.RadonSLA; using WitnetEncodingLib for Witnet.RadonDataTypes; - bytes4 public immutable override class = type(IWitnetBytecodes).interfaceId; + bytes4 public immutable override specs = type(IWitnetBytecodes).interfaceId; constructor(bool _upgradable, bytes32 _versionTag) WitnetUpgradableBase( diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index c215c19b0..12b4996ec 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -34,7 +34,7 @@ abstract contract WitnetRequestBoardTrustableBase using WitnetCBOR for WitnetCBOR.CBOR; using WitnetV2 for WitnetV2.RadonSLA; - bytes4 public immutable override class = type(IWitnetRequestBoard).interfaceId; + bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; WitnetRequestFactory immutable public override factory; modifier checkCallbackRecipient(address _addr) { @@ -152,7 +152,7 @@ abstract contract WitnetRequestBoardTrustableBase __storage().base = base(); require(address(factory).code.length > 0, "WitnetRequestBoardTrustableBase: inexistent factory"); - require(factory.class() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory"); + require(factory.specs() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory"); require(address(factory.witnet()) == address(this), "WitnetRequestBoardTrustableBase: discordant factory"); // Set reporters diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 2367b46a3..f333be976 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -184,7 +184,7 @@ contract WitnetRequestFactoryDefault ); } - function class() + function specs() virtual override(WitnetRequestFactory, WitnetRequestTemplate) external view returns (bytes4) @@ -288,7 +288,7 @@ contract WitnetRequestFactoryDefault __proxiable().implementation = base(); require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent requests registry"); - require(registry.class() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); + require(registry.specs() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); emit Upgraded(msg.sender, base(), codehash(), version()); } diff --git a/contracts/interfaces/V2/IWitnetPriceSolver.sol b/contracts/interfaces/V2/IWitnetPriceSolver.sol index e6068e60e..f6aa7dd58 100644 --- a/contracts/interfaces/V2/IWitnetPriceSolver.sol +++ b/contracts/interfaces/V2/IWitnetPriceSolver.sol @@ -11,8 +11,8 @@ interface IWitnetPriceSolver { bytes32 drTxHash; Witnet.ResultStatus status; } - function class() external pure returns (bytes4); function delegator() external view returns (address); function solve(bytes4 feedId) external view returns (Price memory); + function specs() external pure returns (bytes4); function validate(bytes4 feedId, string[] calldata initdata) external; } \ No newline at end of file diff --git a/contracts/libs/WitnetPriceFeedsLib.sol b/contracts/libs/WitnetPriceFeedsLib.sol index 5d3c0ca62..b16bf2ce5 100644 --- a/contracts/libs/WitnetPriceFeedsLib.sol +++ b/contracts/libs/WitnetPriceFeedsLib.sol @@ -39,7 +39,7 @@ library WitnetPriceFeedsLib { } assert(_solver == _createdContract); require( - IWitnetPriceSolver(_solver).class() == type(IWitnetPriceSolver).interfaceId, + IWitnetPriceSolver(_solver).specs() == type(IWitnetPriceSolver).interfaceId, "WitnetPriceFeedsLib: uncompliant solver implementation" ); } From 14cbe7429339c84ecf78f2dcf0c96769a59682be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 20:45:02 +0100 Subject: [PATCH 053/149] feat: Witnet*.class(): string --- contracts/WitnetBytecodes.sol | 3 +++ contracts/WitnetRequestBoard.sol | 3 +++ contracts/WitnetRequestFactory.sol | 1 + contracts/WitnetRequestTemplate.sol | 1 + .../defaults/WitnetRequestFactoryDefault.sol | 17 +++++++++++++++++ 5 files changed, 25 insertions(+) diff --git a/contracts/WitnetBytecodes.sol b/contracts/WitnetBytecodes.sol index 0a79a6271..6a1235331 100644 --- a/contracts/WitnetBytecodes.sol +++ b/contracts/WitnetBytecodes.sol @@ -9,5 +9,8 @@ abstract contract WitnetBytecodes is IWitnetBytecodes { + function class() virtual external view returns (string memory) { + return type(WitnetBytecodes).name; + } function specs() virtual external view returns (bytes4); } \ No newline at end of file diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 85953ad18..37fc92f9f 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -12,6 +12,9 @@ abstract contract WitnetRequestBoard is IWitnetRequestBoard { + function class() virtual external view returns (string memory) { + return type(WitnetRequestBoard).name; + } function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); function specs() virtual external view returns (bytes4); diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 7fb997b5e..b6cf5c61d 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -11,6 +11,7 @@ abstract contract WitnetRequestFactory is IWitnetRequestFactory { + function class() virtual external view returns (string memory); function registry() virtual external view returns (WitnetBytecodes); function specs() virtual external view returns (bytes4); function witnet() virtual external view returns (WitnetRequestBoard); diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 9ad8835e6..5a6b47930 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -11,6 +11,7 @@ abstract contract WitnetRequestTemplate { event WitnetRequestBuilt(address indexed request, bytes32 indexed radHash, string[][] args); + function class() virtual external view returns (string memory); function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); function specs() virtual external view returns (bytes4); diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index f333be976..a3ef1b114 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -184,6 +184,23 @@ contract WitnetRequestFactoryDefault ); } + function class() + virtual override(WitnetRequestFactory, WitnetRequestTemplate) + external view + returns (string memory) + { + if ( + address(this) == _SELF + || address(this) == __proxy() + ) { + return type(WitnetRequestFactory).name; + } else if (__witnetRequest().radHash != bytes32(0)) { + return type(WitnetRequest).name; + } else { + return type(WitnetRequestTemplate).name; + } + } + function specs() virtual override(WitnetRequestFactory, WitnetRequestTemplate) external view From f562eec39157b779aecf314c2cd420a072ceff7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 23 Nov 2023 21:26:14 +0100 Subject: [PATCH 054/149] feat: contracts/apps/UsingWitnetRandomenss --- contracts/apps/UsingWitnetRandomness.sol | 127 +++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 contracts/apps/UsingWitnetRandomness.sol diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol new file mode 100644 index 000000000..ba97b26b0 --- /dev/null +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -0,0 +1,127 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./WitnetConsumer.sol"; +import "../WitnetRequest.sol"; + +abstract contract UsingWitnetRandomness + is + WitnetConsumer +{ + using Witnet for bytes; + using WitnetCBOR for WitnetCBOR.CBOR; + using WitnetV2 for bytes32; + using WitnetV2 for WitnetV2.RadonSLA; + + bytes32 internal immutable __witnetRandomnessRadHash; + bytes32 private __defaultRandomizePackedSLA; + + constructor(WitnetRequestBoard _wrb, uint256 _maxRandomizeCallbackGas) + UsingWitnet(_wrb) + WitnetConsumer(_maxRandomizeCallbackGas) + { + // Build Witnet randomness request + { + WitnetRequestFactory _factory = witnet().factory(); + WitnetBytecodes _registry = witnet().registry(); + // Build own Witnet Randomness Request: + bytes32[] memory _retrievals = new bytes32[](1); + _retrievals[0] = _registry.verifyRadonRetrieval( + Witnet.RadonDataRequestMethods.Rng, + "", // no url + "", // no body + new string[2][](0), // no headers + hex"80" // no retrieval script + ); + Witnet.RadonFilter[] memory _filters; + bytes32 _aggregator = _registry.verifyRadonReducer(Witnet.RadonReducer({ + opcode: Witnet.RadonReducerOpcodes.Mode, + filters: _filters // no filters + })); + bytes32 _tally = _registry.verifyRadonReducer(Witnet.RadonReducer({ + opcode: Witnet.RadonReducerOpcodes.ConcatenateAndHash, + filters: _filters // no filters + })); + WitnetRequestTemplate _template = WitnetRequestTemplate(_factory.buildRequestTemplate( + _retrievals, + _aggregator, + _tally, + 0 + )); + __witnetRandomnessRadHash = WitnetRequest( + _template.buildRequest(new string[][](_retrievals.length)) + ).radHash(); + } + // Settle default randomize SLA: + __defaultRandomizePackedSLA = WitnetV2.RadonSLA({ + numWitnesses: 7, + witnessingCollateralRatio: 10 + }).packed(); + } + + function _defaultRandomizeSLA() internal view returns (WitnetV2.RadonSLA memory) { + return __defaultRandomizePackedSLA.toRadonSLA(); + } + + function _estimateRandomizeBaseFee() internal view returns (uint256) { + return _witnetEstimateBaseFee(32); + } + + /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. + function _msbDeBruijn32(uint32 _v) private pure returns (uint8) { + uint8[32] memory _bitPosition = [ + 0, 9, 1, 10, 13, 21, 2, 29, + 11, 14, 16, 18, 22, 25, 3, 30, + 8, 12, 20, 28, 15, 17, 24, 7, + 19, 27, 23, 6, 26, 5, 4, 31 + ]; + _v |= _v >> 1; + _v |= _v >> 2; + _v |= _v >> 4; + _v |= _v >> 8; + _v |= _v >> 16; + return _bitPosition[ + uint32(_v * uint256(0x07c4acdd)) >> 27 + ]; + } + + function _randomUniform(uint32 _range, uint256 _nonce, bytes32 _seed) internal pure returns (uint32) { + uint8 _flagBits = uint8(255 - _msbDeBruijn32(_range)); + uint256 _number = uint256( + keccak256( + abi.encode(_seed, _nonce) + ) + ) & uint256(2 ** _flagBits - 1); + return uint32((_number * _range) >> _flagBits); + } + + function _readRandomnessFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { + return cborValue.readBytes().toBytes32(); + } + + function __randomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { + return __witnet.postRequest{value: _witnetEvmReward}( + __witnetRandomnessRadHash, + _defaultRandomizeSLA() + ); + } + + function __randomize( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA calldata _witnetQuerySLA + ) + virtual internal + returns (uint256 _randomizeId) + { + return __witnet.postRequest{value: _witnetEvmReward}( + __witnetRandomnessRadHash, + _witnetQuerySLA + ); + } + + function __settleRandomizeDefaultSLA(WitnetV2.RadonSLA calldata sla) virtual internal { + __defaultRandomizePackedSLA = sla.packed(); + } +} \ No newline at end of file From 419ccacea11b8502fc79109778f41cfce467384b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 24 Nov 2023 10:57:39 +0100 Subject: [PATCH 055/149] fix: missing from upon WRB.postRequest --- contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 12b4996ec..a77b218ab 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -785,6 +785,7 @@ abstract contract WitnetRequestBoardTrustableBase __request.slaPacked = _slaPacked; __request.evmReward = _getMsgValue(); } + __seekQuery(_queryId).from = msg.sender; } function __reportResult( From 94ac38cb7710cf20783340374a5ab5fc085984e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 24 Nov 2023 10:58:58 +0100 Subject: [PATCH 056/149] fix: packing/unpacking of WitnetV2.RadonSLA --- contracts/libs/WitnetV2.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 20a692bd2..4a20b2943 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -45,8 +45,8 @@ library WitnetV2 { internal pure returns (RadonSLA memory) { return RadonSLA({ - numWitnesses: uint8(uint(_packed >> 248)), - witnessingCollateralRatio: uint8(uint(_packed >> 240)) + numWitnesses: uint8(uint(_packed) >> 248), + witnessingCollateralRatio: uint8(uint(_packed) >> 240) }); } From 20d58b22d283643a1e3e62962911975f697a8eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 24 Nov 2023 11:02:29 +0100 Subject: [PATCH 057/149] chore: optimize WitnetRandomnes --- contracts/apps/UsingWitnet.sol | 4 +-- contracts/apps/UsingWitnetRandomness.sol | 10 +++---- contracts/apps/UsingWitnetRequest.sol | 2 +- contracts/apps/UsingWitnetRequestTemplate.sol | 2 +- contracts/apps/WitnetConsumer.sol | 4 +-- contracts/apps/WitnetRandomness.sol | 28 +++++++------------ contracts/apps/WitnetRequestConsumer.sol | 4 +-- .../apps/WitnetRequestTemplateConsumer.sol | 4 +-- contracts/interfaces/IWitnetRandomness.sol | 3 +- contracts/mocks/WitnetRandomnessMock.sol | 6 +--- 10 files changed, 27 insertions(+), 40 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index 0d7dda68e..940778e82 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -90,7 +90,7 @@ abstract contract UsingWitnet { function __witnetRequestData( uint256 _witnetEvmReward, bytes32 _witnetRadHash, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual internal returns (uint256) { @@ -103,7 +103,7 @@ abstract contract UsingWitnet { function __witnetRequestData( uint256 _witnetEvmReward, bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual internal returns (uint256) { diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index ba97b26b0..ad6b55658 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -72,11 +72,11 @@ abstract contract UsingWitnetRandomness /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. function _msbDeBruijn32(uint32 _v) private pure returns (uint8) { uint8[32] memory _bitPosition = [ - 0, 9, 1, 10, 13, 21, 2, 29, - 11, 14, 16, 18, 22, 25, 3, 30, - 8, 12, 20, 28, 15, 17, 24, 7, - 19, 27, 23, 6, 26, 5, 4, 31 - ]; + 0, 9, 1, 10, 13, 21, 2, 29, + 11, 14, 16, 18, 22, 25, 3, 30, + 8, 12, 20, 28, 15, 17, 24, 7, + 19, 27, 23, 6, 26, 5, 4, 31 + ]; _v |= _v >> 1; _v |= _v >> 2; _v |= _v >> 4; diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 13412c5fb..40ae556ab 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -36,7 +36,7 @@ abstract contract UsingWitnetRequest function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual internal returns (uint256) { diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index dcb0bd772..ffd54bbcb 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -46,7 +46,7 @@ abstract contract UsingWitnetRequestTemplate function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA, + WitnetV2.RadonSLA memory _witnetQuerySLA, string[][] memory _witnetRequestArgs ) virtual internal returns (uint256) diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 862394752..1540142d7 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -54,7 +54,7 @@ abstract contract WitnetConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes32 _witnetRadHash, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override internal returns (uint256) @@ -69,7 +69,7 @@ abstract contract WitnetConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override internal returns (uint256) diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 0803a1790..0d7266488 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -35,7 +35,6 @@ contract WitnetRandomness mapping (uint256 => RandomizeData) internal __randomize_; struct RandomizeData { - address from; uint256 prevBlock; uint256 nextBlock; uint256 witnetQueryId; @@ -170,13 +169,12 @@ contract WitnetRandomness virtual override returns (uint256) { - return witnet().estimateBaseFee(_gasPrice, 32); + return __witnet.estimateBaseFee(_gasPrice, 32); } /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. /// @dev Returns zero values if no randomness request was actually posted within a given block. /// @param _block Block number whose randomness request is being queried for. - /// @return _from Address from which the latest randomness request was posted. /// @return _id Unique request identifier as provided by the WRB. /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. @@ -184,7 +182,6 @@ contract WitnetRandomness external view virtual override returns ( - address _from, uint256 _id, uint256 _prevBlock, uint256 _nextBlock @@ -192,7 +189,6 @@ contract WitnetRandomness { RandomizeData storage _data = __randomize_[_block]; _id = _data.witnetQueryId; - _from = _data.from; _prevBlock = _data.prevBlock; _nextBlock = _data.nextBlock; } @@ -212,7 +208,7 @@ contract WitnetRandomness virtual override returns (bytes32) { - if (__randomize_[_block].from == address(0)) { + if (__randomize_[_block].witnetQueryId == 0) { _block = getRandomnessNextBlock(_block); } uint256 _queryId = __randomize_[_block].witnetQueryId; @@ -237,7 +233,7 @@ contract WitnetRandomness virtual override returns (uint256) { - return ((__randomize_[_block].from != address(0)) + return ((__randomize_[_block].witnetQueryId != 0) ? __randomize_[_block].nextBlock // start search from the latest block : _searchNextBlock(_block, latestRandomizeBlock) @@ -326,22 +322,21 @@ contract WitnetRandomness function randomize() external payable virtual override - returns (uint256 _usedFunds) + returns (uint256) { if (latestRandomizeBlock < block.number) { // Post the Witnet Randomness request: - _usedFunds = _witnetEstimateBaseFee(tx.gasprice); - uint _queryId = witnet().postRequest{value: _usedFunds}( + uint _queryId = __witnetRequestData( + msg.value, __witnetRandomnessRadHash, __witnetRandomnessPackedSLA.toRadonSLA() ); // Keep Randomize data in storage: - RandomizeData storage _data = __randomize_[block.number]; - _data.witnetQueryId = _queryId; - _data.from = msg.sender; + RandomizeData storage __data = __randomize_[block.number]; + __data.witnetQueryId = _queryId; // Update block links: uint256 _prevBlock = latestRandomizeBlock; - _data.prevBlock = _prevBlock; + __data.prevBlock = _prevBlock; __randomize_[_prevBlock].nextBlock = block.number; latestRandomizeBlock = block.number; // Throw event: @@ -351,13 +346,10 @@ contract WitnetRandomness _queryId, __witnetRandomnessRadHash ); - // Transfer back unused tx value: - if (_usedFunds < msg.value) { - payable(msg.sender).transfer(msg.value - _usedFunds); - } } else { return upgradeRandomizeFee(block.number); } + return msg.value; } /// Increases Witnet fee related to a pending-to-be-solved randomness request, as much as it diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index ca7b3431b..83546d7bb 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -33,7 +33,7 @@ abstract contract WitnetRequestConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes32 _witnetRadHash, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) @@ -48,7 +48,7 @@ abstract contract WitnetRequestConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index b08b1cc1f..b329fdf64 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -34,7 +34,7 @@ abstract contract WitnetRequestTemplateConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes32 _witnetRadHash, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) @@ -49,7 +49,7 @@ abstract contract WitnetRequestTemplateConsumer function __witnetRequestData( uint256 _witnetEvmReward, bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol index c6e561bce..1e57c354f 100644 --- a/contracts/interfaces/IWitnetRandomness.sol +++ b/contracts/interfaces/IWitnetRandomness.sol @@ -28,12 +28,11 @@ interface IWitnetRandomness { /// @notice Retrieves data of a randomization request that got successfully posted to the WRB within a given block. /// @dev Returns zero values if no randomness request was actually posted within a given block. /// @param _block Block number whose randomness request is being queried for. - /// @return _from Address from which the latest randomness request was posted. /// @return _id Unique request identifier as provided by the WRB. /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. function getRandomizeData(uint256 _block) - external view returns (address _from, uint256 _id, uint256 _prevBlock, uint256 _nextBlock); + external view returns (uint256 _id, uint256 _prevBlock, uint256 _nextBlock); /// @notice Retrieves the randomness generated upon solving a request that was posted within a given block, /// if any, or to the _first_ request posted after that block, otherwise. Should the intended diff --git a/contracts/mocks/WitnetRandomnessMock.sol b/contracts/mocks/WitnetRandomnessMock.sol index f13ef281a..0d86c7f57 100644 --- a/contracts/mocks/WitnetRandomnessMock.sol +++ b/contracts/mocks/WitnetRandomnessMock.sol @@ -45,7 +45,6 @@ contract WitnetRandomnessMock /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. /// @dev Returns zero values if no randomness request was actually posted within a given block. /// @param _block Block number whose randomness request is being queried for. - /// @return _from Address from which the latest randomness request was posted. /// @return _id Unique request identifier as provided by the WRB. /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. @@ -53,7 +52,6 @@ contract WitnetRandomnessMock external view virtual override returns ( - address _from, uint256 _id, uint256 _prevBlock, uint256 _nextBlock @@ -61,7 +59,6 @@ contract WitnetRandomnessMock { RandomizeData storage _data = __randomize_[_block]; _id = _data.witnetQueryId; - _from = _data.from; _prevBlock = _data.prevBlock; _nextBlock = _data.nextBlock; } @@ -80,7 +77,7 @@ contract WitnetRandomnessMock virtual override returns (bytes32) { - if (__randomize_[_block].from == address(0)) { + if (__randomize_[_block].witnetQueryId == 0) { _block = getRandomnessNextBlock(_block); } uint256 _queryId = __randomize_[_block].witnetQueryId; @@ -123,7 +120,6 @@ contract WitnetRandomnessMock // Post the Witnet Randomness request: uint _queryId = ++ __mockRandomizeLatestId; RandomizeData storage _data = __randomize_[block.number]; - _data.from = msg.sender; _data.witnetQueryId = _queryId; // Update block links: uint256 _prevBlock = latestRandomizeBlock; From 93a5ff13f137dd068d99e3cabe66756e50449cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 24 Nov 2023 11:03:31 +0100 Subject: [PATCH 058/149] refactor: WRBData.numQueries -> WRBData.nonce --- .../core/defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- contracts/data/WitnetRequestBoardData.sol | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index a77b218ab..adac5da83 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -669,7 +669,7 @@ abstract contract WitnetRequestBoardTrustableBase override returns (uint256) { - return __storage().numQueries + 1; + return __storage().nonce + 1; } /// Gets the whole Query data contents, if any, no matter its current status. @@ -771,7 +771,7 @@ abstract contract WitnetRequestBoardTrustableBase function __newQuery() virtual internal returns (uint256) { - return ++ __storage().numQueries; + return ++ __storage().nonce; } function __postRequest(bytes32 _radHash, bytes32 _slaPacked) diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index 677f343d3..158125189 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -15,7 +15,7 @@ abstract contract WitnetRequestBoardData { struct WitnetBoardState { address base; address owner; - uint256 numQueries; + uint256 nonce; mapping (uint => Witnet.Query) queries; } @@ -34,7 +34,7 @@ abstract contract WitnetRequestBoardData { /// Asserts the given query was previously posted and that it was not yet deleted. modifier notDeleted(uint256 _queryId) { require( - _queryId > 0 && _queryId <= __storage().numQueries, + _queryId > 0 && _queryId <= __storage().nonce, "WitnetRequestBoard: not yet posted" ); require( @@ -54,7 +54,7 @@ abstract contract WitnetRequestBoardData { /// Asserts the given query was actually posted before calling this method. modifier wasPosted(uint256 _queryId) { require( - _queryId > 0 && _queryId <= __storage().numQueries, + _queryId > 0 && _queryId <= __storage().nonce, "WitnetRequestBoard: not yet posted" ); _; } @@ -110,7 +110,7 @@ abstract contract WitnetRequestBoardData { // is kept in storage, the query remains in "Posted" status: return Witnet.QueryStatus.Posted; } - else if (_queryId > __storage().numQueries) { + else if (_queryId > __storage().nonce) { // Requester's address is removed from storage only if // the query gets "Deleted" by its requester. return Witnet.QueryStatus.Deleted; From da7e40c05ebc741a0847ff74fff85f7c97373b55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 08:11:47 +0100 Subject: [PATCH 059/149] refactor: Witnet.QueryStatus.Deleted -> Witnet.QueryStatus.Delivered --- contracts/apps/WitnetPriceFeeds.sol | 4 +- .../WitnetRequestBoardTrustableBase.sol | 43 +++++++------------ contracts/data/WitnetRequestBoardData.sol | 6 +-- contracts/interfaces/IWitnetRequestBoard.sol | 19 ++++---- contracts/libs/Witnet.sol | 2 +- 5 files changed, 29 insertions(+), 45 deletions(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index c8fee5d8e..e229e14cc 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -633,13 +633,13 @@ contract WitnetPriceFeeds if (_latestStatus == Witnet.ResultStatus.Ready) { // If so, remove previous last valid query from the WRB: if (__feed.latestValidQueryId > 0) { - witnet.deleteQuery(__feed.latestValidQueryId); + witnet.fetchQueryResponse(__feed.latestValidQueryId); } __feed.latestValidQueryId = _latestId; } else { // Otherwise, try to delete latest query, as it was faulty // and we are about to post a new update request: - try witnet.deleteQuery(_latestId) {} catch {} + try witnet.fetchQueryResponse(_latestId) {} catch {} } // Post update request to the WRB: _latestId = witnet.postRequest{value: _usedFunds}( diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index adac5da83..d0e9ac395 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -395,19 +395,6 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- IWitnetRequestBoard Requester methods ---------------------------------------------------------------------- - /// @notice Delete query without further ado. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function burnQuery(uint256 _queryId) - external - virtual override - onlyRequester(_queryId) - inStatus(_queryId, Witnet.QueryStatus.Reported) - { - delete __storage().queries[_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; @@ -475,21 +462,6 @@ abstract contract WitnetRequestBoardTrustableBase ); } - /// 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 the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function deleteQuery(uint256 _queryId) - public - virtual override - onlyRequester(_queryId) - inStatus(_queryId, Witnet.QueryStatus.Reported) - returns (Witnet.Response memory _response) - { - _response = __seekQuery(_queryId).response; - delete __storage().queries[_queryId]; - } - /// @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. /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. @@ -513,6 +485,21 @@ abstract contract WitnetRequestBoardTrustableBase } } + /// 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 the one that actually posted the given request. + /// @param _queryId The unique query identifier. + function fetchQueryResponse(uint256 _queryId) + public + virtual override + onlyRequester(_queryId) + inStatus(_queryId, Witnet.QueryStatus.Reported) + returns (Witnet.Response memory _response) + { + _response = __seekQuery(_queryId).response; + delete __storage().queries[_queryId]; + } + /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided /// result to this request. diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index 158125189..5d034a92d 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -113,7 +113,7 @@ abstract contract WitnetRequestBoardData { else if (_queryId > __storage().nonce) { // Requester's address is removed from storage only if // the query gets "Deleted" by its requester. - return Witnet.QueryStatus.Deleted; + return Witnet.QueryStatus.Delivered; } else { return Witnet.QueryStatus.Unknown; } @@ -127,8 +127,8 @@ abstract contract WitnetRequestBoardData { return "WitnetRequestBoard: not in Posted status"; } else if (_status == Witnet.QueryStatus.Reported) { return "WitnetRequestBoard: not in Reported status"; - } else if (_status == Witnet.QueryStatus.Deleted) { - return "WitnetRequestBoard: not in Deleted status"; + } else if (_status == Witnet.QueryStatus.Delivered) { + return "WitnetRequestBoard: not in Delivered status"; } else { return "WitnetRequestBoard: bad mood"; } diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index c06aa1972..77faae20d 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -26,12 +26,6 @@ interface IWitnetRequestBoard { /// =============================================================================================================== /// --- Requester interface --------------------------------------------------------------------------------------- - /// @notice Delete query without further ado. - /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param queryId The unique query identifier. - function burnQuery(uint256 queryId) external; - /// @notice Gets error code identifying some possible failure on the resolution of the given query. /// @param queryId The unique query identifier. function checkResultError(uint256 queryId) external view returns (Witnet.ResultError memory); @@ -50,20 +44,23 @@ interface IWitnetRequestBoard { /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. function checkResultTraceability(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); - /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. - /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param queryId The unique query identifier. - function deleteQuery(uint256 queryId) external returns (Witnet.Response memory); /// @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, uint256 resultMaxSize) external view returns (uint256); + + /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, + /// removing the whole query from the WRB storage. + /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param queryId The unique query identifier. + function fetchQueryResponse(uint256 queryId) external returns (Witnet.Response memory); /// @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 resultMaxSize Maximum expected size of returned data (in bytes). /// @param maxCallbackGas Maximum gas to be spent when reporting the data request result. function estimateBaseFeeWithCallback(uint256 gasPrice, uint256 maxCallbackGas) external view returns (uint256); diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 6758615b5..429b9980d 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -23,7 +23,7 @@ library Witnet { Unknown, Posted, Reported, - Deleted + Delivered } /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. From 1480638908b75b1fd526ebc658808e4ef6768598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 08:23:12 +0100 Subject: [PATCH 060/149] feat: declare UsingWitnet contracts to be throwers of WRB events --- contracts/interfaces/IWitnetRequestBoard.sol | 18 --------------- .../interfaces/IWitnetRequestBoardEvents.sol | 22 +++++++++++++++++++ 2 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 contracts/interfaces/IWitnetRequestBoardEvents.sol diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 77faae20d..96f204efc 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -4,24 +4,6 @@ pragma solidity >=0.7.0 <0.9.0; import "../libs/WitnetV2.sol"; interface IWitnetRequestBoard { - - /// Emitted every time a new query containing some verified data request is posted to the WRB. - event NewQuery(uint256 indexed id, uint256 evmReward); - - /// Emitted every time a new query containing non-verified data request is posted to the WRB. - event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); - - /// Emitted when the reward of some not-yet reported query is upgraded. - event QueryRewardUpgraded(uint256 indexed id, uint256 evmReward); - - /// Emitted when a query with no callback gets reported into the WRB. - event QueryReport(uint256 indexed id, uint256 evmGasPrice); - - /// Emitted when a query with a callback gets successfully reported into the WRB. - event QueryCallback(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); - - /// Emitted when a query with a callback cannot get reported into the WRB. - event QueryCallbackRevert(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); /// =============================================================================================================== /// --- Requester interface --------------------------------------------------------------------------------------- diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/IWitnetRequestBoardEvents.sol new file mode 100644 index 000000000..e711ffce3 --- /dev/null +++ b/contracts/interfaces/IWitnetRequestBoardEvents.sol @@ -0,0 +1,22 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.7.0 <0.9.0; + +interface IWitnetRequestBoardEvents { + /// Emitted every time a new query containing some verified data request is posted to the WRB. + event NewQuery(uint256 indexed id, uint256 evmReward); + + /// Emitted every time a new query containing non-verified data request is posted to the WRB. + event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); + + /// Emitted when the reward of some not-yet reported query is upgraded. + event QueryRewardUpgraded(uint256 indexed id, uint256 evmReward); + + /// Emitted when a query with no callback gets reported into the WRB. + event QueryReport(uint256 indexed id, uint256 evmGasPrice); + + /// Emitted when a query with a callback gets successfully reported into the WRB. + event QueryCallback(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); + + /// Emitted when a query with a callback cannot get reported into the WRB. + event QueryCallbackRevert(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); +} From 846bebe9a9d9a6a66e4b24a0c8d2579aa2629b90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 08:52:36 +0100 Subject: [PATCH 061/149] test/feat: polish callbacks implementation --- contracts/WitnetRequestBoard.sol | 4 +- contracts/apps/UsingWitnet.sol | 15 +- contracts/apps/UsingWitnetRandomness.sol | 8 +- contracts/apps/WitnetConsumer.sol | 28 +- contracts/apps/WitnetRandomness.sol | 2 +- contracts/apps/WitnetRequestConsumer.sol | 31 +- .../apps/WitnetRequestTemplateConsumer.sol | 33 +-- .../WitnetRequestBoardTrustableOvm2.sol | 13 +- .../WitnetRequestBoardTrustableReef.sol | 9 +- .../WitnetRequestBoardTrustableBase.sol | 280 +++++++++--------- .../WitnetRequestBoardTrustableDefault.sol | 35 ++- contracts/interfaces/IWitnetRequestBoard.sol | 19 +- .../IWitnetRequestBoardReporter.sol | 6 +- contracts/interfaces/V2/IWitnetConsumer.sol | 21 +- contracts/patterns/Payable.sol | 2 +- migrations/witnet.settings.js | 7 +- 16 files changed, 266 insertions(+), 247 deletions(-) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 37fc92f9f..fcb99ba96 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -5,12 +5,14 @@ pragma solidity >=0.7.0 <0.9.0; import "./WitnetBytecodes.sol"; import "./WitnetRequestFactory.sol"; import "./interfaces/IWitnetRequestBoard.sol"; +import "./interfaces/IWitnetRequestBoardEvents.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. abstract contract WitnetRequestBoard is - IWitnetRequestBoard + IWitnetRequestBoard, + IWitnetRequestBoardEvents { function class() virtual external view returns (string memory) { return type(WitnetRequestBoard).name; diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index 940778e82..c34217ba1 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -8,8 +8,10 @@ import "../WitnetRequestBoard.sol"; /// @title The UsingWitnet contract /// @dev Witnet-aware contracts can inherit from this contract in order to interact with Witnet. /// @author The Witnet Foundation. -abstract contract UsingWitnet { - +abstract contract UsingWitnet + is + IWitnetRequestBoardEvents +{ WitnetRequestBoard internal immutable __witnet; /// @dev Include an address to specify the WitnetRequestBoard entry point address. @@ -47,7 +49,7 @@ abstract contract UsingWitnet { /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _resultMaxSize Maximum expected size of returned data (in bytes). function _witnetEstimateBaseFee(uint256 _resultMaxSize) - internal view + virtual internal view returns (uint256) { return __witnet.estimateBaseFee(tx.gasprice, _resultMaxSize); @@ -55,12 +57,13 @@ abstract contract UsingWitnet { /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. + /// @param _resultMaxSize Maximum expected size of returned data (in bytes). /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function _witnetEstimateBaseFeeWithCallback(uint256 _maxCallbackGas) + function _witnetEstimateBaseFeeWithCallback(uint256 _resultMaxSize, uint256 _maxCallbackGas) internal view returns (uint256) { - return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _maxCallbackGas); + return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _resultMaxSize, _maxCallbackGas); } function _witnetCheckQueryResultTraceability(uint256 _witnetQueryId) @@ -105,7 +108,7 @@ abstract contract UsingWitnet { bytes calldata _witnetRadBytecode, WitnetV2.RadonSLA memory _witnetQuerySLA ) - virtual internal returns (uint256) + internal returns (uint256) { return __witnet.postRequest{value: _witnetEvmReward}( _witnetRadBytecode, diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index ad6b55658..708b6e9e8 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -66,7 +66,7 @@ abstract contract UsingWitnetRandomness } function _estimateRandomizeBaseFee() internal view returns (uint256) { - return _witnetEstimateBaseFee(32); + return _witnetEstimateBaseFee(35); } /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. @@ -102,7 +102,8 @@ abstract contract UsingWitnetRandomness } function __randomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { - return __witnet.postRequest{value: _witnetEvmReward}( + return __witnetRequestData( + _witnetEvmReward, __witnetRandomnessRadHash, _defaultRandomizeSLA() ); @@ -115,7 +116,8 @@ abstract contract UsingWitnetRandomness virtual internal returns (uint256 _randomizeId) { - return __witnet.postRequest{value: _witnetEvmReward}( + return __witnetRequestData( + _witnetEvmReward, __witnetRandomnessRadHash, _witnetQuerySLA ); diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 1540142d7..0c02a8ed1 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -10,12 +10,7 @@ abstract contract WitnetConsumer UsingWitnet { uint256 private immutable __witnetReportCallbackMaxGas; - - modifier burnQueryAfterReport(uint256 _witnetQueryId) { - _; - __witnet.burnQuery(_witnetQueryId); - } - + modifier onlyFromWitnet { require(msg.sender == address(__witnet), "WitnetConsumer: unauthorized"); _; @@ -37,11 +32,11 @@ abstract contract WitnetConsumer /// =============================================================================================================== /// --- WitnetConsumer virtual methods ---------------------------------------------------------------------------- - function _witnetEstimateBaseFee() - virtual internal view + function _witnetEstimateBaseFee(uint256 _resultMaxSize) + virtual override internal view returns (uint256) { - return _witnetEstimateBaseFeeWithCallback(_witnetReportCallbackMaxGas()); + return _witnetEstimateBaseFeeWithCallback(_resultMaxSize, _witnetReportCallbackMaxGas()); } function _witnetReportCallbackMaxGas() @@ -66,19 +61,4 @@ abstract contract WitnetConsumer ); } - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) - virtual override internal - returns (uint256) - { - return __witnet.postRequestWithCallback{value: _witnetEvmReward}( - _witnetRadBytecode, - _witnetQuerySLA, - __witnetReportCallbackMaxGas - ); - } - } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 0d7266488..f82d33a66 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -169,7 +169,7 @@ contract WitnetRandomness virtual override returns (uint256) { - return __witnet.estimateBaseFee(_gasPrice, 32); + return __witnet.estimateBaseFee(_gasPrice, 35); } /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index 83546d7bb..b6071366b 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -17,19 +17,28 @@ abstract contract WitnetRequestConsumer WitnetConsumer(_maxCallbackGas) { require( - _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequest._witnetEstimateBaseFee(), - "WitnetRequestConsumer: max callback gas too low" + _witnetEstimateBaseFeeWithCallback(_witnetRequest.resultDataMaxSize(), _maxCallbackGas) + > UsingWitnetRequest._witnetEstimateBaseFee(), + "WitnetRequestConsumer: callback gas limit too low" ); } function _witnetEstimateBaseFee() - virtual override(UsingWitnetRequest, WitnetConsumer) + virtual override internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(); + return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); } + function _witnetEstimateBaseFee(uint256 _resultMaxSize) + virtual override(UsingWitnet, WitnetConsumer) + internal view + returns (uint256) + { + return WitnetConsumer._witnetEstimateBaseFee(_resultMaxSize); + } + function __witnetRequestData( uint256 _witnetEvmReward, bytes32 _witnetRadHash, @@ -45,18 +54,4 @@ abstract contract WitnetRequestConsumer ); } - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) - virtual override(UsingWitnet, WitnetConsumer) internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetRadBytecode, - _witnetQuerySLA - ); - } } diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index b329fdf64..1f804cf1d 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -17,18 +17,27 @@ abstract contract WitnetRequestTemplateConsumer WitnetConsumer(_maxCallbackGas) { require( - _witnetEstimateBaseFeeWithCallback(_maxCallbackGas) > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), - "WitnetRequestTemplateConsumer: max callback gas too low" + _witnetEstimateBaseFeeWithCallback(_requestTemplate.resultDataMaxSize(), _maxCallbackGas) + > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), + "WitnetRequestTemplateConsumer: callback gas limit too low" ); } - function _witnetEstimateBaseFee() - virtual override(UsingWitnetRequestTemplate, WitnetConsumer) + function _witnetEstimateBaseFee() + virtual override internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(); + return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); + } + + function _witnetEstimateBaseFee(uint256 _resultMaxSize) + virtual override(UsingWitnet, WitnetConsumer) + internal view + returns (uint256) + { + return WitnetConsumer._witnetEstimateBaseFee(_resultMaxSize); } function __witnetRequestData( @@ -46,18 +55,4 @@ abstract contract WitnetRequestTemplateConsumer ); } - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) - virtual override(UsingWitnet, WitnetConsumer) internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetRadBytecode, - _witnetQuerySLA - ); - } } diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index e00075c36..4246921da 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -28,6 +28,8 @@ contract WitnetRequestBoardTrustableOvm2 bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableDefault( @@ -35,6 +37,8 @@ contract WitnetRequestBoardTrustableOvm2 _upgradable, _versionTag, _reportResultGasBase, + _reportResultWithCallbackGasBase, + _reportResultWithCallbackRevertGasBase, _sstoreFromZeroGas ) { @@ -63,13 +67,18 @@ contract WitnetRequestBoardTrustableOvm2 /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) public view virtual override returns (uint256) { - return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(_gasPrice, _maxCallbackGas) + ( + return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback( + _gasPrice, + _resultMaxSize, + _maxCallbackGas + ) + ( _gasPrice * gasPriceOracleL1.getL1Fee( hex"c8f5cdd500000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000225820ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" ) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 9d7feaeab..46c881494 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -22,6 +22,8 @@ contract WitnetRequestBoardTrustableReef bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableDefault( @@ -29,6 +31,8 @@ contract WitnetRequestBoardTrustableReef _upgradable, _versionTag, _reportResultGasBase, + _reportResultWithCallbackGasBase, + _reportResultWithCallbackRevertGasBase, _sstoreFromZeroGas ) {} @@ -48,13 +52,14 @@ contract WitnetRequestBoardTrustableReef } /// @notice Estimate the minimum reward required for posting a data request with a callback. + /// @param _resultMaxSize Maximum expected size of returned data (in bytes). /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256, uint256 _maxCallbackGas) + function estimateBaseFeeWithCallback(uint256, uint256 _resultMaxSize, uint256 _maxCallbackGas) public view virtual override returns (uint256) { - return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(1, _maxCallbackGas); + return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(1, _resultMaxSize, _maxCallbackGas); } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index d0e9ac395..7fb2c8453 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -110,8 +110,9 @@ abstract contract WitnetRequestBoardTrustableBase /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) virtual public view returns (uint256); + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) virtual public view returns (uint256); // ================================================================================================================ @@ -257,6 +258,7 @@ abstract contract WitnetRequestBoardTrustableBase override onlyReporters inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (uint256) { require( _drTxHash != 0, @@ -268,15 +270,13 @@ abstract contract WitnetRequestBoardTrustableBase _cborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); + // Do actual report: // solhint-disable not-rely-on-time - _safeTransferTo( - payable(msg.sender), - __reportResult( - _queryId, - block.timestamp, - _drTxHash, - _cborBytes - ) + return __reportResultAndReward( + _queryId, + block.timestamp, + _drTxHash, + _cborBytes ); } @@ -300,6 +300,7 @@ abstract contract WitnetRequestBoardTrustableBase override onlyReporters inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (uint256) { require( _timestamp <= block.timestamp, @@ -315,13 +316,13 @@ abstract contract WitnetRequestBoardTrustableBase _cborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); - // Transfer query's reward to the reporter: - _safeTransferTo(payable(msg.sender), __reportResult( + // Do actual report and return reward transfered to the reproter: + return __reportResultAndReward( _queryId, _timestamp, _drTxHash, _cborBytes - )); + ); } /// Reports Witnet-provided results to multiple requests within a single EVM tx. @@ -334,57 +335,55 @@ abstract contract WitnetRequestBoardTrustableBase /// - data request result in raw bytes. /// @param _verbose If true, emits a BatchReportError event for every failing report, if any. function reportResultBatch( - IWitnetRequestBoardReporter.BatchResult[] memory _batchResults, + IWitnetRequestBoardReporter.BatchResult[] calldata _batchResults, bool _verbose ) external override onlyReporters + returns (uint256 _batchReward) { - uint _batchReward; - uint _batchSize = _batchResults.length; - for ( uint _i = 0; _i < _batchSize; _i ++) { - BatchResult memory _result = _batchResults[_i]; - if (_statusOf(_result.queryId) != Witnet.QueryStatus.Posted) { + for ( uint _i = 0; _i < _batchResults.length; _i ++) { + if (_statusOf(_batchResults[_i].queryId) != Witnet.QueryStatus.Posted) { if (_verbose) { emit BatchReportError( - _result.queryId, + _batchResults[_i].queryId, "WitnetRequestBoardTrustableBase: bad queryId" ); } - } else if (_result.drTxHash == 0) { + } else if (_batchResults[_i].drTxHash == 0) { if (_verbose) { emit BatchReportError( - _result.queryId, + _batchResults[_i].queryId, "WitnetRequestBoardTrustableBase: bad drTxHash" ); } - } else if (_result.cborBytes.length == 0) { + } else if (_batchResults[_i].cborBytes.length == 0) { if (_verbose) { emit BatchReportError( - _result.queryId, + _batchResults[_i].queryId, "WitnetRequestBoardTrustableBase: bad cborBytes" ); } - } else if (_result.timestamp > 0 && _result.timestamp > block.timestamp) { + } else if (_batchResults[_i].timestamp > 0 && _batchResults[_i].timestamp > block.timestamp) { if (_verbose) { emit BatchReportError( - _result.queryId, + _batchResults[_i].queryId, "WitnetRequestBoardTrustableBase: bad timestamp" ); } } else { _batchReward += __reportResult( - _result.queryId, - _result.timestamp == 0 ? block.timestamp : _result.timestamp, - _result.drTxHash, - _result.cborBytes + _batchResults[_i].queryId, + _batchResults[_i].timestamp == 0 ? block.timestamp : _batchResults[_i].timestamp, + _batchResults[_i].drTxHash, + _batchResults[_i].cborBytes ); } } - // Transfer all successful rewards in one single shot to the authorized reporter, if any: + // Transfer rewards to all reported results in one single transfer to the reporter: if (_batchReward > 0) { - _safeTransferTo( + __safeTransferTo( payable(msg.sender), _batchReward ); @@ -465,22 +464,25 @@ abstract contract WitnetRequestBoardTrustableBase /// @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. /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. - function estimateQueryEarnings(uint256 _queryId) + function estimateQueryEarnings(uint256 _queryId, uint256 _gasPrice) virtual override external view returns (int256 _earnings) { Witnet.Request storage __request = __seekQueryRequest(_queryId); + + uint _maxResultSize = registry().lookupRadonRequestResultMaxSize(__request.radHash); _earnings = int(__request.evmReward); if (__request.maxCallbackGas > 0) { _earnings -= int(estimateBaseFeeWithCallback( - _getGasPrice(), + _gasPrice, + _maxResultSize, __request.maxCallbackGas )); } else { _earnings -= int(estimateBaseFee( - _getGasPrice(), - registry().lookupRadonRequestResultMaxSize(__request.radHash) + _gasPrice, + _maxResultSize )); } } @@ -587,7 +589,7 @@ abstract contract WitnetRequestBoardTrustableBase virtual override external payable checkCallbackRecipient(msg.sender) - checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryMaxCallbackGas)) + checkReward(estimateBaseFeeWithCallback(_getGasPrice(), 32, _queryMaxCallbackGas)) checkSLA(_querySLA) returns (uint256 _queryId) { @@ -598,35 +600,6 @@ abstract contract WitnetRequestBoardTrustableBase __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; emit NewQuery(_queryId, _getMsgValue()); } - - /// @notice Requests the execution of the given Witnet Data Request bytecode, in expectation that it will be - /// @notice relayed and solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board - /// @notice that will be transferred to the reporter who relays back the Witnet-provided result to this request. - /// @dev Fails if, provided reward is too low. - /// @dev The caller must be a contract implementing the IWitnetConsumer interface. - /// @param _radBytecode 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 _queryMaxCallbackGas Maximum gas to be spent when reporting the data request result. - /// @return _queryId A unique query identifier. - function postRequestWithCallback( - bytes calldata _radBytecode, - WitnetV2.RadonSLA calldata _querySLA, - uint256 _queryMaxCallbackGas - ) - virtual override - external payable - checkCallbackRecipient(msg.sender) - checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryMaxCallbackGas)) - checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postRequest( - registry().hashOf(_radBytecode), - _querySLA.packed() - ); - __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; - emit NewQueryWithBytecode(_queryId, _getMsgValue(), _radBytecode); - } /// Increments the reward of a previously posted request by adding the transaction value to it. /// @dev Updates request `gasPrice` in case this method is called with a higher @@ -777,9 +750,9 @@ abstract contract WitnetRequestBoardTrustableBase function __reportResult( uint256 _queryId, - uint256 _timestamp, + uint256 _drTxTimestamp, bytes32 _drTxHash, - bytes memory _cborBytes + bytes calldata _cborBytes ) internal returns (uint256 _evmReward) @@ -791,96 +764,129 @@ abstract contract WitnetRequestBoardTrustableBase _evmReward = __request.evmReward; __request.evmReward = 0; - // write report traceability data in storage - // (could potentially be deleted from a callback method within same transaction) - Witnet.Response storage __response = __query.response; - // solhint-disable not-rely-on-time - __response.timestamp = _timestamp; - __response.drTxHash = _drTxHash; - __response.reporter = msg.sender; - // determine whether a callback is required if (__request.maxCallbackGas > 0) { - uint _evmCallbackGas = gasleft(); - bool _evmCallbackSuccess; - bytes memory _evmCallbackRevertBytes; + uint _evmCallbackActualGas = gasleft() - 6295; + bool _evmCallbackSuccess = false; + string memory _evmCallbackRevertMessage; // if callback is required, select which callback method to call // depending on whether the query was solved with or without errors: if (_cborBytes[0] == bytes1(0xd8)) { WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_cborBytes).readArray(); if (_errors.length < 2) { - // result with unknown error: - (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( - abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryError.selector, - _queryId, - Witnet.ResultErrorCodes.Unknown, - WitnetCBOR.CBOR({ - buffer: WitnetBuffer.Buffer({ data: hex"", cursor: 0}), - initialByte: 0, - majorType: 0, - additionalInformation: 0, - len: 0, - tag: 0 - }) - ) - ); + // try to report result with unknown error: + try IWitnetConsumer(__query.from).reportWitnetQueryError{gas: __request.maxCallbackGas}( + _queryId, + _drTxHash, + _drTxTimestamp, + block.number, + 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 { - // result with parsable error: - (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( - abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryError.selector, - _queryId, - Witnet.ResultErrorCodes(_errors[0].readUint()), - _errors[0] - ) - ); + // try to report result with parsable error: + try IWitnetConsumer(__query.from).reportWitnetQueryError{gas: __request.maxCallbackGas}( + _queryId, + _drTxHash, + _drTxTimestamp, + block.number, + Witnet.ResultErrorCodes(_errors[0].readUint()), + _errors[0] + ) { + _evmCallbackSuccess = true; + } catch Error(string memory err) { + _evmCallbackRevertMessage = err; + } } } else { - // result with no error - (_evmCallbackSuccess, _evmCallbackRevertBytes) = __query.from.call{gas: __request.maxCallbackGas}( - abi.encodeWithSelector(IWitnetConsumer.reportWitnetQueryResult.selector, - _queryId, - WitnetCBOR.fromBytes(_cborBytes) - ) - ); + // try to report result result with no error : + try IWitnetConsumer(__query.from).reportWitnetQueryResult{gas: __request.maxCallbackGas}( + _queryId, + _drTxHash, + _drTxTimestamp, + block.number, + WitnetCBOR.fromBytes(_cborBytes) + ) { + _evmCallbackSuccess = true; + } catch Error(string memory err) { + _evmCallbackRevertMessage = err; + } catch (bytes memory) {} } - _evmCallbackGas -= gasleft(); if (_evmCallbackSuccess) { + // => the callback run successfully emit QueryCallback( - _queryId, - _getGasPrice(), - _evmCallbackGas + _queryId, + _getGasPrice(), + _evmCallbackActualGas - gasleft() ); + // after successfull report, remove the whole query from storage: + delete __storage().queries[_queryId]; } else { - if (_evmCallbackRevertBytes.length < 68) { - emit QueryCallbackRevert( - _queryId, - _getGasPrice(), - _evmCallbackGas, - "WitnetRequestBoardTrustableDefault: unhandled callback revert" - ); - } else { - assembly { - _evmCallbackRevertBytes := add(_evmCallbackRevertBytes, 0x04) - } - emit QueryCallbackRevert( - _queryId, - _getGasPrice(), - _evmCallbackGas, - string(abi.encodePacked( - "WitnetRequestBoardTrustableDefault: callback revert: ", - _evmCallbackRevertBytes - )) - ); - } - } + // => the callback reverted + emit QueryCallbackRevert( + _queryId, + _getGasPrice(), + _evmCallbackActualGas - gasleft(), + bytes(_evmCallbackRevertMessage).length > 0 + ? _evmCallbackRevertMessage + : "WitnetRequestBoardTrustableDefault: callback gas limit exceeded?" + ); + // write query result and traceability data into storage: + __writeQueryResponse(_queryId, _drTxHash, _drTxTimestamp, _cborBytes); + } } else { - // no callback is involved, so just keep the cbor-encoded result in storage: - __response.cborBytes = _cborBytes; + // => no callback is involved emit QueryReport( _queryId, _getGasPrice() ); - } + // write query result and traceability data into storage + __writeQueryResponse(_queryId, _drTxHash, _drTxTimestamp, _cborBytes); + } + } + + function __writeQueryResponse( + uint256 _queryId, + bytes32 _drTxHash, + uint256 _drTxTimestamp, + bytes memory _cborBytes + ) + internal + { + __seekQuery(_queryId).response = Witnet.Response({ + timestamp: _drTxTimestamp, + drTxHash: _drTxHash, + reporter: msg.sender, + cborBytes: _cborBytes + }); + } + + function __reportResultAndReward( + uint256 _queryId, + uint256 _timestamp, + bytes32 _drTxHash, + bytes calldata _cborBytes + ) + internal + returns (uint256 _evmReward) + { + _evmReward = __reportResult(_queryId, _timestamp, _drTxHash, _cborBytes); + // transfer reward to reporter + __safeTransferTo( + payable(msg.sender), + _evmReward + ); } function __setReporters(address[] memory _reporters) internal { diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index d3bf30358..af1f75043 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -17,6 +17,8 @@ contract WitnetRequestBoardTrustableDefault WitnetRequestBoardTrustableBase { uint256 internal immutable __reportResultGasBase; + uint256 internal immutable __reportResultWithCallbackGasBase; + uint256 internal immutable __reportResultWithCallbackRevertGasBase; uint256 internal immutable __sstoreFromZeroGas; constructor( @@ -24,6 +26,8 @@ contract WitnetRequestBoardTrustableDefault bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, uint256 _sstoreFromZeroGas ) WitnetRequestBoardTrustableBase( @@ -34,6 +38,8 @@ contract WitnetRequestBoardTrustableDefault ) { __reportResultGasBase = _reportResultGasBase; + __reportResultWithCallbackGasBase = _reportResultWithCallbackGasBase; + __reportResultWithCallbackRevertGasBase = _reportResultWithCallbackRevertGasBase; __sstoreFromZeroGas = _sstoreFromZeroGas; } @@ -53,24 +59,39 @@ contract WitnetRequestBoardTrustableDefault return _gasPrice * ( __reportResultGasBase + __sstoreFromZeroGas * ( - 3 + _resultMaxSize / 32 + 5 + _resultMaxSize / 32 ) ); } /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _maxCallbackGas) + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) public view virtual override returns (uint256) { - return _gasPrice * ( - __reportResultGasBase - + 3 * __sstoreFromZeroGas - + _maxCallbackGas + uint _reportResultWithetCallbackGasThreshold = ( + __reportResultWithCallbackRevertGasBase + + __sstoreFromZeroGas * ( + 5 + _resultMaxSize / 32 + ) ); + if ( + _maxCallbackGas < _reportResultWithetCallbackGasThreshold + || __reportResultWithCallbackGasBase + _maxCallbackGas < _reportResultWithetCallbackGasThreshold + ) { + return (_gasPrice * _reportResultWithetCallbackGasThreshold); + } else { + return ( + _gasPrice * ( + __reportResultWithCallbackGasBase + + _maxCallbackGas + ) + ); + } } @@ -98,7 +119,7 @@ contract WitnetRequestBoardTrustableDefault /// Transfers ETHs to given address. /// @param _to Recipient address. /// @param _amount Amount of ETHs to transfer. - function _safeTransferTo(address payable _to, uint256 _amount) + function __safeTransferTo(address payable _to, uint256 _amount) internal virtual override { diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 96f204efc..e64fe7265 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -44,12 +44,12 @@ interface IWitnetRequestBoard { /// @param gasPrice Expected gas price to pay upon posting the data request. /// @param resultMaxSize Maximum expected size of returned data (in bytes). /// @param maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 gasPrice, uint256 maxCallbackGas) external view returns (uint256); + function estimateBaseFeeWithCallback(uint256 gasPrice, uint256 resultMaxSize, uint256 maxCallbackGas) external view returns (uint256); /// @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. /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. - function estimateQueryEarnings(uint256 queryId) external view returns (int256); + function estimateQueryEarnings(uint256 queryId, uint256 gasPrice) external view returns (int256); /// @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 @@ -92,21 +92,6 @@ interface IWitnetRequestBoard { uint256 maxCallbackGas ) external payable returns (uint256 queryId); - /// @notice Requests the execution of the given Witnet Data Request bytecode, in expectation that it will be - /// @notice relayed and solved by the Witnet blockchain. A reward amount is escrowed by the Witnet Request Board - /// @notice that will be transferred to the reporter who relays back the Witnet-provided result to this request. - /// @dev Fails if, provided reward is too low. - /// @dev The caller must be a contract implementing the IWitnetConsumer interface. - /// @param radBytecode 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. - /// @return A unique query identifier. - function postRequestWithCallback( - bytes calldata radBytecode, - WitnetV2.RadonSLA calldata querySLA, - uint256 maxCallbackGas - ) external payable returns (uint256); - /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param queryId The unique query identifier. function upgradeQueryReward(uint256 queryId) external payable; diff --git a/contracts/interfaces/IWitnetRequestBoardReporter.sol b/contracts/interfaces/IWitnetRequestBoardReporter.sol index 28895bd9d..bb56b3461 100644 --- a/contracts/interfaces/IWitnetRequestBoardReporter.sol +++ b/contracts/interfaces/IWitnetRequestBoardReporter.sol @@ -19,7 +19,7 @@ interface IWitnetRequestBoardReporter { uint256 _queryId, bytes32 _drTxHash, bytes calldata _result - ) external; + ) external returns (uint256); /// @notice Reports the Witnet-provided result to a previously posted request. /// @dev Fails if: @@ -36,7 +36,7 @@ interface IWitnetRequestBoardReporter { uint256 _timestamp, bytes32 _drTxHash, bytes calldata _result - ) external; + ) external returns (uint256); /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. /// @dev Must emit a PostedResult event for every succesfully reported result. @@ -46,7 +46,7 @@ interface IWitnetRequestBoardReporter { /// - hash of the corresponding data request tx at the Witnet side-chain level; /// - data request result in raw bytes. /// @param _verbose If true, must emit a BatchReportError event for every failing report, if any. - function reportResultBatch(BatchResult[] calldata _batchResults, bool _verbose) external; + function reportResultBatch(BatchResult[] calldata _batchResults, bool _verbose) external returns (uint256); struct BatchResult { uint256 queryId; diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index c1b314c58..b46b84194 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -11,10 +11,16 @@ interface IWitnetConsumer { /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. - /// @param queryId The unique identifier of the Witnet query being reported. + /// @param witnetQueryId The unique identifier of the Witnet query being reported. + /// @param witnetCommitRevealHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param witnetCommitTimestamp Timestamp when the reported value was captured by the Witnet blockchain. + /// @param witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. /// @param cborValue The CBOR-encoded resulting value of the Witnet query being reported. function reportWitnetQueryResult( - uint256 queryId, + uint256 witnetQueryId, + bytes32 witnetCommitRevealHash, + uint256 witnetCommitTimestamp, + uint256 witnetEvmFinalityBlock, WitnetCBOR.CBOR calldata cborValue ) external; @@ -24,11 +30,18 @@ interface IWitnetConsumer { /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. - /// @param queryId The unique identifier of the Witnet query being reported. + /// @param witnetQueryId The unique identifier of the Witnet query being reported. + /// @param witnetQueryId The unique identifier of the Witnet query being reported. + /// @param witnetCommitRevealHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param witnetCommitTimestamp Timestamp when the reported value was captured by the Witnet blockchain. + /// @param witnetEvmFinalityBlock 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. /// @param errorArgs Error arguments, if any. An empty buffer is to be passed if no error arguments apply. function reportWitnetQueryError( - uint256 queryId, + uint256 witnetQueryId, + bytes32 witnetCommitRevealHash, + uint256 witnetCommitTimestamp, + uint256 witnetEvmFinalityBlock, Witnet.ResultErrorCodes errorCode, WitnetCBOR.CBOR calldata errorArgs ) external; diff --git a/contracts/patterns/Payable.sol b/contracts/patterns/Payable.sol index e31a8d1da..8313a0c71 100644 --- a/contracts/patterns/Payable.sol +++ b/contracts/patterns/Payable.sol @@ -20,5 +20,5 @@ abstract contract Payable { function _getMsgValue() internal view virtual returns (uint256); /// Perform safe transfer or whatever token is used for paying rewards. - function _safeTransferTo(address payable, uint256) internal virtual; + function __safeTransferTo(address payable, uint256) internal virtual; } diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js index 16bcf2e8f..d05404f75 100644 --- a/migrations/witnet.settings.js +++ b/migrations/witnet.settings.js @@ -667,9 +667,12 @@ module.exports = { }, WitnetRequestBoard: { immutables: { - types: [ 'uint256', ], + types: [ 'uint256', 'uint256', 'uint256', 'uint256', ], values: [ - /* _reportResultGasLimit */ 133000, + /* _reportResultGasBase */ 57898, + /* _reportResultWithCallbackGasBase */ 72140, + /* _reportResultWithCallbackRevertGasBase */ 66685, + /* _sstoreFromZeroGas */ 20000, ] }, libs: [ "WitnetErrorsLib", ], From b6eb3471fa43dc04ff23e77d16d75bfdaf39ab2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 08:55:37 +0100 Subject: [PATCH 062/149] chore: reorder methods on IWRB --- .../WitnetRequestBoardTrustableBase.sol | 650 +++++++++--------- contracts/interfaces/IWitnetRequestBoard.sol | 94 ++- 2 files changed, 368 insertions(+), 376 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 7fb2c8453..08adaa0f0 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -174,225 +174,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardAdmin' ---------------------------------------------------------- - - /// Gets admin/owner address. - function owner() - public view - override - returns (address) - { - return __storage().owner; - } - - /// Transfers ownership. - function transferOwnership(address _newOwner) - public - virtual override - onlyOwner - { - address _owner = __storage().owner; - if (_newOwner != _owner) { - __storage().owner = _newOwner; - emit OwnershipTransferred(_owner, _newOwner); - } - } - - - // ================================================================================================================ - // --- Full implementation of 'IWitnetRequestBoardAdminACLs' ------------------------------------------------------ - - /// 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 _acls().isReporter_[_reporter]; - } - - /// 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 - onlyOwner - { - __setReporters(_reporters); - } - - /// 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 - onlyOwner - { - for (uint ix = 0; ix < _exReporters.length; ix ++) { - address _reporter = _exReporters[ix]; - _acls().isReporter_[_reporter] = false; - } - emit ReportersUnset(_exReporters); - } - - - // ================================================================================================================ - // --- IWitnetRequestBoard Reporter methods ----------------------------------------------------------------------- - - /// Reports the Witnet-provided 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 `_drTxHash` is zero; - /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique identifier of the data request. - /// @param _drTxHash The hash of the solving tally transaction in Witnet. - /// @param _cborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - bytes32 _drTxHash, - bytes calldata _cborBytes - ) - external - override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - require( - _drTxHash != 0, - "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" - ); - // Ensures the result bytes do not have zero length - // This would not be a valid encoding with CBOR and could trigger a reentrancy attack - require( - _cborBytes.length != 0, - "WitnetRequestBoardTrustableDefault: result cannot be empty" - ); - // Do actual report: - // solhint-disable not-rely-on-time - return __reportResultAndReward( - _queryId, - block.timestamp, - _drTxHash, - _cborBytes - ); - } - - /// Reports the Witnet-provided result to a previously posted request. - /// @dev Fails if: - /// @dev - called from unauthorized address; - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_drTxHash` is zero; - /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique query identifier - /// @param _timestamp The timestamp of the solving tally transaction in Witnet. - /// @param _drTxHash The hash of the solving tally transaction in Witnet. - /// @param _cborBytes The result itself as bytes. - function reportResult( - uint256 _queryId, - uint256 _timestamp, - bytes32 _drTxHash, - bytes calldata _cborBytes - ) - external - override - onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) - { - require( - _timestamp <= block.timestamp, - "WitnetRequestBoardTrustableDefault: bad timestamp" - ); - require( - _drTxHash != 0, - "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" - ); - // Ensures the result bytes do not have zero length (this would not be a valid CBOR encoding - // and could trigger a reentrancy attack) - require( - _cborBytes.length != 0, - "WitnetRequestBoardTrustableDefault: result cannot be empty" - ); - // Do actual report and return reward transfered to the reproter: - return __reportResultAndReward( - _queryId, - _timestamp, - _drTxHash, - _cborBytes - ); - } - - /// Reports Witnet-provided results to multiple requests within a single EVM tx. - /// @dev Fails if called from unauthorized address. - /// @dev Emits a PostedResult event for every succesfully reported result, if any. - /// @param _batchResults Array of BatchedResult 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. - /// @param _verbose If true, emits a BatchReportError event for every failing report, if any. - function reportResultBatch( - IWitnetRequestBoardReporter.BatchResult[] calldata _batchResults, - bool _verbose - ) - external - override - onlyReporters - returns (uint256 _batchReward) - { - for ( uint _i = 0; _i < _batchResults.length; _i ++) { - if (_statusOf(_batchResults[_i].queryId) != Witnet.QueryStatus.Posted) { - if (_verbose) { - emit BatchReportError( - _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad queryId" - ); - } - } else if (_batchResults[_i].drTxHash == 0) { - if (_verbose) { - emit BatchReportError( - _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad drTxHash" - ); - } - } else if (_batchResults[_i].cborBytes.length == 0) { - if (_verbose) { - emit BatchReportError( - _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad cborBytes" - ); - } - } else if (_batchResults[_i].timestamp > 0 && _batchResults[_i].timestamp > block.timestamp) { - if (_verbose) { - emit BatchReportError( - _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad timestamp" - ); - } - } else { - _batchReward += __reportResult( - _batchResults[_i].queryId, - _batchResults[_i].timestamp == 0 ? block.timestamp : _batchResults[_i].timestamp, - _batchResults[_i].drTxHash, - _batchResults[_i].cborBytes - ); - } - } - // Transfer rewards to all reported results in one single transfer to the reporter: - if (_batchReward > 0) { - __safeTransferTo( - payable(msg.sender), - _batchReward - ); - } - } - - - // ================================================================================================================ - // --- IWitnetRequestBoard Requester methods ---------------------------------------------------------------------- + // --- Partial implementation of IWitnetRequestBoard -------------------------------------------------------------- /// @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; @@ -492,50 +274,151 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev the one that actually posted the given request. /// @param _queryId The unique query identifier. function fetchQueryResponse(uint256 _queryId) - public virtual override - onlyRequester(_queryId) + external inStatus(_queryId, Witnet.QueryStatus.Reported) + onlyRequester(_queryId) returns (Witnet.Response memory _response) { _response = __seekQuery(_queryId).response; delete __storage().queries[_queryId]; } - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @param _radHash The radHash of the Witnet Data Request. - /// @param _slaHash The slaHash of the Witnet Data Request. - function postRequest(bytes32 _radHash, bytes32 _slaHash) - virtual override - public payable - checkReward(estimateBaseFee(_getGasPrice(), 32)) - returns (uint256 _queryId) + /// Gets the whole Query data contents, if any, no matter its current status. + function getQueryData(uint256 _queryId) + external view + override + returns (Witnet.Query memory) { - _queryId = __postRequest(_radHash, _slaHash); - // Let observers know that a new request has been posted - emit NewQuery(_queryId, _getMsgValue()); + return __storage().queries[_queryId]; } - /// @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-provided result to this request. - /// @dev Fails if provided reward is too low. - /// @dev The result to the query will be saved into the WitnetRequestBoard storage. - /// @param _radHash 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 _radHash, - WitnetV2.RadonSLA calldata _querySLA - ) - virtual override - public payable - checkReward(estimateBaseFee(_getGasPrice(), 32)) - checkSLA(_querySLA) + /// Gets current status of given query. + function getQueryStatus(uint256 _queryId) + external view + override + returns (Witnet.QueryStatus) + { + return _statusOf(_queryId); + + } + + /// Retrieves the whole Request record posted to the Witnet Request Board. + /// @dev Fails if the `_queryId` is not valid or, if it has already been reported + /// @dev or deleted. + /// @param _queryId The unique identifier of a previously posted query. + function getQueryRequest(uint256 _queryId) + external view + override + inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (Witnet.Request memory) + { + return __seekQueryRequest(_queryId); + } + + /// Retrieves the serialized bytecode of a previously posted Witnet Data Request. + /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode + /// @dev got changed after being posted. Returns empty array once it gets reported, + /// @dev or deleted. + /// @param _queryId The unique query identifier. + function getQueryRequestBytecode(uint256 _queryId) + external view + virtual override + returns (bytes memory _bytecode) + { + require( + _statusOf(_queryId) != Witnet.QueryStatus.Unknown, + "WitnetRequestBoardTrustableBase: not yet posted" + ); + Witnet.Request storage __request = __seekQueryRequest(_queryId); + if (__request._addr != address(0)) { + _bytecode = IWitnetRequest(__request._addr).bytecode(); + } else if (__request.radHash != bytes32(0)) { + _bytecode = registry().bytecodeOf(__request.radHash); + } + } + + /// Retrieves the Witnet-provided 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) + external view + override + inStatus(_queryId, Witnet.QueryStatus.Reported) + returns (Witnet.Response memory _response) + { + return __seekQueryResponse(_queryId); + } + + /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. + /// @dev Fails if the `_queryId` is not in 'Reported' status. + /// @param _queryId The unique query identifier + function getQueryResponseResult(uint256 _queryId) + external view + override + inStatus(_queryId, Witnet.QueryStatus.Reported) + returns (Witnet.Result memory) + { + Witnet.Response storage _response = __seekQueryResponse(_queryId); + return _response.cborBytes.resultFromCborBytes(); + } + + /// Retrieves the reward currently set for a previously posted request. + /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _queryId The unique query identifier + function getQueryReward(uint256 _queryId) + external view + override + inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (uint256) + { + return __seekQueryRequest(_queryId).evmReward; + } + + /// Returns next request id to be generated by the Witnet Request Board. + function getNextQueryId() + external view + override + returns (uint256) + { + return __storage().nonce + 1; + } + + /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. + /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided + /// result to this request. + /// @dev Fails if: + /// @dev - provided reward is too low. + /// @param _radHash The radHash of the Witnet Data Request. + /// @param _slaHash The slaHash of the Witnet Data Request. + function postRequest(bytes32 _radHash, bytes32 _slaHash) + virtual override + external payable + checkReward(estimateBaseFee(_getGasPrice(), 32)) + returns (uint256 _queryId) + { + _queryId = __postRequest(_radHash, _slaHash); + // Let observers know that a new request has been posted + emit NewQuery(_queryId, _getMsgValue()); + } + + /// @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-provided result to this request. + /// @dev Fails if provided reward is too low. + /// @dev The result to the query will be saved into the WitnetRequestBoard storage. + /// @param _radHash 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 _radHash, + WitnetV2.RadonSLA calldata _querySLA + ) + virtual override + external payable + checkReward(estimateBaseFee(_getGasPrice(), 32)) + checkSLA(_querySLA) returns (uint256 _queryId) { _queryId = __postRequest( @@ -559,7 +442,7 @@ abstract contract WitnetRequestBoardTrustableBase WitnetV2.RadonSLA calldata _querySLA ) virtual override - public payable + external payable checkReward(estimateBaseFee(_getGasPrice(), 32)) checkSLA(_querySLA) returns (uint256 _queryId) @@ -610,7 +493,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev reward value gets below new recalculated threshold. /// @param _queryId The unique query identifier. function upgradeQueryReward(uint256 _queryId) - public payable + external payable virtual override inStatus(_queryId, Witnet.QueryStatus.Posted) { @@ -619,109 +502,222 @@ abstract contract WitnetRequestBoardTrustableBase emit QueryRewardUpgraded(_queryId, __request.evmReward); } - + // ================================================================================================================ - // --- 'IWitnetRequestBoard' Viewer methods ----------------------------------------------------------------------- + // --- Full implementation of IWitnetRequestBoardReporter --------------------------------------------------------- - /// Returns next request id to be generated by the Witnet Request Board. - function getNextQueryId() - external view + /// Reports the Witnet-provided 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 `_drTxHash` is zero; + /// @dev - length of provided `_result` is zero. + /// @param _queryId The unique identifier of the data request. + /// @param _drTxHash The hash of the solving tally transaction in Witnet. + /// @param _cborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + bytes32 _drTxHash, + bytes calldata _cborBytes + ) + external override + onlyReporters + inStatus(_queryId, Witnet.QueryStatus.Posted) returns (uint256) { - return __storage().nonce + 1; + require( + _drTxHash != 0, + "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + ); + // Ensures the result bytes do not have zero length + // This would not be a valid encoding with CBOR and could trigger a reentrancy attack + require( + _cborBytes.length != 0, + "WitnetRequestBoardTrustableDefault: result cannot be empty" + ); + // Do actual report: + // solhint-disable not-rely-on-time + return __reportResultAndReward( + _queryId, + block.timestamp, + _drTxHash, + _cborBytes + ); } - /// Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 _queryId) - external view - override - returns (Witnet.Query memory) + /// Reports the Witnet-provided result to a previously posted request. + /// @dev Fails if: + /// @dev - called from unauthorized address; + /// @dev - the `_queryId` is not in 'Posted' status. + /// @dev - provided `_drTxHash` is zero; + /// @dev - length of provided `_result` is zero. + /// @param _queryId The unique query identifier + /// @param _timestamp The timestamp of the solving tally transaction in Witnet. + /// @param _drTxHash The hash of the solving tally transaction in Witnet. + /// @param _cborBytes The result itself as bytes. + function reportResult( + uint256 _queryId, + uint256 _timestamp, + bytes32 _drTxHash, + bytes calldata _cborBytes + ) + external + override + onlyReporters + inStatus(_queryId, Witnet.QueryStatus.Posted) + returns (uint256) { - return __storage().queries[_queryId]; + require( + _timestamp <= block.timestamp, + "WitnetRequestBoardTrustableDefault: bad timestamp" + ); + require( + _drTxHash != 0, + "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + ); + // Ensures the result bytes do not have zero length (this would not be a valid CBOR encoding + // and could trigger a reentrancy attack) + require( + _cborBytes.length != 0, + "WitnetRequestBoardTrustableDefault: result cannot be empty" + ); + // Do actual report and return reward transfered to the reproter: + return __reportResultAndReward( + _queryId, + _timestamp, + _drTxHash, + _cborBytes + ); } - /// Gets current status of given query. - function getQueryStatus(uint256 _queryId) - external view + /// Reports Witnet-provided results to multiple requests within a single EVM tx. + /// @dev Fails if called from unauthorized address. + /// @dev Emits a PostedResult event for every succesfully reported result, if any. + /// @param _batchResults Array of BatchedResult 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. + /// @param _verbose If true, emits a BatchReportError event for every failing report, if any. + function reportResultBatch( + IWitnetRequestBoardReporter.BatchResult[] calldata _batchResults, + bool _verbose + ) + external override - returns (Witnet.QueryStatus) + onlyReporters + returns (uint256 _batchReward) { - return _statusOf(_queryId); - + for ( uint _i = 0; _i < _batchResults.length; _i ++) { + if (_statusOf(_batchResults[_i].queryId) != Witnet.QueryStatus.Posted) { + if (_verbose) { + emit BatchReportError( + _batchResults[_i].queryId, + "WitnetRequestBoardTrustableBase: bad queryId" + ); + } + } else if (_batchResults[_i].drTxHash == 0) { + if (_verbose) { + emit BatchReportError( + _batchResults[_i].queryId, + "WitnetRequestBoardTrustableBase: bad drTxHash" + ); + } + } else if (_batchResults[_i].cborBytes.length == 0) { + if (_verbose) { + emit BatchReportError( + _batchResults[_i].queryId, + "WitnetRequestBoardTrustableBase: bad cborBytes" + ); + } + } else if (_batchResults[_i].timestamp > 0 && _batchResults[_i].timestamp > block.timestamp) { + if (_verbose) { + emit BatchReportError( + _batchResults[_i].queryId, + "WitnetRequestBoardTrustableBase: bad timestamp" + ); + } + } else { + _batchReward += __reportResult( + _batchResults[_i].queryId, + _batchResults[_i].timestamp == 0 ? block.timestamp : _batchResults[_i].timestamp, + _batchResults[_i].drTxHash, + _batchResults[_i].cborBytes + ); + } + } + // Transfer rewards to all reported results in one single transfer to the reporter: + if (_batchReward > 0) { + __safeTransferTo( + payable(msg.sender), + _batchReward + ); + } } - /// Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `_queryId` is not valid or, if it has already been reported - /// @dev or deleted. - /// @param _queryId The unique identifier of a previously posted query. - function getQueryRequest(uint256 _queryId) - external view + + // ================================================================================================================ + // --- Full implementation of 'IWitnetRequestBoardAdmin' ---------------------------------------------------------- + + /// Gets admin/owner address. + function owner() + public view override - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (Witnet.Request memory) + returns (address) { - return __seekQueryRequest(_queryId); + return __storage().owner; } - - /// Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode - /// @dev got changed after being posted. Returns empty array once it gets reported, - /// @dev or deleted. - /// @param _queryId The unique query identifier. - function getQueryRequestBytecode(uint256 _queryId) - external view + + /// Transfers ownership. + function transferOwnership(address _newOwner) + public virtual override - returns (bytes memory _bytecode) + onlyOwner { - require( - _statusOf(_queryId) != Witnet.QueryStatus.Unknown, - "WitnetRequestBoardTrustableBase: not yet posted" - ); - Witnet.Request storage __request = __seekQueryRequest(_queryId); - if (__request._addr != address(0)) { - _bytecode = IWitnetRequest(__request._addr).bytecode(); - } else if (__request.radHash != bytes32(0)) { - _bytecode = registry().bytecodeOf(__request.radHash); + address _owner = __storage().owner; + if (_newOwner != _owner) { + __storage().owner = _newOwner; + emit OwnershipTransferred(_owner, _newOwner); } } - /// Retrieves the Witnet-provided 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) - external view - override - inStatus(_queryId, Witnet.QueryStatus.Reported) - returns (Witnet.Response memory _response) - { - return __seekQueryResponse(_queryId); + + // ================================================================================================================ + // --- Full implementation of 'IWitnetRequestBoardAdminACLs' ------------------------------------------------------ + + /// 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 _acls().isReporter_[_reporter]; } - /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier - function getQueryResponseResult(uint256 _queryId) - external view + /// 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 - inStatus(_queryId, Witnet.QueryStatus.Reported) - returns (Witnet.Result memory) + onlyOwner { - Witnet.Response storage _response = __seekQueryResponse(_queryId); - return _response.cborBytes.resultFromCborBytes(); + __setReporters(_reporters); } - /// Retrieves the reward currently set for a previously posted request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _queryId The unique query identifier - function getQueryReward(uint256 _queryId) - external view + /// 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 - inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (uint256) + onlyOwner { - return __seekQueryRequest(_queryId).evmReward; + for (uint ix = 0; ix < _exReporters.length; ix ++) { + address _reporter = _exReporters[ix]; + _acls().isReporter_[_reporter] = false; + } + emit ReportersUnset(_exReporters); } diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index e64fe7265..2562195e3 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -26,19 +26,11 @@ interface IWitnetRequestBoard { /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. function checkResultTraceability(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); - /// @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, uint256 resultMaxSize) external view returns (uint256); - - /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, - /// removing the whole query from the WRB storage. - /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to - /// @dev the one that actually posted the given request. - /// @param queryId The unique query identifier. - function fetchQueryResponse(uint256 queryId) external returns (Witnet.Response memory); /// @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. @@ -51,6 +43,51 @@ interface IWitnetRequestBoard { /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. function estimateQueryEarnings(uint256 queryId, uint256 gasPrice) external view returns (int256); + /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, + /// removing the whole query from the WRB storage. + /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to + /// @dev the one that actually posted the given request. + /// @param queryId The unique query identifier. + function fetchQueryResponse(uint256 queryId) external returns (Witnet.Response memory); + + /// @notice Gets the whole Query data contents, if any, no matter its current status. + function getQueryData(uint256 queryId) external view returns (Witnet.Query memory); + + /// @notice Gets current status of given query. + function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); + + /// @notice Retrieves the whole Request record posted to the Witnet Request Board. + /// @dev Fails if the `queryId` is not valid or, if it has already been reported + /// @dev or deleted. + /// @param queryId The unique identifier of a previously posted query. + function getQueryRequest(uint256 queryId) external view returns (Witnet.Request memory); + + /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. + /// @dev Fails if the `queryId` is not valid, or if the related script bytecode + /// @dev got changed after being posted. Returns empty array once it gets reported, + /// @dev or deleted. + /// @param queryId The unique query identifier. + function getQueryRequestBytecode(uint256 queryId) external view returns (bytes memory); + + /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. + /// @dev Fails if the `queryId` is not in 'Reported' status. + /// @param queryId The unique query identifier. + function getQueryResponse(uint256 queryId) external view returns (Witnet.Response memory); + + /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. + /// @dev Fails if the `queryId` is not in 'Reported' status. + /// @param queryId The unique query identifier. + function getQueryResponseResult(uint256 queryId) external view returns (Witnet.Result memory); + + /// @notice Returns next query id to be generated by the Witnet Request Board. + function getNextQueryId() external view returns (uint256); + + /// @notice Retrieves the reward currently set for the referred query. + /// @dev Fails if the `queryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param queryId The unique query identifier. + function getQueryReward(uint256 queryId) external view returns (uint256); + /// @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-provided result to this request. @@ -95,48 +132,7 @@ interface IWitnetRequestBoard { /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param queryId The unique query identifier. function upgradeQueryReward(uint256 queryId) external payable; - - - /// =============================================================================================================== - /// --- Reader interface ------------------------------------------------------------------------------------------ - - /// @notice Returns next query id to be generated by the Witnet Request Board. - function getNextQueryId() external view returns (uint256); - - /// @notice Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 queryId) external view returns (Witnet.Query memory); - - /// @notice Gets current status of given query. - function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); - - /// @notice Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `queryId` is not valid or, if it has already been reported - /// @dev or deleted. - /// @param queryId The unique identifier of a previously posted query. - function getQueryRequest(uint256 queryId) external view returns (Witnet.Request memory); - - /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `queryId` is not valid, or if the related script bytecode - /// @dev got changed after being posted. Returns empty array once it gets reported, - /// @dev or deleted. - /// @param queryId The unique query identifier. - function getQueryRequestBytecode(uint256 queryId) external view returns (bytes memory); - /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. - /// @dev Fails if the `queryId` is not in 'Reported' status. - /// @param queryId The unique query identifier. - function getQueryResponse(uint256 queryId) external view returns (Witnet.Response memory); - - /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `queryId` is not in 'Reported' status. - /// @param queryId The unique query identifier. - function getQueryResponseResult(uint256 queryId) external view returns (Witnet.Result memory); - - /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `queryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param queryId The unique query identifier. - function getQueryReward(uint256 queryId) external view returns (uint256); /// =============================================================================================================== /// --- Deprecating methods --------------------------------------------------------------------------------------- From 7c2c088354252767fb54fa5ba7732301b1c03673 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 10:03:36 +0100 Subject: [PATCH 063/149] refactor: *Query* events -> *WitnetQuery* --- .../defaults/WitnetRequestBoardTrustableBase.sol | 12 ++++++------ contracts/interfaces/IWitnetRequestBoardEvents.sol | 11 ++++++----- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 08adaa0f0..f4997e202 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -400,7 +400,7 @@ abstract contract WitnetRequestBoardTrustableBase { _queryId = __postRequest(_radHash, _slaHash); // Let observers know that a new request has been posted - emit NewQuery(_queryId, _getMsgValue()); + emit NewWitnetQuery(_queryId, _getMsgValue()); } /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and @@ -426,7 +426,7 @@ abstract contract WitnetRequestBoardTrustableBase _querySLA.packed() ); // Let observers know that a new request has been posted - emit NewQuery(_queryId, _getMsgValue()); + emit NewWitnetQuery(_queryId, _getMsgValue()); } /// @notice Requests the execution of the given Witnet Data Request bytecode, in expectation that it will be relayed and @@ -499,7 +499,7 @@ abstract contract WitnetRequestBoardTrustableBase { Witnet.Request storage __request = __seekQueryRequest(_queryId); __request.evmReward += _getMsgValue(); - emit QueryRewardUpgraded(_queryId, __request.evmReward); + emit WitnetQueryRewardUpgraded(_queryId, __request.evmReward); } @@ -821,7 +821,7 @@ abstract contract WitnetRequestBoardTrustableBase } if (_evmCallbackSuccess) { // => the callback run successfully - emit QueryCallback( + emit WitnetResponseDelivered( _queryId, _getGasPrice(), _evmCallbackActualGas - gasleft() @@ -830,7 +830,7 @@ abstract contract WitnetRequestBoardTrustableBase delete __storage().queries[_queryId]; } else { // => the callback reverted - emit QueryCallbackRevert( + emit WitnetResponseDeliveryFailed( _queryId, _getGasPrice(), _evmCallbackActualGas - gasleft(), @@ -843,7 +843,7 @@ abstract contract WitnetRequestBoardTrustableBase } } else { // => no callback is involved - emit QueryReport( + emit WitnetQueryReported( _queryId, _getGasPrice() ); diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/IWitnetRequestBoardEvents.sol index e711ffce3..ad5ac37e5 100644 --- a/contracts/interfaces/IWitnetRequestBoardEvents.sol +++ b/contracts/interfaces/IWitnetRequestBoardEvents.sol @@ -2,21 +2,22 @@ pragma solidity >=0.7.0 <0.9.0; interface IWitnetRequestBoardEvents { + /// Emitted every time a new query containing some verified data request is posted to the WRB. - event NewQuery(uint256 indexed id, uint256 evmReward); + event NewWitnetQuery(uint256 indexed id, uint256 evmReward); /// Emitted every time a new query containing non-verified data request is posted to the WRB. event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); /// Emitted when the reward of some not-yet reported query is upgraded. - event QueryRewardUpgraded(uint256 indexed id, uint256 evmReward); + event WitnetQueryRewardUpgraded(uint256 indexed id, uint256 evmReward); /// Emitted when a query with no callback gets reported into the WRB. - event QueryReport(uint256 indexed id, uint256 evmGasPrice); + event WitnetQueryReported(uint256 indexed id, uint256 evmGasPrice); /// Emitted when a query with a callback gets successfully reported into the WRB. - event QueryCallback(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); + event WitnetResponseDelivered(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); /// Emitted when a query with a callback cannot get reported into the WRB. - event QueryCallbackRevert(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); + event WitnetResponseDeliveryFailed(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); } From edea9e874d0989bc9c8213a73c928e39e8ba4050 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Sat, 25 Nov 2023 10:18:18 +0100 Subject: [PATCH 064/149] refactor: IWRB.checkResult* -> IWRB.getQuery* --- contracts/apps/UsingWitnet.sol | 8 +- contracts/apps/WitnetPriceFeeds.sol | 8 +- contracts/apps/WitnetRandomness.sol | 4 +- .../WitnetRequestBoardTrustableBase.sol | 188 ++++++++++-------- contracts/interfaces/IWitnetRequestBoard.sol | 51 +++-- .../interfaces/IWitnetRequestBoardEvents.sol | 6 +- 6 files changed, 142 insertions(+), 123 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index c34217ba1..088d67e02 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -66,28 +66,28 @@ abstract contract UsingWitnet return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _resultMaxSize, _maxCallbackGas); } - function _witnetCheckQueryResultTraceability(uint256 _witnetQueryId) + function _witnetCheckQueryResultAuditTrail(uint256 _witnetQueryId) internal view returns ( uint256 _witnetQueryResponseTimestamp, bytes32 _witnetQueryResponseDrTxHash ) { - return __witnet.checkResultTraceability(_witnetQueryId); + return __witnet.getQueryResultAuditTrail(_witnetQueryId); } function _witnetCheckQueryResultStatus(uint256 _witnetQueryId) internal view returns (Witnet.ResultStatus) { - return __witnet.checkResultStatus(_witnetQueryId); + return __witnet.getQueryResultStatus(_witnetQueryId); } function _witnetCheckQueryResultError(uint256 _witnetQueryId) internal view returns (Witnet.ResultError memory) { - return __witnet.checkResultError(_witnetQueryId); + return __witnet.getQueryResultError(_witnetQueryId); } function __witnetRequestData( diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index e229e14cc..13ce07490 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -159,7 +159,7 @@ contract WitnetPriceFeeds override external view returns (Witnet.Result memory) { - return witnet.getQueryResponseResult(_latestValidQueryId(feedId)); + return witnet.getQueryResult(_latestValidQueryId(feedId)); } function latestUpdateQueryId(bytes4 feedId) @@ -187,7 +187,7 @@ contract WitnetPriceFeeds override external view returns (Witnet.ResultError memory) { - return witnet.checkResultError(latestUpdateQueryId(feedId)); + return witnet.getQueryResultError(latestUpdateQueryId(feedId)); } function latestUpdateResultStatus(bytes4 feedId) @@ -560,7 +560,7 @@ contract WitnetPriceFeeds returns (Witnet.ResultStatus) { if (_queryId > 0) { - return witnet.checkResultStatus(_queryId); + return witnet.getQueryResultStatus(_queryId); } else { return Witnet.ResultStatus.Ready; } @@ -573,7 +573,7 @@ contract WitnetPriceFeeds uint _latestUpdateQueryId = latestUpdateQueryId(feedId); if ( _latestUpdateQueryId > 0 - && witnet.checkResultStatus(_latestUpdateQueryId) == Witnet.ResultStatus.Ready + && witnet.getQueryResultStatus(_latestUpdateQueryId) == Witnet.ResultStatus.Ready ) { return _latestUpdateQueryId; } else { diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index f82d33a66..3996166e6 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -213,9 +213,9 @@ contract WitnetRandomness } uint256 _queryId = __randomize_[_block].witnetQueryId; require(_queryId != 0, "WitnetRandomness: not randomized"); - Witnet.ResultStatus _resultStatus = witnet().checkResultStatus(_queryId); + Witnet.ResultStatus _resultStatus = witnet().getQueryResultStatus(_queryId); if (_resultStatus == Witnet.ResultStatus.Ready) { - return witnet().getQueryResponseResult(_queryId).asBytes32(); + return witnet().getQueryResult(_queryId).asBytes32(); } else if (_resultStatus == Witnet.ResultStatus.Error) { uint256 _nextRandomizeBlock = __randomize_[_block].nextBlock; require(_nextRandomizeBlock != 0, "WitnetRandomness: faulty randomize"); diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index f4997e202..53bd5905e 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -175,74 +175,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- Partial implementation of IWitnetRequestBoard -------------------------------------------------------------- - - /// @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 checkResultStatus(uint256 _queryId) - virtual public view - returns (Witnet.ResultStatus) - { - Witnet.QueryStatus _queryStatus = _statusOf(_queryId); - if (_queryStatus == Witnet.QueryStatus.Reported) { - bytes storage __cborValues = __seekQueryResponse(_queryId).cborBytes; - // determine whether reported result is an error by peeking the first byte - return (__cborValues[0] == bytes1(0xd8) - ? Witnet.ResultStatus.Error - : Witnet.ResultStatus.Ready - ); - } else if (_queryStatus == Witnet.QueryStatus.Posted) { - return Witnet.ResultStatus.Awaiting; - } else { - return Witnet.ResultStatus.Void; - } - } - - /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param _queryId The unique query identifier. - function checkResultError(uint256 _queryId) - override external view - returns (Witnet.ResultError memory) - { - Witnet.ResultStatus _status = checkResultStatus(_queryId); - try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_queryId).cborBytes) - returns (Witnet.ResultError memory _resultError) - { - return _resultError; - } - catch Error(string memory _reason) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) - }); - } - catch (bytes memory) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetErrorsLib: assertion failed" - }); - } - } - - /// @notice Returns query's result traceability data - /// @param _queryId The unique query identifier. - /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. - function checkResultTraceability(uint256 _queryId) - external view - override - returns (uint256, bytes32) - { - Witnet.Response storage __response = __seekQueryResponse(_queryId); - return ( - __response.timestamp, - __response.drTxHash - ); - } - + /// @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. /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. @@ -293,16 +226,6 @@ abstract contract WitnetRequestBoardTrustableBase return __storage().queries[_queryId]; } - /// Gets current status of given query. - function getQueryStatus(uint256 _queryId) - external view - override - returns (Witnet.QueryStatus) - { - return _statusOf(_queryId); - - } - /// Retrieves the whole Request record posted to the Witnet Request Board. /// @dev Fails if the `_queryId` is not valid or, if it has already been reported /// @dev or deleted. @@ -310,7 +233,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryRequest(uint256 _queryId) external view override - inStatus(_queryId, Witnet.QueryStatus.Posted) + // inStatus(_queryId, Witnet.QueryStatus.Posted) returns (Witnet.Request memory) { return __seekQueryRequest(_queryId); @@ -344,7 +267,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryResponse(uint256 _queryId) external view override - inStatus(_queryId, Witnet.QueryStatus.Reported) + // inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Response memory _response) { return __seekQueryResponse(_queryId); @@ -353,16 +276,83 @@ abstract contract WitnetRequestBoardTrustableBase /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `_queryId` is not in 'Reported' status. /// @param _queryId The unique query identifier - function getQueryResponseResult(uint256 _queryId) + function getQueryResult(uint256 _queryId) external view override - inStatus(_queryId, Witnet.QueryStatus.Reported) + // inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Result memory) { Witnet.Response storage _response = __seekQueryResponse(_queryId); return _response.cborBytes.resultFromCborBytes(); } + /// @notice Returns query's result traceability data + /// @param _queryId The unique query identifier. + /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. + function getQueryResultAuditTrail(uint256 _queryId) + external view + override + returns (uint256, bytes32) + { + Witnet.Response storage __response = __seekQueryResponse(_queryId); + return ( + __response.timestamp, + __response.drTxHash + ); + } + + /// @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) + override external view + returns (Witnet.ResultError memory) + { + Witnet.ResultStatus _status = getQueryResultStatus(_queryId); + try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_queryId).cborBytes) + returns (Witnet.ResultError memory _resultError) + { + return _resultError; + } + catch Error(string memory _reason) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) + }); + } + catch (bytes memory) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitnetErrorsLib: assertion failed" + }); + } + } + + /// @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 getQueryResultStatus(uint256 _queryId) + virtual public view + returns (Witnet.ResultStatus) + { + Witnet.QueryStatus _queryStatus = _statusOf(_queryId); + if (_queryStatus == Witnet.QueryStatus.Reported) { + bytes storage __cborValues = __seekQueryResponse(_queryId).cborBytes; + // determine whether reported result is an error by peeking the first byte + return (__cborValues[0] == bytes1(0xd8) + ? Witnet.ResultStatus.Error + : Witnet.ResultStatus.Ready + ); + } else if (_queryStatus == Witnet.QueryStatus.Posted) { + return Witnet.ResultStatus.Awaiting; + } else { + return Witnet.ResultStatus.Void; + } + } + /// Retrieves the reward currently set for a previously posted request. /// @dev Fails if the `_queryId` is not valid or, if it has already been /// @dev reported, or deleted. @@ -376,6 +366,16 @@ abstract contract WitnetRequestBoardTrustableBase return __seekQueryRequest(_queryId).evmReward; } + /// Gets current status of given query. + function getQueryStatus(uint256 _queryId) + external view + override + returns (Witnet.QueryStatus) + { + return _statusOf(_queryId); + + } + /// Returns next request id to be generated by the Witnet Request Board. function getNextQueryId() external view @@ -481,7 +481,29 @@ abstract contract WitnetRequestBoardTrustableBase _querySLA.packed() ); __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; - emit NewQuery(_queryId, _getMsgValue()); + emit NewWitnetQuery(_queryId, _getMsgValue()); + } + + function retryQuery(uint256 _queryId) + virtual override + external payable + inStatus(_queryId, Witnet.QueryStatus.Reported) + onlyRequester(_queryId) + returns (uint256 _newQuery) + { + _newQuery = __newQuery(); + __storage().queries[_newQuery] = __storage().queries[_queryId]; + // todo ... + } + + function retryQueryWithCallback(uint256 _queryId, uint256) + virtual override + external payable + inStatus(_queryId, Witnet.QueryStatus.Reported) + onlyRequester(_queryId) + returns (uint256) + { + // TODO } /// Increments the reward of a previously posted request by adding the transaction value to it. diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 2562195e3..57aa59dfd 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -4,27 +4,6 @@ pragma solidity >=0.7.0 <0.9.0; import "../libs/WitnetV2.sol"; interface IWitnetRequestBoard { - - /// =============================================================================================================== - /// --- Requester interface --------------------------------------------------------------------------------------- - - /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param queryId The unique query identifier. - function checkResultError(uint256 queryId) external view returns (Witnet.ResultError memory); - - /// @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 checkResultStatus(uint256 queryId) external view returns (Witnet.ResultStatus); - - /// @notice Returns query's result traceability data - /// @param queryId The unique query identifier. - /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. - function checkResultTraceability(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `resultMaxSize`. @@ -53,9 +32,6 @@ interface IWitnetRequestBoard { /// @notice Gets the whole Query data contents, if any, no matter its current status. function getQueryData(uint256 queryId) external view returns (Witnet.Query memory); - /// @notice Gets current status of given query. - function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); - /// @notice Retrieves the whole Request record posted to the Witnet Request Board. /// @dev Fails if the `queryId` is not valid or, if it has already been reported /// @dev or deleted. @@ -77,10 +53,25 @@ interface IWitnetRequestBoard { /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. /// @dev Fails if the `queryId` is not in 'Reported' status. /// @param queryId The unique query identifier. - function getQueryResponseResult(uint256 queryId) external view returns (Witnet.Result memory); + function getQueryResult(uint256 queryId) external view returns (Witnet.Result memory); - /// @notice Returns next query id to be generated by the Witnet Request Board. - function getNextQueryId() external view returns (uint256); + /// @notice Returns query's result traceability data + /// @param queryId The unique query identifier. + /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. + function getQueryResultAuditTrail(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); + + /// @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) external view returns (Witnet.ResultError memory); + + /// @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 getQueryResultStatus(uint256 queryId) external view returns (Witnet.ResultStatus); /// @notice Retrieves the reward currently set for the referred query. /// @dev Fails if the `queryId` is not valid or, if it has already been @@ -88,6 +79,12 @@ interface IWitnetRequestBoard { /// @param queryId The unique query identifier. function getQueryReward(uint256 queryId) external view returns (uint256); + /// @notice Gets current status of given query. + function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); + + /// @notice Returns next query id to be generated by the Witnet Request Board. + function getNextQueryId() external view returns (uint256); + /// @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-provided result to this request. diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/IWitnetRequestBoardEvents.sol index ad5ac37e5..ffc1b84fe 100644 --- a/contracts/interfaces/IWitnetRequestBoardEvents.sol +++ b/contracts/interfaces/IWitnetRequestBoardEvents.sol @@ -8,13 +8,13 @@ interface IWitnetRequestBoardEvents { /// Emitted every time a new query containing non-verified data request is posted to the WRB. event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); - - /// Emitted when the reward of some not-yet reported query is upgraded. - event WitnetQueryRewardUpgraded(uint256 indexed id, uint256 evmReward); /// Emitted when a query with no callback gets reported into the WRB. event WitnetQueryReported(uint256 indexed id, uint256 evmGasPrice); + /// Emitted when the reward of some not-yet reported query is upgraded. + event WitnetQueryRewardUpgraded(uint256 indexed id, uint256 evmReward); + /// Emitted when a query with a callback gets successfully reported into the WRB. event WitnetResponseDelivered(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); From 901843636352a657875eb95134c85e2059d5db65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 16:12:27 +0100 Subject: [PATCH 065/149] refactor: IWitnetConsumer, Witnet.Query*, Witnet.Request, Witnet.Response, WitnetV2.RadonSLA --- contracts/data/WitnetRequestBoardData.sol | 33 +- .../IWitnetRequestBoardReporter.sol | 40 +- contracts/interfaces/V2/IWitnetBytecodes.sol | 2 +- contracts/interfaces/V2/IWitnetConsumer.sol | 20 +- contracts/interfaces/V2/IWitnetFeeds.sol | 2 +- .../interfaces/V2/IWitnetPriceSolver.sol | 2 +- contracts/libs/Witnet.sol | 458 ++++++++++-------- contracts/libs/WitnetEncodingLib.sol | 4 +- contracts/libs/WitnetV2.sol | 41 +- 9 files changed, 337 insertions(+), 265 deletions(-) diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index 5d034a92d..ec9b09be2 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -98,22 +98,19 @@ abstract contract WitnetRequestBoardData { internal view returns (Witnet.QueryStatus) { - Witnet.Query storage _query = __storage().queries[_queryId]; - if (_query.response.drTxHash != 0) { - // Query is in "Reported" status as soon as the hash of the - // Witnet transaction that solved the query is reported - // back from a Witnet bridge: - return Witnet.QueryStatus.Reported; - } - else if (_query.from != address(0)) { - // Otherwise, while address from which the query was posted - // is kept in storage, the query remains in "Posted" status: + Witnet.Query storage __query = __storage().queries[_queryId]; + if (__query.response.tallyHash != bytes32(0)) { + if (__query.response.timestamp != 0) { + if (block.number >= Witnet.unpackEvmFinalityBlock(__query.response.fromFinality)) { + return Witnet.QueryStatus.Finalized; + } else { + return Witnet.QueryStatus.Reported; + } + } else { + return Witnet.QueryStatus.Undeliverable; + } + } else if (__query.request.fromCallbackGas != bytes32(0)) { return Witnet.QueryStatus.Posted; - } - else if (_queryId > __storage().nonce) { - // Requester's address is removed from storage only if - // the query gets "Deleted" by its requester. - return Witnet.QueryStatus.Delivered; } else { return Witnet.QueryStatus.Unknown; } @@ -127,8 +124,10 @@ abstract contract WitnetRequestBoardData { return "WitnetRequestBoard: not in Posted status"; } else if (_status == Witnet.QueryStatus.Reported) { return "WitnetRequestBoard: not in Reported status"; - } else if (_status == Witnet.QueryStatus.Delivered) { - return "WitnetRequestBoard: not in Delivered status"; + } else if (_status == Witnet.QueryStatus.Finalized) { + return "WitnetRequestBoard: not in Finalized status"; + } else if (_status == Witnet.QueryStatus.Undeliverable) { + return "WitnetRequestBoard: not in Undeliverable status"; } else { return "WitnetRequestBoard: bad mood"; } diff --git a/contracts/interfaces/IWitnetRequestBoardReporter.sol b/contracts/interfaces/IWitnetRequestBoardReporter.sol index bb56b3461..ede92a211 100644 --- a/contracts/interfaces/IWitnetRequestBoardReporter.sol +++ b/contracts/interfaces/IWitnetRequestBoardReporter.sol @@ -9,33 +9,33 @@ interface IWitnetRequestBoardReporter { /// @notice Reports the Witnet-provided 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 `_drTxHash` is zero; + /// @dev - the `_witnetQueryId` is not in 'Posted' status. + /// @dev - provided `_tallyHash` is zero; /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique identifier of the data request. - /// @param _drTxHash The hash of the corresponding data request transaction in Witnet. - /// @param _result The result itself as bytes. + /// @param witnetQueryId The unique identifier of the data request. + /// @param witnetResultTallyHash The hash of the corresponding data request transaction in Witnet. + /// @param witnetResultCborBytes The result itself as bytes. function reportResult( - uint256 _queryId, - bytes32 _drTxHash, - bytes calldata _result + uint256 witnetQueryId, + bytes32 witnetResultTallyHash, + bytes calldata witnetResultCborBytes ) external returns (uint256); /// @notice Reports the Witnet-provided result to a previously posted request. /// @dev Fails if: /// @dev - called from unauthorized address; - /// @dev - the `_queryId` is not in 'Posted' status. - /// @dev - provided `_drTxHash` is zero; + /// @dev - the `_witnetQueryId` is not in 'Posted' status. + /// @dev - provided `_tallyHash` is zero; /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique query identifier - /// @param _timestamp The timestamp of the solving tally transaction in Witnet. - /// @param _drTxHash The hash of the corresponding data request transaction in Witnet. - /// @param _result The result itself as bytes. + /// @param witnetQueryId The unique query identifier + /// @param witnetResultTimestamp The timestamp of the solving tally transaction in Witnet. + /// @param witnetResultTallyHash The hash of the corresponding data request transaction in Witnet. + /// @param witnetResultCborBytes The result itself as bytes. function reportResult( - uint256 _queryId, - uint256 _timestamp, - bytes32 _drTxHash, - bytes calldata _result + uint256 witnetQueryId, + uint64 witnetResultTimestamp, + bytes32 witnetResultTallyHash, + bytes calldata witnetResultCborBytes ) external returns (uint256); /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. @@ -50,8 +50,8 @@ interface IWitnetRequestBoardReporter { struct BatchResult { uint256 queryId; - uint256 timestamp; - bytes32 drTxHash; + uint64 timestamp; + bytes32 tallyHash; bytes cborBytes; } diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetBytecodes.sol index d33c22b98..c6d383fec 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetBytecodes.sol @@ -28,7 +28,7 @@ interface IWitnetBytecodes { function lookupRadonRetrievalResultDataType(bytes32 hash) external view returns (Witnet.RadonDataTypes); function lookupRadonRequestAggregator(bytes32 radHash) external view returns (Witnet.RadonReducer memory); - function lookupRadonRequestResultMaxSize(bytes32 radHash) external view returns (uint256); + function lookupRadonRequestResultMaxSize(bytes32 radHash) external view returns (uint16); function lookupRadonRequestResultDataType(bytes32 radHash) external view returns (Witnet.RadonDataTypes); function lookupRadonRequestSources(bytes32 radHash) external view returns (bytes32[] memory); function lookupRadonRequestSourcesCount(bytes32 radHash) external view returns (uint); diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index b46b84194..8fcc4ce62 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -12,16 +12,16 @@ interface IWitnetConsumer { /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. /// @param witnetQueryId The unique identifier of the Witnet query being reported. - /// @param witnetCommitRevealHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param witnetCommitTimestamp Timestamp when the reported value was captured by the Witnet blockchain. + /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. /// @param witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. - /// @param cborValue The CBOR-encoded resulting value of the Witnet query being reported. + /// @param witnetResultCborValue The CBOR-encoded resulting value of the Witnet query being reported. function reportWitnetQueryResult( uint256 witnetQueryId, - bytes32 witnetCommitRevealHash, - uint256 witnetCommitTimestamp, + uint64 witnetResultTimestamp, + bytes32 witnetResultTallyHash, uint256 witnetEvmFinalityBlock, - WitnetCBOR.CBOR calldata cborValue + WitnetCBOR.CBOR calldata witnetResultCborValue ) external; /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` @@ -32,15 +32,15 @@ interface IWitnetConsumer { /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetQueryId The unique identifier of the Witnet query being reported. - /// @param witnetCommitRevealHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param witnetCommitTimestamp Timestamp when the reported value was captured by the Witnet blockchain. + /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. /// @param witnetEvmFinalityBlock 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. /// @param errorArgs Error arguments, if any. An empty buffer is to be passed if no error arguments apply. function reportWitnetQueryError( uint256 witnetQueryId, - bytes32 witnetCommitRevealHash, - uint256 witnetCommitTimestamp, + uint64 witnetResultTimestamp, + bytes32 witnetResultTallyHash, uint256 witnetEvmFinalityBlock, Witnet.ResultErrorCodes errorCode, WitnetCBOR.CBOR calldata errorArgs diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 59807c4b8..e21277fcc 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -26,7 +26,7 @@ interface IWitnetFeeds { function latestResult(bytes4 feedId) external view returns (Witnet.Result memory); function latestUpdateQueryId(bytes4 feedId) external view returns (uint256); - function latestUpdateRequest(bytes4 feedId) external view returns (Witnet.Request memory); + function latestUpdateRequest(bytes4 feedId) external view returns (bytes32, WitnetV2.RadonSLA memory); function latestUpdateResponse(bytes4 feedId) external view returns (Witnet.Response memory); function latestUpdateResultError(bytes4 feedId) external view returns (Witnet.ResultError memory); function latestUpdateResultStatus(bytes4 feedId) external view returns (Witnet.ResultStatus); diff --git a/contracts/interfaces/V2/IWitnetPriceSolver.sol b/contracts/interfaces/V2/IWitnetPriceSolver.sol index f6aa7dd58..afa5c8f29 100644 --- a/contracts/interfaces/V2/IWitnetPriceSolver.sol +++ b/contracts/interfaces/V2/IWitnetPriceSolver.sol @@ -8,7 +8,7 @@ interface IWitnetPriceSolver { struct Price { uint value; uint timestamp; - bytes32 drTxHash; + bytes32 tallyHash; Witnet.ResultStatus status; } function delegator() external view returns (address); diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 429b9980d..9896ae47a 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -15,7 +15,6 @@ library Witnet { struct Query { Request request; Response response; - address from; // Address from which the request was posted. } /// Possible status of a Witnet query. @@ -23,25 +22,29 @@ library Witnet { Unknown, Posted, Reported, - Delivered + Undeliverable, + Finalized } /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { - address _addr; // Deprecating: Formerly used as address of the (deprecated) IWitnetRequest contract. - bytes32 slaPacked; // Radon SLA of the Witnet data request (packed). - bytes32 radHash; // Radon radHash of the Witnet data request. - uint256 _gasprice; // Deprecating: Formerly used as minimum gas price the DR resolver should pay on the solving tx. - uint256 evmReward; // Escrowed reward to be paid to the DR resolver. - uint256 maxCallbackGas; // Maximum gas to be spent when reporting the data request result. + bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, + // and max callback gas limit if a callback is required. + bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request + // will be solved by the Witnet blockchain. + bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. + uint256 reserved1; // Reserved uint256 slot. + uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. + bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). } /// Data kept in EVM-storage containing Witnet-provided response metadata and result. struct Response { - address reporter; // Address from which the result was reported. - uint256 timestamp; // Timestamp of the Witnet-provided result. - bytes32 drTxHash; // Hash of the Witnet transaction that solved the queried Data Request. - bytes cborBytes; // Witnet-provided result CBOR-bytes to the queried Data Request. + bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and + // the EVM block at which the provided result can be considered to be final. + uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. + bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. + bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. } /// Data struct containing the Witnet-provided result to a Data Request. @@ -55,7 +58,9 @@ library Witnet { Void, Awaiting, Ready, - Error + Error, + AwaitingReady, + AwaitingError } /// Data struct describing an error when trying to fetch a Witnet-provided result to a Data Request. @@ -276,67 +281,220 @@ library Witnet { uint64 minerCommitRevealFee; } - /// @notice Returns `true` if all witnessing parameters in `b` have same - /// @notice value or greater than the ones in `a`. - function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) - internal pure returns (bool) + + /// =============================================================================================================== + /// --- '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) { - return ( - a.numWitnesses >= b.numWitnesses - && a.minConsensusPercentage >= b.minConsensusPercentage - && a.witnessReward >= b.witnessReward - && a.witnessCollateral >= b.witnessCollateral - && a.minerCommitRevealFee >= b.minerCommitRevealFee - ); + 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); } - function isValid(Witnet.RadonSLA memory sla) - internal pure returns (bool) + /// @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) { - return ( - sla.witnessReward > 0 - && sla.numWitnesses > 0 && sla.numWitnesses <= 127 - && sla.minConsensusPercentage > 50 && sla.minConsensusPercentage < 100 - && sla.witnessCollateral > 0 - && sla.witnessCollateral / sla.witnessReward <= 127 - ); + 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); + } } - function packed(RadonSLA memory sla) internal pure returns (bytes32) { - return bytes32( - uint(sla.witnessReward) - | sla.witnessCollateral << 64 - | sla.minerCommitRevealFee << 128 - | sla.numWitnesses << 248 - | sla.minConsensusPercentage << 232 - ); + /// @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); } - function toRadonSLA(bytes32 _packed) internal pure returns (RadonSLA memory) { - return RadonSLA({ - numWitnesses: uint8(uint(_packed >> 248)), - minConsensusPercentage: uint8(uint(_packed >> 232) & 0xff), - witnessReward: uint64(uint(_packed) & 0xffffffffffffffff), - witnessCollateral: uint64(uint(_packed >> 64) & 0xffffffffffffffff), - minerCommitRevealFee: uint64(uint(_packed >> 128) & 0xffffffffffffffff) - }); + + /// =============================================================================================================== + /// --- 'bytes' helper methods ------------------------------------------------------------------------------------ + + /// @dev Transform given bytes into a Witnet.Result instance. + /// @param bytecode Raw bytes representing a CBOR-encoded value. + /// @return A `Witnet.Result` instance. + function resultFromCborBytes(bytes memory bytecode) + internal pure + returns (Witnet.Result memory) + { + WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(bytecode); + return _resultFromCborValue(cborValue); } - function totalWitnessingReward(Witnet.RadonSLA memory sla) - internal pure returns (uint64) + 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) { - return sla.witnessReward * sla.numWitnesses; + 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); + } + } } /// =============================================================================================================== - /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- + /// --- 'string' helper methods ----------------------------------------------------------------------------------- - modifier _isError(Result memory result) { - require(!result.success, "Witnet: no actual errors"); - _; + 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.Request' helper methods --------------------------------------------------------------------------- + + function packRequesterCallbackGasLimit(address requester, uint96 callbackGasLimit) internal pure returns (bytes32) { + return bytes32(uint(bytes32(bytes20(requester))) | callbackGasLimit); + } + + function unpackRequester(Request storage self) internal view returns (address) { + return address(bytes20(self.fromCallbackGas)); + } + + function unpackCallbackGasLimit(Request storage self) internal view returns (uint96) { + return uint96(uint(self.fromCallbackGas)); + } + + function unpackRequesterAndCallbackGasLimit(Request storage self) internal view returns (address, uint96) { + bytes32 _packed = self.fromCallbackGas; + return (address(bytes20(_packed)), uint96(uint(_packed))); + } + + + /// =============================================================================================================== + /// --- 'Witnet.Response' helper methods -------------------------------------------------------------------------- + + function packReporterEvmFinalityBlock(address reporter, uint256 evmFinalityBlock) internal pure returns (bytes32) { + return bytes32(uint(bytes32(bytes20(reporter))) << 96 | uint96(evmFinalityBlock)); + } + + function unpackWitnetReporter(Response storage self) internal view returns (address) { + return address(bytes20(self.fromFinality)); } + function unpackEvmFinalityBlock(Response storage self) internal view returns (uint256) { + return uint(uint96(uint(self.fromFinality))); + } + + function unpackEvmFinalityBlock(bytes32 fromFinality) internal pure returns (uint256) { + return uint(uint96(uint(fromFinality))); + } + + function unpackWitnetReporterAndEvmFinalityBlock(Response storage self) internal view returns (address, uint256) { + bytes32 _packed = self.fromFinality; + return (address(bytes20(_packed)), uint(uint96(uint(_packed)))); + } + + + /// =============================================================================================================== + /// --- 'Witnet.Result' helper methods ---------------------------------------------------------------------------- + modifier _isReady(Result memory result) { require(result.success, "Witnet: tried to decode value from errored result."); _; @@ -496,166 +654,58 @@ library Witnet { /// =============================================================================================================== - /// --- 'bytes' helper methods ------------------------------------------------------------------------------------ - - /// @dev Transform given bytes into a Witnet.Result instance. - /// @param bytecode Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory bytecode) - internal pure - returns (Witnet.Result memory) - { - WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(bytecode); - 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); - } + /// --- 'Witnet.RadonSLA' helper methods -------------------------------------------------------------------------- - /// @notice Converts bytes32 into string. - function toString(bytes32 _bytes32) - internal pure - returns (string memory) + /// @notice Returns `true` if all witnessing parameters in `b` have same + /// @notice value or greater than the ones in `a`. + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) + internal pure returns (bool) { - bytes memory _bytes = new bytes(_toStringLength(_bytes32)); - for (uint _i = 0; _i < _bytes.length;) { - _bytes[_i] = _bytes32[_i]; - unchecked { - _i ++; - } - } - return string(_bytes); + return ( + a.numWitnesses >= b.numWitnesses + && a.minConsensusPercentage >= b.minConsensusPercentage + && a.witnessReward >= b.witnessReward + && a.witnessCollateral >= b.witnessCollateral + && a.minerCommitRevealFee >= b.minerCommitRevealFee + ); } - function tryUint(string memory str) - internal pure - returns (uint res, bool) + function isValid(Witnet.RadonSLA memory sla) + internal pure returns (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); - } + return ( + sla.witnessReward > 0 + && sla.numWitnesses > 0 && sla.numWitnesses <= 127 + && sla.minConsensusPercentage > 50 && sla.minConsensusPercentage < 100 + && sla.witnessCollateral > 0 + && sla.witnessCollateral / sla.witnessReward <= 127 + ); } - - /// =============================================================================================================== - /// --- 'uint8' 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); + function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { + return bytes32( + uint(sla.witnessReward) + | sla.witnessCollateral << 64 + | sla.minerCommitRevealFee << 128 + | sla.numWitnesses << 248 + | sla.minConsensusPercentage << 232 + ); } - /// @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); - } + function toRadonSLA(bytes32 _packed) internal pure returns (RadonSLA memory) { + return RadonSLA({ + numWitnesses: uint8(uint(_packed >> 248)), + minConsensusPercentage: uint8(uint(_packed >> 232) & 0xff), + witnessReward: uint64(uint(_packed) & 0xffffffffffffffff), + witnessCollateral: uint64(uint(_packed >> 64) & 0xffffffffffffffff), + minerCommitRevealFee: uint64(uint(_packed >> 128) & 0xffffffffffffffff) + }); } - /// @notice Convert a `uint` into a string` representing its value. - function toString(uint v) - internal pure - returns (string memory) + function totalWitnessingReward(Witnet.RadonSLA memory sla) + internal pure returns (uint64) { - 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 sla.witnessReward * sla.numWitnesses; } diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index 654e6f4ac..ba679d55f 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -366,7 +366,7 @@ library WitnetEncodingLib { || dataType == Witnet.RadonDataTypes.Array || dataType == Witnet.RadonDataTypes.Map ) { - if (/*maxDataSize == 0 ||*/maxDataSize > 2048) { + if (maxDataSize == 0) { revert UnsupportedRadonDataType( uint8(dataType), maxDataSize @@ -378,7 +378,7 @@ library WitnetEncodingLib { || dataType == Witnet.RadonDataTypes.Float || dataType == Witnet.RadonDataTypes.Bool ) { - return 0; // TBD: size(dataType); + return 9; // TBD: size(dataType); } else { revert UnsupportedRadonDataType( uint8(dataType), diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 4a20b2943..43fb46db2 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -14,30 +14,37 @@ library WitnetV2 { uint256 internal constant _WITNET_2_0_TIMESTAMP = _WITNET_GENESIS_TIMESTAMP + _WITNET_2_0_EPOCH * _WITNET_GENESIS_EPOCH_SECONDS; struct RadonSLA { - uint8 numWitnesses; - uint8 witnessingCollateralRatio; + /// @dev Number of witnessing nodes that will take part in the resolution of a data request within the Witnet blockchain: + uint8 witnessingCommitteeSize; + /// @dev Collateral-to-reward ratio that witnessing nodes will have to commit with when taking part in a data request resolution. + uint8 witnessingCollateralRatio; + /// @dev Minimum amount of $nanoWIT that all Witnet nodes participating in the resolution of a data request will receive as a reward: + uint64 witnessingWitReward; } function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) { return ( - a.numWitnesses * a.witnessingCollateralRatio - >= b.numWitnesses * b.witnessingCollateralRatio + a.witnessingCommitteeSize * a.witnessingCollateralRatio * a.witnessingWitReward + >= b.witnessingCommitteeSize * b.witnessingCollateralRatio * b.witnessingWitReward ); } function isValid(RadonSLA calldata sla) internal pure returns (bool) { return ( - sla.numWitnesses > 0 && sla.numWitnesses <= 127 + sla.witnessingWitReward > 0 + && sla.witnessingCommitteeSize > 0 && sla.witnessingCommitteeSize <= 127 && sla.witnessingCollateralRatio > 0 && sla.witnessingCollateralRatio <= 127 ); } - function packed(RadonSLA memory sla) internal pure returns (bytes32) { + function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { return bytes32( - uint(sla.numWitnesses) << 248 + uint(sla.witnessingCommitteeSize) << 248 | uint(sla.witnessingCollateralRatio) << 240 + // | uint(sla.witnessingNotBeforeTimestamp) << 64 + | uint(sla.witnessingWitReward) ); } @@ -45,11 +52,27 @@ library WitnetV2 { internal pure returns (RadonSLA memory) { return RadonSLA({ - numWitnesses: uint8(uint(_packed) >> 248), - witnessingCollateralRatio: uint8(uint(_packed) >> 240) + witnessingCommitteeSize: uint8(uint(_packed) >> 248), + witnessingCollateralRatio: uint8(uint(_packed) >> 240), + // witnessingNotBeforeTimestamp: uint64(uint(_packed) >> 64), + witnessingWitReward: uint64(uint(_packed)) }); } + function totalWitnessingReward(WitnetV2.RadonSLA calldata sla) internal pure returns (uint64) { + return ( + (3 + sla.witnessingCommitteeSize) + * sla.witnessingWitReward + ); + } + + function totalWitnessingReward(bytes32 _packed) internal pure returns (uint64) { + return ( + (3 + (uint8(uint(_packed) << 248))) // 3 + witnessingCommitteSize + * uint64(uint(_packed)) // witnessingWitReward + ); + } + function timestampToWitnetEpoch(uint _timestamp) internal pure returns (uint) { if (_timestamp > _WITNET_2_0_TIMESTAMP ) { return ( From fce673dcf7c65c7a373a7cd65087178082597030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 16:15:46 +0100 Subject: [PATCH 066/149] refactor: polish *WitnetRequestBoard* --- .../WitnetRequestBoardTrustableOvm2.sol | 12 +- .../WitnetRequestBoardTrustableReef.sol | 11 +- .../core/defaults/WitnetBytecodesDefault.sol | 4 +- .../WitnetRequestBoardTrustableDefault.sol | 35 ++-- contracts/data/WitnetRequestBoardData.sol | 23 +-- contracts/interfaces/IWitnetRequestBoard.sol | 149 +++++++++--------- .../interfaces/IWitnetRequestBoardEvents.sol | 15 +- migrations/scripts/3_core.js | 3 +- migrations/scripts/4_proxies.js | 2 +- migrations/witnet.settings.js | 46 +++--- 10 files changed, 149 insertions(+), 151 deletions(-) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 4246921da..85feec5dc 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -25,6 +25,7 @@ contract WitnetRequestBoardTrustableOvm2 constructor( WitnetRequestFactory _factory, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, @@ -34,6 +35,7 @@ contract WitnetRequestBoardTrustableOvm2 ) WitnetRequestBoardTrustableDefault( _factory, + _registry, _upgradable, _versionTag, _reportResultGasBase, @@ -53,7 +55,7 @@ contract WitnetRequestBoardTrustableOvm2 /// @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, uint256 _resultMaxSize) + function estimateBaseFee(uint256 _gasPrice, uint16 _resultMaxSize) public view virtual override returns (uint256) @@ -67,17 +69,15 @@ contract WitnetRequestBoardTrustableOvm2 /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). - /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) + /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint96 _callbackGasLimit) public view virtual override returns (uint256) { return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback( _gasPrice, - _resultMaxSize, - _maxCallbackGas + _callbackGasLimit ) + ( _gasPrice * gasPriceOracleL1.getL1Fee( hex"c8f5cdd500000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000225820ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff" diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 46c881494..682c7f500 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -19,6 +19,7 @@ contract WitnetRequestBoardTrustableReef { constructor( WitnetRequestFactory _factory, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, @@ -28,6 +29,7 @@ contract WitnetRequestBoardTrustableReef ) WitnetRequestBoardTrustableDefault( _factory, + _registry, _upgradable, _versionTag, _reportResultGasBase, @@ -43,7 +45,7 @@ contract WitnetRequestBoardTrustableReef /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - function estimateBaseFee(uint256, uint256 _resultMaxSize) + function estimateBaseFee(uint256, uint16 _resultMaxSize) public view virtual override returns (uint256) @@ -52,14 +54,13 @@ contract WitnetRequestBoardTrustableReef } /// @notice Estimate the minimum reward required for posting a data request with a callback. - /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256, uint256 _resultMaxSize, uint256 _maxCallbackGas) + /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256, uint96 _callbackGasLimit) public view virtual override returns (uint256) { - return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(1, _resultMaxSize, _maxCallbackGas); + return WitnetRequestBoardTrustableDefault.estimateBaseFeeWithCallback(1, _callbackGasLimit); } diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 5faa772e8..636a5fe66 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -259,9 +259,9 @@ contract WitnetBytecodesDefault function lookupRadonRequestResultMaxSize(bytes32 _radHash) external view override - returns (uint256) + returns (uint16) { - return __requests(_radHash).resultMaxSize; + return uint16(__requests(_radHash).resultMaxSize); } function lookupRadonRequestSources(bytes32 _radHash) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index af1f75043..eb71a0cc2 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -23,6 +23,7 @@ contract WitnetRequestBoardTrustableDefault constructor( WitnetRequestFactory _factory, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, @@ -32,6 +33,7 @@ contract WitnetRequestBoardTrustableDefault ) WitnetRequestBoardTrustableBase( _factory, + _registry, _upgradable, _versionTag, address(0) @@ -51,7 +53,7 @@ contract WitnetRequestBoardTrustableDefault /// @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, uint256 _resultMaxSize) + function estimateBaseFee(uint256 _gasPrice, uint16 _resultMaxSize) public view virtual override returns (uint256) @@ -59,37 +61,38 @@ contract WitnetRequestBoardTrustableDefault return _gasPrice * ( __reportResultGasBase + __sstoreFromZeroGas * ( - 5 + _resultMaxSize / 32 + 5 + (_resultMaxSize == 0 ? 0 : _resultMaxSize - 1) / 32 ) ); } /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). - /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) + /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint96 _callbackGasLimit) public view virtual override returns (uint256) { - uint _reportResultWithetCallbackGasThreshold = ( + uint _reportResultWithCallbackGasThreshold = ( __reportResultWithCallbackRevertGasBase - + __sstoreFromZeroGas * ( - 5 + _resultMaxSize / 32 - ) + + 3 * __sstoreFromZeroGas ); if ( - _maxCallbackGas < _reportResultWithetCallbackGasThreshold - || __reportResultWithCallbackGasBase + _maxCallbackGas < _reportResultWithetCallbackGasThreshold + _callbackGasLimit < _reportResultWithCallbackGasThreshold + || __reportResultWithCallbackGasBase + _callbackGasLimit < _reportResultWithCallbackGasThreshold ) { - return (_gasPrice * _reportResultWithetCallbackGasThreshold); + return ( + _gasPrice + * _reportResultWithCallbackGasThreshold + ); } else { return ( - _gasPrice * ( - __reportResultWithCallbackGasBase - + _maxCallbackGas - ) + _gasPrice + * ( + __reportResultWithCallbackGasBase + + _callbackGasLimit + ) ); } } diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index ec9b09be2..e635ea111 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -8,6 +8,8 @@ import "../libs/Witnet.sol"; /// @author The Witnet Foundation. abstract contract WitnetRequestBoardData { + using Witnet for Witnet.Request; + bytes32 internal constant _WITNET_REQUEST_BOARD_DATA_SLOTHASH = /* keccak256("io.witnet.boards.data") */ 0xf595240b351bc8f951c2f53b26f4e78c32cb62122cf76c19b7fdda7d4968e183; @@ -31,33 +33,14 @@ abstract contract WitnetRequestBoardData { ); _; } - /// Asserts the given query was previously posted and that it was not yet deleted. - modifier notDeleted(uint256 _queryId) { - require( - _queryId > 0 && _queryId <= __storage().nonce, - "WitnetRequestBoard: not yet posted" - ); - require( - __seekQuery(_queryId).from != address(0), - "WitnetRequestBoard: deleted" - ); _; - } - /// Asserts the caller actually posted the referred query. modifier onlyRequester(uint256 _queryId) { require( - msg.sender == __seekQuery(_queryId).from, + msg.sender == __seekQueryRequest(_queryId).unpackRequester(), "WitnetRequestBoardBase: not the requester" ); _; } - /// Asserts the given query was actually posted before calling this method. - modifier wasPosted(uint256 _queryId) { - require( - _queryId > 0 && _queryId <= __storage().nonce, - "WitnetRequestBoard: not yet posted" - ); _; - } // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index 57aa59dfd..f28076d1e 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -9,57 +9,62 @@ interface IWitnetRequestBoard { /// @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, uint256 resultMaxSize) external view returns (uint256); + function estimateBaseFee(uint256 gasPrice, uint16 resultMaxSize) external view returns (uint256); + + /// @notice Estimate the minimum reward required for posting a data request. + /// @dev Fails if the RAD hash was not previously verified on the WitnetBytecodes registry. + /// @param gasPrice Expected gas price to pay upon posting the data request. + /// @param radHash The RAD hash of the data request to be solved by Witnet. + function estimateBaseFee(uint256 gasPrice, bytes32 radHash) external view returns (uint256); /// @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 resultMaxSize Maximum expected size of returned data (in bytes). - /// @param maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 gasPrice, uint256 resultMaxSize, uint256 maxCallbackGas) external view returns (uint256); + /// @param callbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 gasPrice, uint96 callbackGasLimit) external view returns (uint256); /// @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. - /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. + /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on + /// @notice queries providing no actual earnings. + /// @dev Fails if the query does not exist, or if deleted. function estimateQueryEarnings(uint256 queryId, uint256 gasPrice) external view returns (int256); - - /// @notice Retrieves a copy of all Witnet-provided data related to a previously posted request, + + /// @notice Retrieves a copy of all Witnet-provable data related to a previously posted request, /// removing the whole query from the WRB storage. - /// @dev Fails if the `queryId` is not in 'Reported' status, or called from an address different to + /// @dev Fails if the query was not in 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. /// @param queryId The unique query identifier. function fetchQueryResponse(uint256 queryId) external returns (Witnet.Response memory); - + /// @notice Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 queryId) external view returns (Witnet.Query memory); - - /// @notice Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `queryId` is not valid or, if it has already been reported - /// @dev or deleted. - /// @param queryId The unique identifier of a previously posted query. - function getQueryRequest(uint256 queryId) external view returns (Witnet.Request memory); + function getQuery(uint256 queryId) external view returns (Witnet.Query memory); /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `queryId` is not valid, or if the related script bytecode - /// @dev got changed after being posted. Returns empty array once it gets reported, - /// @dev or deleted. + /// @dev Fails if the query does not exist. /// @param queryId The unique query identifier. - function getQueryRequestBytecode(uint256 queryId) external view returns (bytes memory); - + function getQueryBytecode(uint256 queryId) external view returns (bytes memory); + + /// @notice Retrieves the RAD hash and SLA parameters of the given query. + /// @param queryId The unique query identifier. + function getQueryRequest(uint256 queryId) external view returns (bytes32, WitnetV2.RadonSLA memory); + /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. - /// @dev Fails if the `queryId` is not in 'Reported' status. /// @param queryId The unique query identifier. function getQueryResponse(uint256 queryId) external view returns (Witnet.Response memory); - /// @notice Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `queryId` is not in 'Reported' status. + /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. /// @param queryId The unique query identifier. function getQueryResult(uint256 queryId) external view returns (Witnet.Result memory); - /// @notice Returns query's result traceability data + /// @notice Returns reference to the commit/reveal act that took place on the Witnet blockchain. /// @param queryId The unique query identifier. - /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. - function getQueryResultAuditTrail(uint256 queryId) external view returns (uint256 _resultTimestamp, bytes32 _resultDrTxHash); + /// @return witnetTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return witnetTallyHash Hash of the commit/reveal act that solved the query on the Witnet blockchain. + /// @return witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. + function getQueryResultAuditTrail(uint256 queryId) external view returns ( + uint256 witnetTimestamp, + bytes32 witnetTallyHash, + uint256 witnetEvmFinalityBlock + ); /// @notice Gets error code identifying some possible failure on the resolution of the given query. /// @param queryId The unique query identifier. @@ -68,79 +73,79 @@ interface IWitnetRequestBoard { /// @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. + /// @notice - 2 => Ready: the query response was finalized, and contains a result with no erros. + /// @notice - 3 => Error: the query response was finalized, and contains a result with errors. /// @param queryId The unique query identifier. function getQueryResultStatus(uint256 queryId) external view returns (Witnet.ResultStatus); /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `queryId` is not valid or, if it has already been - /// @dev reported, or deleted. + /// @dev Fails if the `queryId` is not valid or, if it has already been reported, delivered, or deleted. /// @param queryId The unique query identifier. function getQueryReward(uint256 queryId) external view returns (uint256); /// @notice Gets current status of given query. function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); - /// @notice Returns next query id to be generated by the Witnet Request Board. - function getNextQueryId() external view returns (uint256); + // /// @notice Returns next query id to be generated by the Witnet Request Board. + // function getNextQueryId() external view returns (uint256); /// @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-provided result to this request. - /// @dev Fails if provided reward is too low. - /// @dev The result to the query will be saved into the WitnetRequestBoard storage. - /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @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 WitnetBytecodes 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 postRequest( - bytes32 radHash, + bytes32 queryRAD, WitnetV2.RadonSLA calldata querySLA ) external payable returns (uint256 queryId); - /// @notice Requests the execution of the given Witnet Data Request bytecode, 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-provided result to this request. - /// @dev Fails if provided reward is too low. - /// @dev The result to the query will be saved into the WitnetRequestBoard storage. - /// @param radBytecode The raw bytecode of the Witnet Data Request to be solved by Witnet. - /// @param querySLA The data query SLA to be fulfilled by the Witnet blockchain. - /// @return A unique query identifier. - function postRequest( - bytes calldata radBytecode, - WitnetV2.RadonSLA calldata querySLA - ) external payable returns (uint256); + /// @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 `WitnetResponseDeliveryFailed` + /// @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 IWitnetConsumer interface; + /// @dev - the RAD hash was not previously verified by the WitnetBytecodes 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. + /// @param queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. + /// @return queryId Unique query identifier. + function postRequestWithCallback( + bytes32 queryRAD, + WitnetV2.RadonSLA calldata querySLA, + uint96 queryCallbackGasLimit + ) external payable returns (uint256 queryId); /// @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-provided result to this request. - /// @dev Fails if, provided reward is too low. - /// @dev The caller must be a contract implementing the IWitnetConsumer interface. - /// @param radHash The RAD hash of the data request to be solved by Witnet. + /// @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 `WitnetResponseDeliveryFailed` + /// @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 IWitnetConsumer interface; + /// @dev - the provided bytecode is empty; + /// @dev - invalid SLA parameters were 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 maxCallbackGas Maximum gas to be spent when reporting the data request result. + /// @param queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. /// @return queryId Unique query identifier. function postRequestWithCallback( - bytes32 radHash, + bytes calldata queryUnverifiedBytecode, WitnetV2.RadonSLA calldata querySLA, - uint256 maxCallbackGas + uint96 queryCallbackGasLimit ) external payable returns (uint256 queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param queryId The unique query identifier. function upgradeQueryReward(uint256 queryId) external payable; - - - /// =============================================================================================================== - /// --- Deprecating methods --------------------------------------------------------------------------------------- - - /// @notice Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet blockchain. - /// @notice A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// @notice result to this request. - /// @dev Fails if, provided reward is too low. - /// @param radHash The RAD hash of the data request to be solved by Witnet. - /// @param slaHash The SLA hash of the data request to be solved by Witnet. - /// @return queryId Unique query identifier. - function postRequest(bytes32 radHash, bytes32 slaHash) external payable returns (uint256 queryId); } diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/IWitnetRequestBoardEvents.sol index ffc1b84fe..1c7ab7f2e 100644 --- a/contracts/interfaces/IWitnetRequestBoardEvents.sol +++ b/contracts/interfaces/IWitnetRequestBoardEvents.sol @@ -1,13 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; +import "../libs/WitnetV2.sol"; + interface IWitnetRequestBoardEvents { /// Emitted every time a new query containing some verified data request is posted to the WRB. - event NewWitnetQuery(uint256 indexed id, uint256 evmReward); - - /// Emitted every time a new query containing non-verified data request is posted to the WRB. - event NewQueryWithBytecode(uint256 indexed id, uint256 evmReward, bytes radBytecode); + event WitnetQuery(uint256 indexed id, uint64 witReward, uint256 evmReward); /// Emitted when a query with no callback gets reported into the WRB. event WitnetQueryReported(uint256 indexed id, uint256 evmGasPrice); @@ -19,5 +18,11 @@ interface IWitnetRequestBoardEvents { event WitnetResponseDelivered(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas); /// Emitted when a query with a callback cannot get reported into the WRB. - event WitnetResponseDeliveryFailed(uint256 indexed id, uint256 evmGasPrice, uint256 evmCallbackGas, string evmReason); + event WitnetResponseDeliveryFailed( + uint256 indexed id, + bytes resultCborBytes, + uint256 evmGasPrice, + uint256 evmCallbackGas, + string evmCallbackRevertReason + ); } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 2248dd485..887ae59af 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -72,8 +72,9 @@ module.exports = async function (_, network, [, from]) { key: targets.WitnetRequestBoard, libs: specs.WitnetRequestBoard.libs, immutables: specs.WitnetRequestBoard.immutables, - intrinsics: { types: [ 'address', 'bool', 'bytes32' ], values: [ + intrinsics: { types: [ 'address', 'address', 'bool', 'bytes32' ], values: [ /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), ]}, diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 3b4145096..e5fbcf5d7 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -100,7 +100,7 @@ async function deploy(target) { const oldAddr = await getProxyImplementation(from, addresses[ecosystem][network][key]) const oldImpl = await artifacts.require(targets[key]).at(oldAddr) const newImpl = await artifacts.require(targets[key]).deployed() - if (oldAddr != newImpl.address) { + if (oldAddr !== newImpl.address) { utils.traceHeader(`Upgrading '${key}'...`) const oldVersion = await oldImpl.version.call({ from }) const newVersion = await newImpl.version.call({ from }) diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js index d05404f75..80bcc6faf 100644 --- a/migrations/witnet.settings.js +++ b/migrations/witnet.settings.js @@ -669,14 +669,14 @@ module.exports = { immutables: { types: [ 'uint256', 'uint256', 'uint256', 'uint256', ], values: [ - /* _reportResultGasBase */ 57898, - /* _reportResultWithCallbackGasBase */ 72140, - /* _reportResultWithCallbackRevertGasBase */ 66685, + /* _reportResultGasBase */ 58282, + /* _reportResultWithCallbackGasBase */ 65273, + /* _reportResultWithCallbackRevertGasBase */ 69546, /* _sstoreFromZeroGas */ 20000, ] }, libs: [ "WitnetErrorsLib", ], - vanity: 83581, + vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 }, WitnetRequestFactory: { vanity: 178848, @@ -690,7 +690,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 155000, + /* _reportResultGasBase */ 155000, ] }, }, @@ -699,7 +699,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 114000, + /* _reportResultGasBase */ 114000, ] }, }, @@ -708,7 +708,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 78500, + /* _reportResultGasBase */ 78500, ] }, }, @@ -717,7 +717,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 225000, + /* _reportResultGasBase */ 225000, ] }, }, @@ -726,7 +726,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 225000, + /* _reportResultGasBase */ 225000, ] }, }, @@ -735,7 +735,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 137500, + /* _reportResultGasBase */ 137500, ] }, }, @@ -744,7 +744,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 85000, + /* _reportResultGasBase */ 85000, ] }, }, @@ -753,7 +753,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 530000, + /* _reportResultGasBase */ 530000, ] }, }, @@ -762,7 +762,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 85000, + /* _reportResultGasBase */ 85000, ] }, }, @@ -771,7 +771,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 92500, + /* _reportResultGasBase */ 92500, ] }, }, @@ -780,7 +780,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 105000, + /* _reportResultGasBase */ 105000, ] }, }, @@ -789,7 +789,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 85000, + /* _reportResultGasBase */ 85000, ] }, }, @@ -798,7 +798,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 134800, + /* _reportResultGasBase */ 134800, ] }, }, @@ -807,7 +807,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 115000, + /* _reportResultGasBase */ 115000, ] }, }, @@ -816,7 +816,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 145000, + /* _reportResultGasBase */ 145000, ] }, }, @@ -825,7 +825,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 135000, + /* _reportResultGasBase */ 135000, ] }, }, @@ -834,7 +834,7 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ "0x3100A1CAC7EF19DC", + /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", ] }, }, @@ -843,10 +843,10 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasLimit */ 83949, + /* _reportResultGasBase */ 83949, ] }, }, }, }, -} +} \ No newline at end of file From a2e60428714eceaabfd4fa7122e03d4b006d7c2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 16:17:15 +0100 Subject: [PATCH 067/149] feat: optimize WitnetRequestBoardTrustableBase --- .../WitnetRequestBoardTrustableBase.sol | 830 ++++++++++-------- 1 file changed, 458 insertions(+), 372 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 53bd5905e..2c4704f8a 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -30,24 +30,29 @@ abstract contract WitnetRequestBoardTrustableBase Payable { using Witnet for bytes; + using Witnet for Witnet.Request; + using Witnet for Witnet.Response; using Witnet for Witnet.Result; using WitnetCBOR for WitnetCBOR.CBOR; using WitnetV2 for WitnetV2.RadonSLA; bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; + bytes4 public immutable group = bytes4(keccak256(abi.encode(address(this), block.chainid))); + WitnetRequestFactory immutable public override factory; + WitnetBytecodes immutable public override registry; - modifier checkCallbackRecipient(address _addr) { + modifier checkCallbackRecipient(address _addr, uint96 _callbackGasLimit) { require( - _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)), - "WitnetRequestBoardTrustableBase: invalid callback recipient" + _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)) && _callbackGasLimit > 0, + "WitnetRequestBoardTrustableBase: invalid callback" ); _; } modifier checkReward(uint256 _baseFee) { require( _getMsgValue() >= _baseFee, - "WitnetRequestBoardTrustableBase: reward too low" + "WitnetRequestBoardTrustableBase: insufficient reward" ); _; } @@ -60,6 +65,7 @@ abstract contract WitnetRequestBoardTrustableBase constructor( WitnetRequestFactory _factory, + WitnetBytecodes _registry, bool _upgradable, bytes32 _versionTag, address _currency @@ -71,12 +77,9 @@ abstract contract WitnetRequestBoardTrustableBase "io.witnet.proxiable.board" ) { - assert(address(_factory) != address(0)); + assert(address(_factory) != address(0) && address(_registry) != address(0)); factory = _factory; - } - - function registry() public view virtual override returns (WitnetBytecodes) { - return factory.registry(); + registry = _registry; } receive() external payable { @@ -106,13 +109,12 @@ abstract contract WitnetRequestBoardTrustableBase /// @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, uint256 _resultMaxSize) virtual public view returns (uint256); + function estimateBaseFee(uint256 _gasPrice, uint16 _resultMaxSize) virtual public view returns (uint256); /// @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 _resultMaxSize Maximum expected size of returned data (in bytes). - /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256 _gasPrice, uint256 _resultMaxSize, uint256 _maxCallbackGas) virtual public view returns (uint256); + /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint96 _callbackGasLimit) virtual public view returns (uint256); // ================================================================================================================ @@ -152,9 +154,19 @@ abstract contract WitnetRequestBoardTrustableBase } __storage().base = base(); - require(address(factory).code.length > 0, "WitnetRequestBoardTrustableBase: inexistent factory"); - require(factory.specs() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory"); - require(address(factory.witnet()) == address(this), "WitnetRequestBoardTrustableBase: discordant factory"); + require( + address(factory).code.length > 0, + "WitnetRequestBoardTrustableBase: inexistent factory" + ); + require( + factory.specs() == type(IWitnetRequestFactory).interfaceId, + "WitnetRequestBoardTrustableBase: uncompliant factory" + ); + require( + address(factory.witnet()) == address(this) + && address(factory.registry()) == address(registry), + "WitnetRequestBoardTrustableBase: discordant factory" + ); // Set reporters __setReporters(_reporters); @@ -175,141 +187,164 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- Partial implementation of IWitnetRequestBoard -------------------------------------------------------------- + + /// @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 WitnetBytecodes registry. + function estimateBaseFee(uint256 gasPrice, bytes32 radHash) + override + public view + returns (uint256) + { + uint16 _resultMaxSize = registry.lookupRadonRequestResultMaxSize(radHash); + require( + _resultMaxSize > 0, + "WitnetRequestBoardTrustableDefault: invalid RAD" + ); + return estimateBaseFee( + gasPrice, + _resultMaxSize + ); + } /// @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. - /// @dev Data requesters should consider upgrading the reward on queries providing no actual earnings. - function estimateQueryEarnings(uint256 _queryId, uint256 _gasPrice) + /// @notice based on the gas price of the calling transaction. Data requesters should consider upgrading the reward on + /// @notice queries providing no actual earnings. + /// @dev Fails if the query does not exist, or if deleted. + function estimateQueryEarnings(uint256 _witnetQueryId, uint256 _gasPrice) virtual override external view returns (int256 _earnings) { - Witnet.Request storage __request = __seekQueryRequest(_queryId); + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); - uint _maxResultSize = registry().lookupRadonRequestResultMaxSize(__request.radHash); _earnings = int(__request.evmReward); - if (__request.maxCallbackGas > 0) { + uint96 _callbackGasLimit = __request.unpackCallbackGasLimit(); + if (_callbackGasLimit > 0) { _earnings -= int(estimateBaseFeeWithCallback( - _gasPrice, - _maxResultSize, - __request.maxCallbackGas + _gasPrice, + _callbackGasLimit )); } else { _earnings -= int(estimateBaseFee( _gasPrice, - _maxResultSize + __request.RAD )); } } /// 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 `_witnetQueryId` is not in 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. - /// @param _queryId The unique query identifier. - function fetchQueryResponse(uint256 _queryId) + /// @param _witnetQueryId The unique query identifier. + function fetchQueryResponse(uint256 _witnetQueryId) virtual override external - inStatus(_queryId, Witnet.QueryStatus.Reported) - onlyRequester(_queryId) + inStatus(_witnetQueryId, Witnet.QueryStatus.Reported) + onlyRequester(_witnetQueryId) returns (Witnet.Response memory _response) { - _response = __seekQuery(_queryId).response; - delete __storage().queries[_queryId]; + _response = __seekQuery(_witnetQueryId).response; + delete __storage().queries[_witnetQueryId]; } /// Gets the whole Query data contents, if any, no matter its current status. - function getQueryData(uint256 _queryId) + function getQuery(uint256 _witnetQueryId) external view override returns (Witnet.Query memory) { - return __storage().queries[_queryId]; - } - - /// Retrieves the whole Request record posted to the Witnet Request Board. - /// @dev Fails if the `_queryId` is not valid or, if it has already been reported - /// @dev or deleted. - /// @param _queryId The unique identifier of a previously posted query. - function getQueryRequest(uint256 _queryId) - external view - override - // inStatus(_queryId, Witnet.QueryStatus.Posted) - returns (Witnet.Request memory) - { - return __seekQueryRequest(_queryId); + return __storage().queries[_witnetQueryId]; } - /// Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the `_queryId` is not valid, or if the related script bytecode - /// @dev got changed after being posted. Returns empty array once it gets reported, - /// @dev or deleted. - /// @param _queryId The unique query identifier. - function getQueryRequestBytecode(uint256 _queryId) + /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. + /// @dev Fails if the query does not exist. + /// @param _witnetQueryId The unique query identifier. + function getQueryBytecode(uint256 _witnetQueryId) external view virtual override - returns (bytes memory _bytecode) + returns (bytes memory) { require( - _statusOf(_queryId) != Witnet.QueryStatus.Unknown, - "WitnetRequestBoardTrustableBase: not yet posted" + _statusOf(_witnetQueryId) != Witnet.QueryStatus.Unknown, + "WitnetRequestBoardTrustableBase: unknown query" ); - Witnet.Request storage __request = __seekQueryRequest(_queryId); - if (__request._addr != address(0)) { - _bytecode = IWitnetRequest(__request._addr).bytecode(); - } else if (__request.radHash != bytes32(0)) { - _bytecode = registry().bytecodeOf(__request.radHash); + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + if (__request.RAD != bytes32(0)) { + return registry.bytecodeOf(__request.RAD); + } else { + return __request.bytecode; } } - /// Retrieves the Witnet-provided 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) + /// @notice Retrieves the RAD hash and SLA parameters of the given query. + /// @param _witnetQueryId The unique query identifier. + function getQueryRequest(uint256 _witnetQueryId) + external view + override + returns (bytes32, WitnetV2.RadonSLA memory) + { + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + return ( + __request.RAD == bytes32(0) ? registry.hashOf(__request.bytecode) : __request.RAD, + WitnetV2.toRadonSLA(__request.SLA) + ); + } + + /// Retrieves the Witnet-provable result, and metadata, to a previously posted request. + /// @dev Fails if the `_witnetQueryId` is not in 'Reported' status. + /// @param _witnetQueryId The unique query identifier + function getQueryResponse(uint256 _witnetQueryId) external view override - // inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Response memory _response) { - return __seekQueryResponse(_queryId); + return __seekQueryResponse(_witnetQueryId); } - /// Retrieves the Witnet-provided CBOR-bytes result of a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status. - /// @param _queryId The unique query identifier - function getQueryResult(uint256 _queryId) + /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. + /// @param _witnetQueryId The unique query identifier. + function getQueryResult(uint256 _witnetQueryId) external view override - // inStatus(_queryId, Witnet.QueryStatus.Reported) returns (Witnet.Result memory) { - Witnet.Response storage _response = __seekQueryResponse(_queryId); + // todo: fail if not in finalized status ? + Witnet.Response storage _response = __seekQueryResponse(_witnetQueryId); return _response.cborBytes.resultFromCborBytes(); } - /// @notice Returns query's result traceability data - /// @param _queryId The unique query identifier. - /// @return _resultTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return _resultDrTxHash Witnet blockchain hash of the commit/reveal act that solved the query. - function getQueryResultAuditTrail(uint256 _queryId) + /// @notice Returns reference to the commit/reveal act that took place on the Witnet blockchain. + /// @param _witnetQueryId The unique query identifier. + /// @return _witnetTimestamp Timestamp at which the query was solved by the Witnet blockchain. + /// @return _witnetTallyHash Hash of the commit/reveal act that solved the query on the Witnet blockchain. + /// @return _witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. + function getQueryResultAuditTrail(uint256 _witnetQueryId) external view override - returns (uint256, bytes32) + returns ( + uint256 _witnetTimestamp, + bytes32 _witnetTallyHash, + uint256 _witnetEvmFinalityBlock + ) { - Witnet.Response storage __response = __seekQueryResponse(_queryId); + Witnet.Response storage __response = __seekQueryResponse(_witnetQueryId); return ( __response.timestamp, - __response.drTxHash + __response.tallyHash, + __response.unpackEvmFinalityBlock() ); } /// @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) + /// @param _witnetQueryId The unique query identifier. + function getQueryResultError(uint256 _witnetQueryId) override external view returns (Witnet.ResultError memory) { - Witnet.ResultStatus _status = getQueryResultStatus(_queryId); - try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_queryId).cborBytes) + Witnet.ResultStatus _status = getQueryResultStatus(_witnetQueryId); + try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_witnetQueryId).cborBytes) returns (Witnet.ResultError memory _resultError) { return _resultError; @@ -333,20 +368,31 @@ abstract contract WitnetRequestBoardTrustableBase /// @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 getQueryResultStatus(uint256 _queryId) + /// @param _witnetQueryId The unique query identifier. + function getQueryResultStatus(uint256 _witnetQueryId) virtual public view returns (Witnet.ResultStatus) { - Witnet.QueryStatus _queryStatus = _statusOf(_queryId); - if (_queryStatus == Witnet.QueryStatus.Reported) { - bytes storage __cborValues = __seekQueryResponse(_queryId).cborBytes; + Witnet.QueryStatus _queryStatus = _statusOf(_witnetQueryId); + if ( + _queryStatus == Witnet.QueryStatus.Finalized + || _queryStatus == Witnet.QueryStatus.Reported + ) { + bytes storage __cborValues = __seekQueryResponse(_witnetQueryId).cborBytes; // determine whether reported result is an error by peeking the first byte - return (__cborValues[0] == bytes1(0xd8) - ? Witnet.ResultStatus.Error - : Witnet.ResultStatus.Ready + return (__cborValues[0] == bytes1(0xd8) + ? (_queryStatus == Witnet.QueryStatus.Finalized + ? Witnet.ResultStatus.Error + : Witnet.ResultStatus.AwaitingError + ) : (_queryStatus == Witnet.QueryStatus.Finalized + ? Witnet.ResultStatus.Ready + : Witnet.ResultStatus.AwaitingReady + ) ); - } else if (_queryStatus == Witnet.QueryStatus.Posted) { + } else if ( + _queryStatus == Witnet.QueryStatus.Posted + || _queryStatus == Witnet.QueryStatus.Undeliverable + ) { return Witnet.ResultStatus.Awaiting; } else { return Witnet.ResultStatus.Void; @@ -354,266 +400,240 @@ abstract contract WitnetRequestBoardTrustableBase } /// Retrieves the reward currently set for a previously posted request. - /// @dev Fails if the `_queryId` is not valid or, if it has already been + /// @dev Fails if the `_witnetQueryId` is not valid or, if it has already been /// @dev reported, or deleted. - /// @param _queryId The unique query identifier - function getQueryReward(uint256 _queryId) - external view + /// @param _witnetQueryId The unique query identifier + function getQueryReward(uint256 _witnetQueryId) override - inStatus(_queryId, Witnet.QueryStatus.Posted) + external view + inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) returns (uint256) { - return __seekQueryRequest(_queryId).evmReward; + return __seekQueryRequest(_witnetQueryId).evmReward; } /// Gets current status of given query. - function getQueryStatus(uint256 _queryId) + function getQueryStatus(uint256 _witnetQueryId) external view override returns (Witnet.QueryStatus) { - return _statusOf(_queryId); + return _statusOf(_witnetQueryId); } - /// Returns next request id to be generated by the Witnet Request Board. - function getNextQueryId() - external view - override - returns (uint256) - { - return __storage().nonce + 1; - } - - /// Requests the execution of the given Witnet Data Request in expectation that it will be relayed and solved by the Witnet DON. - /// A reward amount is escrowed by the Witnet Request Board that will be transferred to the reporter who relays back the Witnet-provided - /// result to this request. - /// @dev Fails if: - /// @dev - provided reward is too low. - /// @param _radHash The radHash of the Witnet Data Request. - /// @param _slaHash The slaHash of the Witnet Data Request. - function postRequest(bytes32 _radHash, bytes32 _slaHash) - virtual override - external payable - checkReward(estimateBaseFee(_getGasPrice(), 32)) - returns (uint256 _queryId) - { - _queryId = __postRequest(_radHash, _slaHash); - // Let observers know that a new request has been posted - emit NewWitnetQuery(_queryId, _getMsgValue()); - } /// @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-provided result to this request. - /// @dev Fails if provided reward is too low. - /// @dev The result to the query will be saved into the WitnetRequestBoard storage. - /// @param _radHash The RAD hash of the data request to be solved by Witnet. + /// @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 WitnetBytecodes 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 postRequest( - bytes32 _radHash, - WitnetV2.RadonSLA calldata _querySLA - ) - virtual override - external payable - checkReward(estimateBaseFee(_getGasPrice(), 32)) - checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postRequest( - _radHash, - _querySLA.packed() - ); - // Let observers know that a new request has been posted - emit NewWitnetQuery(_queryId, _getMsgValue()); - } - - /// @notice Requests the execution of the given Witnet Data Request bytecode, 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-provided result to this request. - /// @dev Fails if provided reward is too low. - /// @dev The result to the query will be saved into the WitnetRequestBoard storage. - /// @param _radBytecode The raw bytecode of the Witnet Data Request to be solved by Witnet. - /// @param _querySLA The data query SLA to be fulfilled by the Witnet blockchain. - /// @return _queryId A unique query identifier. + /// @return _witnetQueryId Unique query identifier. function postRequest( - bytes calldata _radBytecode, + bytes32 _queryRAD, WitnetV2.RadonSLA calldata _querySLA ) virtual override external payable - checkReward(estimateBaseFee(_getGasPrice(), 32)) + checkReward(estimateBaseFee(_getGasPrice(), _queryRAD))//32))// _queryRAD)) checkSLA(_querySLA) - returns (uint256 _queryId) - { - _queryId = __postRequest( - registry().hashOf(_radBytecode), - _querySLA.packed() + returns (uint256 _witnetQueryId) + { + _witnetQueryId = __postRequest(_queryRAD, _querySLA.toBytes32(), 0); + // Let Web3 observers know that a new request has been posted + emit WitnetQuery( + _witnetQueryId, + _querySLA.totalWitnessingReward(), + _getMsgValue() ); - // Let observers know that a new request has been posted - emit NewQueryWithBytecode(_queryId, _getMsgValue(), _radBytecode); } /// @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-provided result to this request. - /// @dev Fails if, provided reward is too low. - /// @dev The caller must be a contract implementing the IWitnetConsumer interface. - /// @param _radHash The RAD hash of the data request to be solved by Witnet. + /// @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 `WitnetResponseDeliveryFailed` + /// @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 IWitnetConsumer interface; + /// @dev - the RAD hash was not previously verified by the WitnetBytecodes 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 _queryMaxCallbackGas Maximum gas to be spent when reporting the data request result. - /// @return _queryId Unique query identifier. + /// @param _queryCallbackGasLimit Maximum gas to be spent when reporting the data request result. + /// @return _witnetQueryId Unique query identifier. function postRequestWithCallback( - bytes32 _radHash, + bytes32 _queryRAD, WitnetV2.RadonSLA calldata _querySLA, - uint256 _queryMaxCallbackGas + uint96 _queryCallbackGasLimit ) virtual override external payable - checkCallbackRecipient(msg.sender) - checkReward(estimateBaseFeeWithCallback(_getGasPrice(), 32, _queryMaxCallbackGas)) + checkCallbackRecipient(msg.sender, _queryCallbackGasLimit) + checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryCallbackGasLimit)) checkSLA(_querySLA) - returns (uint256 _queryId) + returns (uint256 _witnetQueryId) { - _queryId = __postRequest( - _radHash, - _querySLA.packed() + _witnetQueryId = __postRequest( + _queryRAD, + _querySLA.toBytes32(), + _queryCallbackGasLimit + ); + emit WitnetQuery( + _witnetQueryId, + _querySLA.totalWitnessingReward(), + _getMsgValue() ); - __seekQueryRequest(_queryId).maxCallbackGas = _queryMaxCallbackGas; - emit NewWitnetQuery(_queryId, _getMsgValue()); - } - - function retryQuery(uint256 _queryId) - virtual override - external payable - inStatus(_queryId, Witnet.QueryStatus.Reported) - onlyRequester(_queryId) - returns (uint256 _newQuery) - { - _newQuery = __newQuery(); - __storage().queries[_newQuery] = __storage().queries[_queryId]; - // todo ... } - function retryQueryWithCallback(uint256 _queryId, uint256) + /// @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 `WitnetResponseDeliveryFailed` + /// @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 IWitnetConsumer 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. + /// @return _witnetQueryId Unique query identifier. + function postRequestWithCallback( + bytes calldata _queryUnverifiedBytecode, + WitnetV2.RadonSLA calldata _querySLA, + uint96 _queryCallbackGasLimit + ) virtual override - external payable - inStatus(_queryId, Witnet.QueryStatus.Reported) - onlyRequester(_queryId) - returns (uint256) + external payable + checkCallbackRecipient(msg.sender, _queryCallbackGasLimit) + checkReward(estimateBaseFeeWithCallback(_getGasPrice(), _queryCallbackGasLimit)) + checkSLA(_querySLA) + returns (uint256 _witnetQueryId) { - // TODO + _witnetQueryId = __postRequest( + bytes32(0), + _querySLA.toBytes32(), + _queryCallbackGasLimit + ); + __seekQueryRequest(_witnetQueryId).bytecode = _queryUnverifiedBytecode; + emit WitnetQuery( + _witnetQueryId, + _querySLA.totalWitnessingReward(), + _getMsgValue() + ); } - + /// Increments the reward of a previously posted request by adding the transaction value to it. - /// @dev Updates request `gasPrice` in case this method is called with a higher - /// @dev gas price value than the one used in previous calls to `postRequest` or - /// @dev `upgradeReward`. - /// @dev Fails if the `_queryId` is not in 'Posted' status. - /// @dev Fails also in case the request `gasPrice` is increased, and the new - /// @dev reward value gets below new recalculated threshold. - /// @param _queryId The unique query identifier. - function upgradeQueryReward(uint256 _queryId) + /// @dev Fails if the `_witnetQueryId` is not in 'Posted' status. + /// @param _witnetQueryId The unique query identifier. + function upgradeQueryReward(uint256 _witnetQueryId) external payable virtual override - inStatus(_queryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) { - Witnet.Request storage __request = __seekQueryRequest(_queryId); + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); __request.evmReward += _getMsgValue(); - emit WitnetQueryRewardUpgraded(_queryId, __request.evmReward); + emit WitnetQueryRewardUpgraded(_witnetQueryId, __request.evmReward); } // ================================================================================================================ // --- Full implementation of IWitnetRequestBoardReporter --------------------------------------------------------- - /// Reports the Witnet-provided result to a previously posted request. + /// 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 `_drTxHash` is zero; + /// @dev - the `_witnetQueryId` is not in 'Posted' status. + /// @dev - provided `_witnetResultTallyHash` is zero; /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique identifier of the data request. - /// @param _drTxHash The hash of the solving tally transaction in Witnet. - /// @param _cborBytes The result itself as bytes. + /// @param _witnetQueryId The unique identifier of the data request. + /// @param _witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _witnetResultCborBytes The result itself as bytes. function reportResult( - uint256 _queryId, - bytes32 _drTxHash, - bytes calldata _cborBytes + uint256 _witnetQueryId, + bytes32 _witnetResultTallyHash, + bytes calldata _witnetResultCborBytes ) external override onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) returns (uint256) { require( - _drTxHash != 0, - "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + _witnetResultTallyHash != 0, + "WitnetRequestBoardTrustableDefault: tally has cannot be zero" ); // Ensures the result bytes do not have zero length // This would not be a valid encoding with CBOR and could trigger a reentrancy attack require( - _cborBytes.length != 0, + _witnetResultCborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); // Do actual report: // solhint-disable not-rely-on-time return __reportResultAndReward( - _queryId, - block.timestamp, - _drTxHash, - _cborBytes + _witnetQueryId, + uint64(block.timestamp), + _witnetResultTallyHash, + _witnetResultCborBytes ); } - /// Reports the Witnet-provided result to a previously posted request. + /// 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 `_drTxHash` is zero; - /// @dev - length of provided `_result` is zero. - /// @param _queryId The unique query identifier - /// @param _timestamp The timestamp of the solving tally transaction in Witnet. - /// @param _drTxHash The hash of the solving tally transaction in Witnet. - /// @param _cborBytes The result itself as bytes. + /// @dev - the `_witnetQueryId` is not in 'Posted' status. + /// @dev - provided `_witnetResultTallyHash` is zero; + /// @dev - length of provided `_witnetResultCborBytes` is zero. + /// @param _witnetQueryId The unique query identifier + /// @param _witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. + /// @param _witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _witnetResultCborBytes The result itself as bytes. function reportResult( - uint256 _queryId, - uint256 _timestamp, - bytes32 _drTxHash, - bytes calldata _cborBytes + uint256 _witnetQueryId, + uint64 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + bytes calldata _witnetResultCborBytes ) external override onlyReporters - inStatus(_queryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) returns (uint256) { require( - _timestamp <= block.timestamp, + _witnetResultTimestamp <= block.timestamp, "WitnetRequestBoardTrustableDefault: bad timestamp" ); require( - _drTxHash != 0, - "WitnetRequestBoardTrustableDefault: Witnet drTxHash cannot be zero" + _witnetResultTallyHash != 0, + "WitnetRequestBoardTrustableDefault: Witnet tallyHash cannot be zero" ); // Ensures the result bytes do not have zero length (this would not be a valid CBOR encoding // and could trigger a reentrancy attack) require( - _cborBytes.length != 0, + _witnetResultCborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); // Do actual report and return reward transfered to the reproter: return __reportResultAndReward( - _queryId, - _timestamp, - _drTxHash, - _cborBytes + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + _witnetResultCborBytes ); } - /// Reports Witnet-provided results to multiple requests within a single EVM tx. + /// Reports Witnet-provable results to multiple requests within a single EVM tx. /// @dev Fails if called from unauthorized address. /// @dev Emits a PostedResult event for every succesfully reported result, if any. /// @param _batchResults Array of BatchedResult structs, every one containing: @@ -639,11 +659,11 @@ abstract contract WitnetRequestBoardTrustableBase "WitnetRequestBoardTrustableBase: bad queryId" ); } - } else if (_batchResults[_i].drTxHash == 0) { + } else if (_batchResults[_i].tallyHash == 0) { if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad drTxHash" + "WitnetRequestBoardTrustableBase: bad tallyHash" ); } } else if (_batchResults[_i].cborBytes.length == 0) { @@ -663,8 +683,8 @@ abstract contract WitnetRequestBoardTrustableBase } else { _batchReward += __reportResult( _batchResults[_i].queryId, - _batchResults[_i].timestamp == 0 ? block.timestamp : _batchResults[_i].timestamp, - _batchResults[_i].drTxHash, + _batchResults[_i].timestamp == 0 ? uint64(block.timestamp) : _batchResults[_i].timestamp, + _batchResults[_i].tallyHash, _batchResults[_i].cborBytes ); } @@ -746,160 +766,137 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- - function __newQuery() - virtual internal returns (uint256) + function __newQueryId(bytes32 _queryRAD, bytes32 _querySLA) + virtual internal view + returns (uint256) { - return ++ __storage().nonce; + return uint(keccak256(abi.encode( + group, + block.number, + msg.sender, + _queryRAD, + _querySLA + ))); } - function __postRequest(bytes32 _radHash, bytes32 _slaPacked) + function __postRequest(bytes32 _radHash, bytes32 _packedSLA, uint96 _callbackGasLimit) virtual internal - returns (uint256 _queryId) + returns (uint256 _witnetQueryId) { - _queryId = __newQuery(); - Witnet.Request storage __request = __seekQueryRequest(_queryId); + _witnetQueryId = __newQueryId(_radHash, _packedSLA); + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + require( + __request.fromCallbackGas == bytes32(0), + "WitnetRequestBoardTrustableBase: already posted" + ); { - __request.radHash = _radHash; - __request.slaPacked = _slaPacked; + __request.fromCallbackGas = Witnet.packRequesterCallbackGasLimit(msg.sender, _callbackGasLimit); + __request.RAD = _radHash; + __request.SLA = _packedSLA; __request.evmReward = _getMsgValue(); } - __seekQuery(_queryId).from = msg.sender; } function __reportResult( - uint256 _queryId, - uint256 _drTxTimestamp, - bytes32 _drTxHash, - bytes calldata _cborBytes + uint256 _witnetQueryId, + uint64 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + bytes calldata _witnetResultCborBytes ) - internal + virtual internal returns (uint256 _evmReward) { - Witnet.Query storage __query = __seekQuery(_queryId); + // read requester address and whether a callback was requested: + Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + (address _evmRequester, uint96 _evmCallbackGasLimit) = __request.unpackRequesterAndCallbackGasLimit(); - // read and erase query report reward - Witnet.Request storage __request = __query.request; + // 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.maxCallbackGas > 0) { - uint _evmCallbackActualGas = gasleft() - 6295; - bool _evmCallbackSuccess = false; - string memory _evmCallbackRevertMessage; - // if callback is required, select which callback method to call - // depending on whether the query was solved with or without errors: - if (_cborBytes[0] == bytes1(0xd8)) { - WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_cborBytes).readArray(); - if (_errors.length < 2) { - // try to report result with unknown error: - try IWitnetConsumer(__query.from).reportWitnetQueryError{gas: __request.maxCallbackGas}( - _queryId, - _drTxHash, - _drTxTimestamp, - block.number, - 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 IWitnetConsumer(__query.from).reportWitnetQueryError{gas: __request.maxCallbackGas}( - _queryId, - _drTxHash, - _drTxTimestamp, - block.number, - 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 IWitnetConsumer(__query.from).reportWitnetQueryResult{gas: __request.maxCallbackGas}( - _queryId, - _drTxHash, - _drTxTimestamp, - block.number, - WitnetCBOR.fromBytes(_cborBytes) - ) { - _evmCallbackSuccess = true; - } catch Error(string memory err) { - _evmCallbackRevertMessage = err; - } catch (bytes memory) {} - } + if (_evmCallbackGasLimit > 0) { + ( + uint256 _evmCallbackActualGas, + bool _evmCallbackSuccess, + string memory _evmCallbackRevertMessage + ) = __reportResultCallback( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + _witnetResultCborBytes, + _evmRequester, + _evmCallbackGasLimit + ); if (_evmCallbackSuccess) { // => the callback run successfully emit WitnetResponseDelivered( - _queryId, + _witnetQueryId, _getGasPrice(), - _evmCallbackActualGas - gasleft() + _evmCallbackActualGas + ); + // upon successfull delivery, the audit trail is saved into storage, but not the actual result + // as it was already passed over to the requester: + __writeQueryResponse( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + hex"" ); - // after successfull report, remove the whole query from storage: - delete __storage().queries[_queryId]; } else { // => the callback reverted emit WitnetResponseDeliveryFailed( - _queryId, + _witnetQueryId, + _witnetResultCborBytes, _getGasPrice(), - _evmCallbackActualGas - gasleft(), - bytes(_evmCallbackRevertMessage).length > 0 - ? _evmCallbackRevertMessage - : "WitnetRequestBoardTrustableDefault: callback gas limit exceeded?" + _evmCallbackActualGas, + bytes(_evmCallbackRevertMessage).length > 0 + ? _evmCallbackRevertMessage + : "WitnetRequestBoardTrustableBase: callback exceeded gas limit" ); - // write query result and traceability data into storage: - __writeQueryResponse(_queryId, _drTxHash, _drTxTimestamp, _cborBytes); - } + // upon failing delivery, only the witnet result tally hash is saved into storage, + // as to distinguish Reported vs Undelivered status. The query result is not saved + // into storage as to avoid buffer-overflow attacks (on reporters): + __writeQueryResponse( + _witnetQueryId, + 0, + _witnetResultTallyHash, + hex"" + ); + } } else { // => no callback is involved emit WitnetQueryReported( - _queryId, + _witnetQueryId, _getGasPrice() ); - // write query result and traceability data into storage - __writeQueryResponse(_queryId, _drTxHash, _drTxTimestamp, _cborBytes); + // write query result and audit trail data into storage + __writeQueryResponse( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + _witnetResultCborBytes + ); } } - function __writeQueryResponse( - uint256 _queryId, - bytes32 _drTxHash, - uint256 _drTxTimestamp, - bytes memory _cborBytes - ) - internal - { - __seekQuery(_queryId).response = Witnet.Response({ - timestamp: _drTxTimestamp, - drTxHash: _drTxHash, - reporter: msg.sender, - cborBytes: _cborBytes - }); - } - function __reportResultAndReward( - uint256 _queryId, - uint256 _timestamp, - bytes32 _drTxHash, - bytes calldata _cborBytes + uint256 _witnetQueryId, + uint64 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + bytes calldata _witnetResultCborBytes ) - internal + virtual internal returns (uint256 _evmReward) { - _evmReward = __reportResult(_queryId, _timestamp, _drTxHash, _cborBytes); + _evmReward = __reportResult( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + _witnetResultCborBytes + ); // transfer reward to reporter __safeTransferTo( payable(msg.sender), @@ -907,7 +904,80 @@ abstract contract WitnetRequestBoardTrustableBase ); } - function __setReporters(address[] memory _reporters) internal { + function __reportResultCallback( + uint256 _witnetQueryId, + uint64 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + bytes calldata _witnetResultCborBytes, + address _evmRequester, + uint256 _evmCallbackGasLimit + ) + virtual internal + returns ( + uint256 _evmCallbackActualGas, + bool _evmCallbackSuccess, + string memory _evmCallbackRevertMessage + ) + { + _evmCallbackActualGas = gasleft(); + if (_witnetResultCborBytes[0] == bytes1(0xd8)) { + WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_witnetResultCborBytes).readArray(); + if (_errors.length < 2) { + // try to report result with unknown error: + try IWitnetConsumer(_evmRequester).reportWitnetQueryError{gas: _evmCallbackGasLimit}( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + block.number, + 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 IWitnetConsumer(_evmRequester).reportWitnetQueryError{gas: _evmCallbackGasLimit}( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + block.number, + 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 IWitnetConsumer(_evmRequester).reportWitnetQueryResult{gas: _evmCallbackGasLimit}( + _witnetQueryId, + _witnetResultTimestamp, + _witnetResultTallyHash, + block.number, + WitnetCBOR.fromBytes(_witnetResultCborBytes) + ) { + _evmCallbackSuccess = true; + } catch Error(string memory err) { + _evmCallbackRevertMessage = err; + } catch (bytes memory) {} + } + _evmCallbackActualGas -= gasleft(); + } + + function __setReporters(address[] memory _reporters) + virtual internal + { for (uint ix = 0; ix < _reporters.length; ix ++) { address _reporter = _reporters[ix]; _acls().isReporter_[_reporter] = true; @@ -915,4 +985,20 @@ abstract contract WitnetRequestBoardTrustableBase emit ReportersSet(_reporters); } + function __writeQueryResponse( + uint256 _witnetQueryId, + uint64 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + bytes memory _witnetResultCborBytes + ) + virtual internal + { + __seekQuery(_witnetQueryId).response = Witnet.Response({ + fromFinality: Witnet.packReporterEvmFinalityBlock(msg.sender, block.number), + timestamp: _witnetResultTimestamp, + tallyHash: _witnetResultTallyHash, + cborBytes: _witnetResultCborBytes + }); + } + } \ No newline at end of file From 44723a85f5b782c01efe66f10590ba1343716d12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 16:20:13 +0100 Subject: [PATCH 068/149] chore: arrange contract/apps/* to latest changes --- contracts/apps/UsingWitnet.sol | 35 +++----------- contracts/apps/UsingWitnetRandomness.sol | 46 ++++++------------ contracts/apps/UsingWitnetRequest.sol | 6 +-- contracts/apps/UsingWitnetRequestTemplate.sol | 6 +-- contracts/apps/WitnetConsumer.sol | 47 ++++++++++++++----- contracts/apps/WitnetPriceFeeds.sol | 18 +++---- contracts/apps/WitnetRandomness.sol | 13 ++--- contracts/apps/WitnetRequestConsumer.sol | 32 +++++++++---- .../apps/WitnetRequestTemplateConsumer.sol | 35 ++++++++++---- contracts/mocks/WitnetRandomnessMock.sol | 2 +- 10 files changed, 129 insertions(+), 111 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index 088d67e02..546fd4349 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -48,29 +48,19 @@ abstract contract UsingWitnet /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - function _witnetEstimateBaseFee(uint256 _resultMaxSize) + function _witnetEstimateBaseFee(uint16 _resultMaxSize) virtual internal view returns (uint256) { return __witnet.estimateBaseFee(tx.gasprice, _resultMaxSize); } - /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. - /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. - /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - /// @param _maxCallbackGas Maximum gas to be spent when reporting the data request result. - function _witnetEstimateBaseFeeWithCallback(uint256 _resultMaxSize, uint256 _maxCallbackGas) - internal view - returns (uint256) - { - return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _resultMaxSize, _maxCallbackGas); - } - function _witnetCheckQueryResultAuditTrail(uint256 _witnetQueryId) internal view returns ( - uint256 _witnetQueryResponseTimestamp, - bytes32 _witnetQueryResponseDrTxHash + uint256 _witnetResultTimestamp, + bytes32 _witnetResultTallyHash, + uint256 _witnetEvmFinalityBlock ) { return __witnet.getQueryResultAuditTrail(_witnetQueryId); @@ -92,8 +82,8 @@ abstract contract UsingWitnet function __witnetRequestData( uint256 _witnetEvmReward, - bytes32 _witnetRadHash, - WitnetV2.RadonSLA memory _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA, + bytes32 _witnetRadHash ) virtual internal returns (uint256) { @@ -102,17 +92,4 @@ abstract contract UsingWitnet _witnetQuerySLA ); } - - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes calldata _witnetRadBytecode, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) - internal returns (uint256) - { - return __witnet.postRequest{value: _witnetEvmReward}( - _witnetRadBytecode, - _witnetQuerySLA - ); - } } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index 708b6e9e8..df034d3f0 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -18,9 +18,9 @@ abstract contract UsingWitnetRandomness bytes32 internal immutable __witnetRandomnessRadHash; bytes32 private __defaultRandomizePackedSLA; - constructor(WitnetRequestBoard _wrb, uint256 _maxRandomizeCallbackGas) + constructor(WitnetRequestBoard _wrb, uint96 _randomizeCallbackGasLimit) UsingWitnet(_wrb) - WitnetConsumer(_maxRandomizeCallbackGas) + WitnetConsumer(_randomizeCallbackGasLimit) { // Build Witnet randomness request { @@ -48,7 +48,7 @@ abstract contract UsingWitnetRandomness _retrievals, _aggregator, _tally, - 0 + 35 // CBOR overhead (3 bytes) + payload (32 bytes) )); __witnetRandomnessRadHash = WitnetRequest( _template.buildRequest(new string[][](_retrievals.length)) @@ -56,9 +56,10 @@ abstract contract UsingWitnetRandomness } // Settle default randomize SLA: __defaultRandomizePackedSLA = WitnetV2.RadonSLA({ - numWitnesses: 7, - witnessingCollateralRatio: 10 - }).packed(); + witnessingCommitteeSize: 7, + witnessingCollateralRatio: 10, + witnessingWitReward: 10 ** 9 + }).toBytes32(); } function _defaultRandomizeSLA() internal view returns (WitnetV2.RadonSLA memory) { @@ -69,32 +70,13 @@ abstract contract UsingWitnetRandomness return _witnetEstimateBaseFee(35); } - /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. - function _msbDeBruijn32(uint32 _v) private pure returns (uint8) { - uint8[32] memory _bitPosition = [ - 0, 9, 1, 10, 13, 21, 2, 29, - 11, 14, 16, 18, 22, 25, 3, 30, - 8, 12, 20, 28, 15, 17, 24, 7, - 19, 27, 23, 6, 26, 5, 4, 31 - ]; - _v |= _v >> 1; - _v |= _v >> 2; - _v |= _v >> 4; - _v |= _v >> 8; - _v |= _v >> 16; - return _bitPosition[ - uint32(_v * uint256(0x07c4acdd)) >> 27 - ]; - } - function _randomUniform(uint32 _range, uint256 _nonce, bytes32 _seed) internal pure returns (uint32) { - uint8 _flagBits = uint8(255 - _msbDeBruijn32(_range)); uint256 _number = uint256( keccak256( abi.encode(_seed, _nonce) ) - ) & uint256(2 ** _flagBits - 1); - return uint32((_number * _range) >> _flagBits); + ) & uint256(2 ** 224 - 1); + return uint32((_number * _range) >> 224); } function _readRandomnessFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { @@ -104,8 +86,8 @@ abstract contract UsingWitnetRandomness function __randomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { return __witnetRequestData( _witnetEvmReward, - __witnetRandomnessRadHash, - _defaultRandomizeSLA() + _defaultRandomizeSLA(), + __witnetRandomnessRadHash ); } @@ -118,12 +100,12 @@ abstract contract UsingWitnetRandomness { return __witnetRequestData( _witnetEvmReward, - __witnetRandomnessRadHash, - _witnetQuerySLA + _witnetQuerySLA, + __witnetRandomnessRadHash ); } function __settleRandomizeDefaultSLA(WitnetV2.RadonSLA calldata sla) virtual internal { - __defaultRandomizePackedSLA = sla.packed(); + __defaultRandomizePackedSLA = sla.toBytes32(); } } \ No newline at end of file diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 40ae556ab..3e75ca492 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -10,7 +10,7 @@ abstract contract UsingWitnetRequest WitnetRequest immutable public dataRequest; bytes32 immutable internal __witnetRequestRadHash; - uint256 immutable internal __witnetResultMaxSize; + uint16 immutable internal __witnetResultMaxSize; constructor (WitnetRequest _witnetRequest) UsingWitnet(_witnetRequest.witnet()) @@ -42,8 +42,8 @@ abstract contract UsingWitnetRequest { return __witnetRequestData( _witnetEvmReward, - __witnetRequestRadHash, - _witnetQuerySLA + _witnetQuerySLA, + __witnetRequestRadHash ); } diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index ffd54bbcb..c95d591da 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -9,7 +9,7 @@ abstract contract UsingWitnetRequestTemplate { WitnetRequestTemplate immutable public dataRequestTemplate; - uint256 immutable internal __witnetResultMaxSize; + uint16 immutable internal __witnetResultMaxSize; constructor (WitnetRequestTemplate _requestTemplate) UsingWitnet(_requestTemplate.witnet()) @@ -53,8 +53,8 @@ abstract contract UsingWitnetRequestTemplate { return __witnetRequestData( _witnetEvmReward, - _witnetBuildRadHash(_witnetRequestArgs), - _witnetQuerySLA + _witnetQuerySLA, + _witnetBuildRadHash(_witnetRequestArgs) ); } diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 0c02a8ed1..3a460dc29 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -9,15 +9,15 @@ abstract contract WitnetConsumer IWitnetConsumer, UsingWitnet { - uint256 private immutable __witnetReportCallbackMaxGas; + uint96 private immutable __witnetReportCallbackGasLimit; modifier onlyFromWitnet { require(msg.sender == address(__witnet), "WitnetConsumer: unauthorized"); _; } - constructor (uint256 _maxCallbackGas) { - __witnetReportCallbackMaxGas = _maxCallbackGas; + constructor (uint96 _maxCallbackGas) { + __witnetReportCallbackGasLimit = _maxCallbackGas; } @@ -32,24 +32,35 @@ abstract contract WitnetConsumer /// =============================================================================================================== /// --- WitnetConsumer virtual methods ---------------------------------------------------------------------------- - function _witnetEstimateBaseFee(uint256 _resultMaxSize) + function _witnetEstimateBaseFee(uint16) virtual override internal view returns (uint256) { - return _witnetEstimateBaseFeeWithCallback(_resultMaxSize, _witnetReportCallbackMaxGas()); + return _witnetEstimateBaseFeeWithCallback(_witnetReportCallbackGasLimit()); } - function _witnetReportCallbackMaxGas() - virtual internal view + + /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. + /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. + /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. + function _witnetEstimateBaseFeeWithCallback(uint96 _callbackGasLimit) + virtual internal view returns (uint256) { - return __witnetReportCallbackMaxGas; + return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _callbackGasLimit); + } + + function _witnetReportCallbackGasLimit() + virtual internal view + returns (uint96) + { + return __witnetReportCallbackGasLimit; } function __witnetRequestData( uint256 _witnetEvmReward, - bytes32 _witnetRadHash, - WitnetV2.RadonSLA memory _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA, + bytes32 _witnetRadHash ) virtual override internal returns (uint256) @@ -57,7 +68,21 @@ abstract contract WitnetConsumer return __witnet.postRequestWithCallback{value: _witnetEvmReward}( _witnetRadHash, _witnetQuerySLA, - __witnetReportCallbackMaxGas + __witnetReportCallbackGasLimit + ); + } + + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA memory _witnetQuerySLA, + bytes calldata _witnetRequestBytecode + ) + virtual internal returns (uint256) + { + return __witnet.postRequestWithCallback{value: _witnetEvmReward}( + _witnetRequestBytecode, + _witnetQuerySLA, + __witnetReportCallbackGasLimit ); } diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 13ce07490..515f82648 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -27,6 +27,7 @@ contract WitnetPriceFeeds WitnetPriceFeedsData { using Witnet for Witnet.Result; + using Witnet for Witnet.Response; using WitnetV2 for WitnetV2.RadonSLA; bytes4 immutable public specs = type(IWitnetPriceFeeds).interfaceId; @@ -45,8 +46,9 @@ contract WitnetPriceFeeds ); witnet = _wrb; __settleDefaultRadonSLA(WitnetV2.RadonSLA({ - numWitnesses: 5, - witnessingCollateralRatio: 10 + witnessingCommitteeSize: 5, + witnessingCollateralRatio: 10, + witnessingWitReward: 10 ** 9 })); } @@ -171,7 +173,7 @@ contract WitnetPriceFeeds function latestUpdateRequest(bytes4 feedId) override external view - returns (Witnet.Request memory) + returns (bytes32, WitnetV2.RadonSLA memory) { return witnet.getQueryRequest(latestUpdateQueryId(feedId)); } @@ -459,7 +461,7 @@ contract WitnetPriceFeeds return IWitnetPriceSolver.Price({ value: _latestResult.asUint(), timestamp: _latestResponse.timestamp, - drTxHash: _latestResponse.drTxHash, + tallyHash: _latestResponse.tallyHash, status: latestUpdateResultStatus(feedId) }); } else { @@ -485,7 +487,7 @@ contract WitnetPriceFeeds return IWitnetPriceSolver.Price({ value: 0, timestamp: 0, - drTxHash: 0, + tallyHash: 0, status: latestUpdateResultStatus(feedId) }); } @@ -613,7 +615,7 @@ contract WitnetPriceFeeds _usedFunds = estimateUpdateBaseFee(tx.gasprice); require( msg.value >= _usedFunds, - "WitnetPriceFeeds: reward too low" + "WitnetPriceFeeds: insufficient reward" ); uint _latestId = __feed.latestUpdateQueryId; Witnet.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); @@ -651,7 +653,7 @@ contract WitnetPriceFeeds emit UpdatingFeed( msg.sender, feedId, - querySLA.packed(), + querySLA.toBytes32(), _usedFunds ); } @@ -670,6 +672,6 @@ contract WitnetPriceFeeds } function __settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) internal { - __storage().packedDefaultSLA = WitnetV2.packed(sla); + __storage().packedDefaultSLA = WitnetV2.toBytes32(sla); } } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 3996166e6..5a3990f21 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -70,7 +70,7 @@ contract WitnetRandomness _retrievals, _aggregator, _tally, - 0 + 35 // CBOR overhead (3 bytes) + payload (32 bytes) )); witnetRandomnessRequest = WitnetRequest(_template.buildRequest(new string[][](_retrievals.length))); __witnetRandomnessRadHash = witnetRandomnessRequest.radHash(); @@ -328,8 +328,8 @@ contract WitnetRandomness // Post the Witnet Randomness request: uint _queryId = __witnetRequestData( msg.value, - __witnetRandomnessRadHash, - __witnetRandomnessPackedSLA.toRadonSLA() + __witnetRandomnessPackedSLA.toRadonSLA(), + __witnetRandomnessRadHash ); // Keep Randomize data in storage: RandomizeData storage __data = __randomize_[block.number]; @@ -465,8 +465,9 @@ contract WitnetRandomness function __initializeWitnetRandomnessSLA() virtual internal { __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ - numWitnesses: 5, - witnessingCollateralRatio: 10 + witnessingCommitteeSize: 5, + witnessingCollateralRatio: 10, + witnessingWitReward: 10 ** 9 })); } @@ -474,7 +475,7 @@ contract WitnetRandomness internal returns (bytes32 _packed) { - _packed = sla.packed(); + _packed = sla.toBytes32(); __witnetRandomnessPackedSLA = _packed; } diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index b6071366b..e8f4e0ec5 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -12,14 +12,14 @@ abstract contract WitnetRequestConsumer using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - constructor(WitnetRequest _witnetRequest, uint256 _maxCallbackGas) + constructor(WitnetRequest _witnetRequest, uint96 _callbackGasLimit) UsingWitnetRequest(_witnetRequest) - WitnetConsumer(_maxCallbackGas) + WitnetConsumer(_callbackGasLimit) { require( - _witnetEstimateBaseFeeWithCallback(_witnetRequest.resultDataMaxSize(), _maxCallbackGas) + _witnetEstimateBaseFeeWithCallback(_callbackGasLimit) > UsingWitnetRequest._witnetEstimateBaseFee(), - "WitnetRequestConsumer: callback gas limit too low" + "WitnetRequestConsumer: insufficient callback gas limit" ); } @@ -31,7 +31,7 @@ abstract contract WitnetRequestConsumer return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); } - function _witnetEstimateBaseFee(uint256 _resultMaxSize) + function _witnetEstimateBaseFee(uint16 _resultMaxSize) virtual override(UsingWitnet, WitnetConsumer) internal view returns (uint256) @@ -41,17 +41,31 @@ abstract contract WitnetRequestConsumer function __witnetRequestData( uint256 _witnetEvmReward, - bytes32 _witnetRadHash, - WitnetV2.RadonSLA memory _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA, + bytes32 _witnetRadHash ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) { return WitnetConsumer.__witnetRequestData( _witnetEvmReward, - _witnetRadHash, - _witnetQuerySLA + _witnetQuerySLA, + _witnetRadHash ); } + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA memory _witnetQuerySLA + ) + virtual override internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + __witnetRequestRadHash + ); + } + } diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index 1f804cf1d..7adad22c5 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -12,14 +12,14 @@ abstract contract WitnetRequestTemplateConsumer using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - constructor(WitnetRequestTemplate _requestTemplate, uint256 _maxCallbackGas) + constructor(WitnetRequestTemplate _requestTemplate, uint96 _callbackGasLimit) UsingWitnetRequestTemplate(_requestTemplate) - WitnetConsumer(_maxCallbackGas) + WitnetConsumer(_callbackGasLimit) { require( - _witnetEstimateBaseFeeWithCallback(_requestTemplate.resultDataMaxSize(), _maxCallbackGas) + _witnetEstimateBaseFeeWithCallback(_callbackGasLimit) > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), - "WitnetRequestTemplateConsumer: callback gas limit too low" + "WitnetRequestTemplateConsumer: insufficient callback gas limit" ); } @@ -32,7 +32,7 @@ abstract contract WitnetRequestTemplateConsumer return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); } - function _witnetEstimateBaseFee(uint256 _resultMaxSize) + function _witnetEstimateBaseFee(uint16 _resultMaxSize) virtual override(UsingWitnet, WitnetConsumer) internal view returns (uint256) @@ -42,17 +42,34 @@ abstract contract WitnetRequestTemplateConsumer function __witnetRequestData( uint256 _witnetEvmReward, - bytes32 _witnetRadHash, - WitnetV2.RadonSLA memory _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA, + bytes32 _witnetRadHash ) virtual override(UsingWitnet, WitnetConsumer) internal returns (uint256) { return WitnetConsumer.__witnetRequestData( _witnetEvmReward, - _witnetRadHash, - _witnetQuerySLA + _witnetQuerySLA, + _witnetRadHash ); } + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA memory _witnetQuerySLA, + string[][] memory _witnetRequestArgs + ) + virtual override internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetQuerySLA, + _witnetBuildRadHash(_witnetRequestArgs) + ); + } + + + } diff --git a/contracts/mocks/WitnetRandomnessMock.sol b/contracts/mocks/WitnetRandomnessMock.sol index 0d86c7f57..6e15db063 100644 --- a/contracts/mocks/WitnetRandomnessMock.sol +++ b/contracts/mocks/WitnetRandomnessMock.sol @@ -115,7 +115,7 @@ contract WitnetRandomnessMock _usedFunds = __mockRandomizeFee; require( msg.value >= _usedFunds, - "WitnetRandomnessMock: reward too low" + "WitnetRandomnessMock: insufficient reward" ); // Post the Witnet Randomness request: uint _queryId = ++ __mockRandomizeLatestId; From 88065dc6de7e451f07f081501fa8b4413db8637d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 16:56:50 +0100 Subject: [PATCH 069/149] refactor: changes on Witnet.* -> WitnetV2.* --- contracts/apps/UsingWitnet.sol | 4 +- contracts/apps/WitnetPriceFeeds.sol | 32 ++- contracts/apps/WitnetRandomness.sol | 9 +- .../WitnetRequestBoardTrustableBase.sol | 78 +++--- contracts/data/WitnetRequestBoardData.sol | 40 +-- contracts/interfaces/IWitnetRequestBoard.sol | 10 +- contracts/interfaces/V2/IWitnetFeeds.sol | 6 +- .../interfaces/V2/IWitnetPriceSolver.sol | 2 +- contracts/libs/Witnet.sol | 262 +++++++++--------- contracts/libs/WitnetErrorsLib.sol | 8 +- contracts/libs/WitnetV2.sol | 105 ++++++- 11 files changed, 327 insertions(+), 229 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index 546fd4349..f19147db5 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -42,7 +42,7 @@ abstract contract UsingWitnet internal view returns (bool) { - return __witnet.getQueryStatus(_id) == Witnet.QueryStatus.Reported; + return __witnet.getQueryStatus(_id) == WitnetV2.QueryStatus.Reported; } /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. @@ -68,7 +68,7 @@ abstract contract UsingWitnet function _witnetCheckQueryResultStatus(uint256 _witnetQueryId) internal view - returns (Witnet.ResultStatus) + returns (WitnetV2.ResultStatus) { return __witnet.getQueryResultStatus(_witnetQueryId); } diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 515f82648..2ffcbffa5 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -27,7 +27,7 @@ contract WitnetPriceFeeds WitnetPriceFeedsData { using Witnet for Witnet.Result; - using Witnet for Witnet.Response; + using WitnetV2 for WitnetV2.Response; using WitnetV2 for WitnetV2.RadonSLA; bytes4 immutable public specs = type(IWitnetPriceFeeds).interfaceId; @@ -152,7 +152,7 @@ contract WitnetPriceFeeds function latestResponse(bytes4 feedId) override public view - returns (Witnet.Response memory) + returns (WitnetV2.Response memory) { return witnet.getQueryResponse(_latestValidQueryId(feedId)); } @@ -180,7 +180,7 @@ contract WitnetPriceFeeds function latestUpdateResponse(bytes4 feedId) override external view - returns (Witnet.Response memory) + returns (WitnetV2.Response memory) { return witnet.getQueryResponse(latestUpdateQueryId(feedId)); } @@ -194,7 +194,7 @@ contract WitnetPriceFeeds function latestUpdateResultStatus(bytes4 feedId) override public view - returns (Witnet.ResultStatus) + returns (WitnetV2.ResultStatus) { return _checkQueryResultStatus(latestUpdateQueryId(feedId)); } @@ -456,7 +456,7 @@ contract WitnetPriceFeeds { uint _queryId = _latestValidQueryId(feedId); if (_queryId > 0) { - Witnet.Response memory _latestResponse = latestResponse(feedId); + WitnetV2.Response memory _latestResponse = latestResponse(feedId); Witnet.Result memory _latestResult = Witnet.resultFromCborBytes(_latestResponse.cborBytes); return IWitnetPriceSolver.Price({ value: _latestResult.asUint(), @@ -545,11 +545,13 @@ contract WitnetPriceFeeds return ( int(_latestPrice.value), _latestPrice.timestamp, - _latestPrice.status == Witnet.ResultStatus.Ready + _latestPrice.status == WitnetV2.ResultStatus.Ready ? 200 - : _latestPrice.status == Witnet.ResultStatus.Awaiting - ? 404 - : 400 + : ( + _latestPrice.status == WitnetV2.ResultStatus.Awaiting + || _latestPrice.status == WitnetV2.ResultStatus.AwaitingReady + || _latestPrice.status == WitnetV2.ResultStatus.AwaitingError + ) ? 404 : 400 ); } @@ -559,12 +561,12 @@ contract WitnetPriceFeeds function _checkQueryResultStatus(uint _queryId) internal view - returns (Witnet.ResultStatus) + returns (WitnetV2.ResultStatus) { if (_queryId > 0) { return witnet.getQueryResultStatus(_queryId); } else { - return Witnet.ResultStatus.Ready; + return WitnetV2.ResultStatus.Ready; } } @@ -575,7 +577,7 @@ contract WitnetPriceFeeds uint _latestUpdateQueryId = latestUpdateQueryId(feedId); if ( _latestUpdateQueryId > 0 - && witnet.getQueryResultStatus(_latestUpdateQueryId) == Witnet.ResultStatus.Ready + && witnet.getQueryResultStatus(_latestUpdateQueryId) == WitnetV2.ResultStatus.Ready ) { return _latestUpdateQueryId; } else { @@ -618,8 +620,8 @@ contract WitnetPriceFeeds "WitnetPriceFeeds: insufficient reward" ); uint _latestId = __feed.latestUpdateQueryId; - Witnet.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); - if (_latestStatus == Witnet.ResultStatus.Awaiting) { + WitnetV2.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); + if (_latestStatus == WitnetV2.ResultStatus.Awaiting) { // latest update is still pending, so just increase the reward // accordingly to current tx gasprice: int _deltaReward = int(witnet.getQueryReward(_latestId)) - int(_usedFunds); @@ -632,7 +634,7 @@ contract WitnetPriceFeeds } } else { // Check if latest update ended successfully: - if (_latestStatus == Witnet.ResultStatus.Ready) { + if (_latestStatus == WitnetV2.ResultStatus.Ready) { // If so, remove previous last valid query from the WRB: if (__feed.latestValidQueryId > 0) { witnet.fetchQueryResponse(__feed.latestValidQueryId); diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 5a3990f21..cdb357d5d 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -213,10 +213,10 @@ contract WitnetRandomness } uint256 _queryId = __randomize_[_block].witnetQueryId; require(_queryId != 0, "WitnetRandomness: not randomized"); - Witnet.ResultStatus _resultStatus = witnet().getQueryResultStatus(_queryId); - if (_resultStatus == Witnet.ResultStatus.Ready) { + WitnetV2.ResultStatus _resultStatus = witnet().getQueryResultStatus(_queryId); + if (_resultStatus == WitnetV2.ResultStatus.Ready) { return witnet().getQueryResult(_queryId).asBytes32(); - } else if (_resultStatus == Witnet.ResultStatus.Error) { + } else if (_resultStatus == WitnetV2.ResultStatus.Error) { uint256 _nextRandomizeBlock = __randomize_[_block].nextBlock; require(_nextRandomizeBlock != 0, "WitnetRandomness: faulty randomize"); return getRandomnessAfter(_nextRandomizeBlock); @@ -265,9 +265,10 @@ contract WitnetRandomness returns (bool) { RandomizeData storage _data = __randomize_[_block]; + WitnetV2.QueryStatus _qstatus = witnet().getQueryStatus(_data.witnetQueryId); return ( _data.witnetQueryId != 0 - && witnet().getQueryStatus(_data.witnetQueryId) == Witnet.QueryStatus.Reported + && (_qstatus == WitnetV2.QueryStatus.Finalized) ); } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 2c4704f8a..ccadccffe 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -30,11 +30,11 @@ abstract contract WitnetRequestBoardTrustableBase Payable { using Witnet for bytes; - using Witnet for Witnet.Request; - using Witnet for Witnet.Response; using Witnet for Witnet.Result; using WitnetCBOR for WitnetCBOR.CBOR; using WitnetV2 for WitnetV2.RadonSLA; + using WitnetV2 for WitnetV2.Request; + using WitnetV2 for WitnetV2.Response; bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; bytes4 public immutable group = bytes4(keccak256(abi.encode(address(this), block.chainid))); @@ -217,7 +217,7 @@ abstract contract WitnetRequestBoardTrustableBase external view returns (int256 _earnings) { - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); _earnings = int(__request.evmReward); uint96 _callbackGasLimit = __request.unpackCallbackGasLimit(); @@ -241,9 +241,9 @@ abstract contract WitnetRequestBoardTrustableBase function fetchQueryResponse(uint256 _witnetQueryId) virtual override external - inStatus(_witnetQueryId, Witnet.QueryStatus.Reported) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Reported) onlyRequester(_witnetQueryId) - returns (Witnet.Response memory _response) + returns (WitnetV2.Response memory _response) { _response = __seekQuery(_witnetQueryId).response; delete __storage().queries[_witnetQueryId]; @@ -253,7 +253,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQuery(uint256 _witnetQueryId) external view override - returns (Witnet.Query memory) + returns (WitnetV2.Query memory) { return __storage().queries[_witnetQueryId]; } @@ -267,10 +267,10 @@ abstract contract WitnetRequestBoardTrustableBase returns (bytes memory) { require( - _statusOf(_witnetQueryId) != Witnet.QueryStatus.Unknown, + _statusOf(_witnetQueryId) != WitnetV2.QueryStatus.Unknown, "WitnetRequestBoardTrustableBase: unknown query" ); - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); if (__request.RAD != bytes32(0)) { return registry.bytecodeOf(__request.RAD); } else { @@ -285,7 +285,7 @@ abstract contract WitnetRequestBoardTrustableBase override returns (bytes32, WitnetV2.RadonSLA memory) { - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); return ( __request.RAD == bytes32(0) ? registry.hashOf(__request.bytecode) : __request.RAD, WitnetV2.toRadonSLA(__request.SLA) @@ -298,7 +298,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryResponse(uint256 _witnetQueryId) external view override - returns (Witnet.Response memory _response) + returns (WitnetV2.Response memory _response) { return __seekQueryResponse(_witnetQueryId); } @@ -311,7 +311,7 @@ abstract contract WitnetRequestBoardTrustableBase returns (Witnet.Result memory) { // todo: fail if not in finalized status ? - Witnet.Response storage _response = __seekQueryResponse(_witnetQueryId); + WitnetV2.Response storage _response = __seekQueryResponse(_witnetQueryId); return _response.cborBytes.resultFromCborBytes(); } @@ -329,7 +329,7 @@ abstract contract WitnetRequestBoardTrustableBase uint256 _witnetEvmFinalityBlock ) { - Witnet.Response storage __response = __seekQueryResponse(_witnetQueryId); + WitnetV2.Response storage __response = __seekQueryResponse(_witnetQueryId); return ( __response.timestamp, __response.tallyHash, @@ -343,7 +343,7 @@ abstract contract WitnetRequestBoardTrustableBase override external view returns (Witnet.ResultError memory) { - Witnet.ResultStatus _status = getQueryResultStatus(_witnetQueryId); + WitnetV2.ResultStatus _status = getQueryResultStatus(_witnetQueryId); try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_witnetQueryId).cborBytes) returns (Witnet.ResultError memory _resultError) { @@ -371,31 +371,31 @@ abstract contract WitnetRequestBoardTrustableBase /// @param _witnetQueryId The unique query identifier. function getQueryResultStatus(uint256 _witnetQueryId) virtual public view - returns (Witnet.ResultStatus) + returns (WitnetV2.ResultStatus) { - Witnet.QueryStatus _queryStatus = _statusOf(_witnetQueryId); + WitnetV2.QueryStatus _queryStatus = _statusOf(_witnetQueryId); if ( - _queryStatus == Witnet.QueryStatus.Finalized - || _queryStatus == Witnet.QueryStatus.Reported + _queryStatus == WitnetV2.QueryStatus.Finalized + || _queryStatus == WitnetV2.QueryStatus.Reported ) { bytes storage __cborValues = __seekQueryResponse(_witnetQueryId).cborBytes; // determine whether reported result is an error by peeking the first byte return (__cborValues[0] == bytes1(0xd8) - ? (_queryStatus == Witnet.QueryStatus.Finalized - ? Witnet.ResultStatus.Error - : Witnet.ResultStatus.AwaitingError - ) : (_queryStatus == Witnet.QueryStatus.Finalized - ? Witnet.ResultStatus.Ready - : Witnet.ResultStatus.AwaitingReady + ? (_queryStatus == WitnetV2.QueryStatus.Finalized + ? WitnetV2.ResultStatus.Error + : WitnetV2.ResultStatus.AwaitingError + ) : (_queryStatus == WitnetV2.QueryStatus.Finalized + ? WitnetV2.ResultStatus.Ready + : WitnetV2.ResultStatus.AwaitingReady ) ); } else if ( - _queryStatus == Witnet.QueryStatus.Posted - || _queryStatus == Witnet.QueryStatus.Undeliverable + _queryStatus == WitnetV2.QueryStatus.Posted + || _queryStatus == WitnetV2.QueryStatus.Undeliverable ) { - return Witnet.ResultStatus.Awaiting; + return WitnetV2.ResultStatus.Awaiting; } else { - return Witnet.ResultStatus.Void; + return WitnetV2.ResultStatus.Void; } } @@ -406,7 +406,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryReward(uint256 _witnetQueryId) override external view - inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) returns (uint256) { return __seekQueryRequest(_witnetQueryId).evmReward; @@ -416,7 +416,7 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryStatus(uint256 _witnetQueryId) external view override - returns (Witnet.QueryStatus) + returns (WitnetV2.QueryStatus) { return _statusOf(_witnetQueryId); @@ -537,9 +537,9 @@ abstract contract WitnetRequestBoardTrustableBase function upgradeQueryReward(uint256 _witnetQueryId) external payable virtual override - inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) { - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); __request.evmReward += _getMsgValue(); emit WitnetQueryRewardUpgraded(_witnetQueryId, __request.evmReward); } @@ -565,7 +565,7 @@ abstract contract WitnetRequestBoardTrustableBase external override onlyReporters - inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) returns (uint256) { require( @@ -607,7 +607,7 @@ abstract contract WitnetRequestBoardTrustableBase external override onlyReporters - inStatus(_witnetQueryId, Witnet.QueryStatus.Posted) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) returns (uint256) { require( @@ -652,7 +652,7 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256 _batchReward) { for ( uint _i = 0; _i < _batchResults.length; _i ++) { - if (_statusOf(_batchResults[_i].queryId) != Witnet.QueryStatus.Posted) { + if (_statusOf(_batchResults[_i].queryId) != WitnetV2.QueryStatus.Posted) { if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, @@ -784,13 +784,13 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256 _witnetQueryId) { _witnetQueryId = __newQueryId(_radHash, _packedSLA); - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); require( __request.fromCallbackGas == bytes32(0), "WitnetRequestBoardTrustableBase: already posted" ); { - __request.fromCallbackGas = Witnet.packRequesterCallbackGasLimit(msg.sender, _callbackGasLimit); + __request.fromCallbackGas = WitnetV2.packRequesterCallbackGasLimit(msg.sender, _callbackGasLimit); __request.RAD = _radHash; __request.SLA = _packedSLA; __request.evmReward = _getMsgValue(); @@ -807,7 +807,7 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256 _evmReward) { // read requester address and whether a callback was requested: - Witnet.Request storage __request = __seekQueryRequest(_witnetQueryId); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); (address _evmRequester, uint96 _evmCallbackGasLimit) = __request.unpackRequesterAndCallbackGasLimit(); // read query EVM reward: @@ -993,8 +993,8 @@ abstract contract WitnetRequestBoardTrustableBase ) virtual internal { - __seekQuery(_witnetQueryId).response = Witnet.Response({ - fromFinality: Witnet.packReporterEvmFinalityBlock(msg.sender, block.number), + __seekQuery(_witnetQueryId).response = WitnetV2.Response({ + fromFinality: WitnetV2.packReporterEvmFinalityBlock(msg.sender, block.number), timestamp: _witnetResultTimestamp, tallyHash: _witnetResultTallyHash, cborBytes: _witnetResultCborBytes diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index e635ea111..2b4ab01b8 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -2,13 +2,13 @@ pragma solidity >=0.7.0 <0.9.0; -import "../libs/Witnet.sol"; +import "../libs/WitnetV2.sol"; /// @title Witnet Request Board base data model. /// @author The Witnet Foundation. abstract contract WitnetRequestBoardData { - using Witnet for Witnet.Request; + using WitnetV2 for WitnetV2.Request; bytes32 internal constant _WITNET_REQUEST_BOARD_DATA_SLOTHASH = /* keccak256("io.witnet.boards.data") */ @@ -18,7 +18,7 @@ abstract contract WitnetRequestBoardData { address base; address owner; uint256 nonce; - mapping (uint => Witnet.Query) queries; + mapping (uint => WitnetV2.Query) queries; } constructor() { @@ -26,7 +26,7 @@ abstract contract WitnetRequestBoardData { } /// Asserts the given query is currently in the given status. - modifier inStatus(uint256 _queryId, Witnet.QueryStatus _status) { + modifier inStatus(uint256 _queryId, WitnetV2.QueryStatus _status) { require( _statusOf(_queryId) == _status, _statusOfRevertMessage(_status) @@ -46,14 +46,14 @@ abstract contract WitnetRequestBoardData { // --- Internal functions ----------------------------------------------------------------------------------------- /// Gets query storage by query id. - function __seekQuery(uint256 _queryId) internal view returns (Witnet.Query storage) { + function __seekQuery(uint256 _queryId) internal view returns (WitnetV2.Query storage) { return __storage().queries[_queryId]; } /// Gets the Witnet.Request part of a given query. function __seekQueryRequest(uint256 _queryId) internal view - returns (Witnet.Request storage) + returns (WitnetV2.Request storage) { return __storage().queries[_queryId].request; } @@ -61,7 +61,7 @@ abstract contract WitnetRequestBoardData { /// Gets the Witnet.Result part of a given query. function __seekQueryResponse(uint256 _queryId) internal view - returns (Witnet.Response storage) + returns (WitnetV2.Response storage) { return __storage().queries[_queryId].response; } @@ -79,37 +79,37 @@ abstract contract WitnetRequestBoardData { /// Gets current status of given query. function _statusOf(uint256 _queryId) internal view - returns (Witnet.QueryStatus) + returns (WitnetV2.QueryStatus) { - Witnet.Query storage __query = __storage().queries[_queryId]; + WitnetV2.Query storage __query = __storage().queries[_queryId]; if (__query.response.tallyHash != bytes32(0)) { if (__query.response.timestamp != 0) { - if (block.number >= Witnet.unpackEvmFinalityBlock(__query.response.fromFinality)) { - return Witnet.QueryStatus.Finalized; + if (block.number >= WitnetV2.unpackEvmFinalityBlock(__query.response.fromFinality)) { + return WitnetV2.QueryStatus.Finalized; } else { - return Witnet.QueryStatus.Reported; + return WitnetV2.QueryStatus.Reported; } } else { - return Witnet.QueryStatus.Undeliverable; + return WitnetV2.QueryStatus.Undeliverable; } } else if (__query.request.fromCallbackGas != bytes32(0)) { - return Witnet.QueryStatus.Posted; + return WitnetV2.QueryStatus.Posted; } else { - return Witnet.QueryStatus.Unknown; + return WitnetV2.QueryStatus.Unknown; } } - function _statusOfRevertMessage(Witnet.QueryStatus _status) + function _statusOfRevertMessage(WitnetV2.QueryStatus _status) internal pure returns (string memory) { - if (_status == Witnet.QueryStatus.Posted) { + if (_status == WitnetV2.QueryStatus.Posted) { return "WitnetRequestBoard: not in Posted status"; - } else if (_status == Witnet.QueryStatus.Reported) { + } else if (_status == WitnetV2.QueryStatus.Reported) { return "WitnetRequestBoard: not in Reported status"; - } else if (_status == Witnet.QueryStatus.Finalized) { + } else if (_status == WitnetV2.QueryStatus.Finalized) { return "WitnetRequestBoard: not in Finalized status"; - } else if (_status == Witnet.QueryStatus.Undeliverable) { + } else if (_status == WitnetV2.QueryStatus.Undeliverable) { return "WitnetRequestBoard: not in Undeliverable status"; } else { return "WitnetRequestBoard: bad mood"; diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/IWitnetRequestBoard.sol index f28076d1e..4a0894a05 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/IWitnetRequestBoard.sol @@ -33,10 +33,10 @@ interface IWitnetRequestBoard { /// @dev Fails if the query was not in 'Reported' status, or called from an address different to /// @dev the one that actually posted the given request. /// @param queryId The unique query identifier. - function fetchQueryResponse(uint256 queryId) external returns (Witnet.Response memory); + function fetchQueryResponse(uint256 queryId) external returns (WitnetV2.Response memory); /// @notice Gets the whole Query data contents, if any, no matter its current status. - function getQuery(uint256 queryId) external view returns (Witnet.Query memory); + function getQuery(uint256 queryId) external view returns (WitnetV2.Query memory); /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. /// @dev Fails if the query does not exist. @@ -49,7 +49,7 @@ interface IWitnetRequestBoard { /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. /// @param queryId The unique query identifier. - function getQueryResponse(uint256 queryId) external view returns (Witnet.Response memory); + function getQueryResponse(uint256 queryId) external view returns (WitnetV2.Response memory); /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. /// @param queryId The unique query identifier. @@ -76,7 +76,7 @@ interface IWitnetRequestBoard { /// @notice - 2 => Ready: the query response was finalized, and contains a result with no erros. /// @notice - 3 => Error: the query response was finalized, and contains a result with errors. /// @param queryId The unique query identifier. - function getQueryResultStatus(uint256 queryId) external view returns (Witnet.ResultStatus); + function getQueryResultStatus(uint256 queryId) external view returns (WitnetV2.ResultStatus); /// @notice Retrieves the reward currently set for the referred query. /// @dev Fails if the `queryId` is not valid or, if it has already been reported, delivered, or deleted. @@ -84,7 +84,7 @@ interface IWitnetRequestBoard { function getQueryReward(uint256 queryId) external view returns (uint256); /// @notice Gets current status of given query. - function getQueryStatus(uint256 queryId) external view returns (Witnet.QueryStatus); + function getQueryStatus(uint256 queryId) external view returns (WitnetV2.QueryStatus); // /// @notice Returns next query id to be generated by the Witnet Request Board. // function getNextQueryId() external view returns (uint256); diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index e21277fcc..d0721b3df 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -22,14 +22,14 @@ interface IWitnetFeeds { function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); function estimateUpdateBaseFee(uint256 evmGasPrice) external view returns (uint); - function latestResponse(bytes4 feedId) external view returns (Witnet.Response memory); + function latestResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); function latestResult(bytes4 feedId) external view returns (Witnet.Result memory); function latestUpdateQueryId(bytes4 feedId) external view returns (uint256); function latestUpdateRequest(bytes4 feedId) external view returns (bytes32, WitnetV2.RadonSLA memory); - function latestUpdateResponse(bytes4 feedId) external view returns (Witnet.Response memory); + function latestUpdateResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); function latestUpdateResultError(bytes4 feedId) external view returns (Witnet.ResultError memory); - function latestUpdateResultStatus(bytes4 feedId) external view returns (Witnet.ResultStatus); + function latestUpdateResultStatus(bytes4 feedId) external view returns (WitnetV2.ResultStatus); function lookupBytecode(bytes4 feedId) external view returns (bytes memory); function lookupRadHash(bytes4 feedId) external view returns (bytes32); diff --git a/contracts/interfaces/V2/IWitnetPriceSolver.sol b/contracts/interfaces/V2/IWitnetPriceSolver.sol index afa5c8f29..9cd5ce030 100644 --- a/contracts/interfaces/V2/IWitnetPriceSolver.sol +++ b/contracts/interfaces/V2/IWitnetPriceSolver.sol @@ -9,7 +9,7 @@ interface IWitnetPriceSolver { uint value; uint timestamp; bytes32 tallyHash; - Witnet.ResultStatus status; + WitnetV2.ResultStatus status; } function delegator() external view returns (address); function solve(bytes4 feedId) external view returns (Price memory); diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 9896ae47a..94fcf09ec 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -11,41 +11,41 @@ library Witnet { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - /// Struct containing both request and response data related to every query posted to the Witnet Request Board - struct Query { - Request request; - Response response; - } - - /// Possible status of a Witnet query. - enum QueryStatus { - Unknown, - Posted, - Reported, - Undeliverable, - Finalized - } - - /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. - struct Request { - bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, - // and max callback gas limit if a callback is required. - bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request - // will be solved by the Witnet blockchain. - bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. - uint256 reserved1; // Reserved uint256 slot. - uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. - bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). - } - - /// Data kept in EVM-storage containing Witnet-provided response metadata and result. - struct Response { - bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and - // the EVM block at which the provided result can be considered to be final. - uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. - bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. - bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. - } + // /// Struct containing both request and response data related to every query posted to the Witnet Request Board + // struct Query { + // Request request; + // Response response; + // } + + // /// Possible status of a Witnet query. + // enum QueryStatus { + // Unknown, + // Posted, + // Reported, + // Undeliverable, + // Finalized + // } + + // /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. + // struct Request { + // bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, + // // and max callback gas limit if a callback is required. + // bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request + // // will be solved by the Witnet blockchain. + // bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. + // uint256 reserved1; // Reserved uint256 slot. + // uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. + // bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). + // } + + // /// Data kept in EVM-storage containing Witnet-provided response metadata and result. + // struct Response { + // bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and + // // the EVM block at which the provided result can be considered to be final. + // uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. + // bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. + // bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. + // } /// Data struct containing the Witnet-provided result to a Data Request. struct Result { @@ -53,15 +53,15 @@ library Witnet { WitnetCBOR.CBOR value; // Resulting value, in CBOR-serialized bytes. } - /// Final query's result status from a requester's point of view. - enum ResultStatus { - Void, - Awaiting, - Ready, - Error, - AwaitingReady, - AwaitingError - } + // /// Final query's result status from a requester's point of view. + // enum ResultStatus { + // Void, + // Awaiting, + // Ready, + // Error, + // AwaitingReady, + // AwaitingError + // } /// Data struct describing an error when trying to fetch a Witnet-provided result to a Data Request. struct ResultError { @@ -446,50 +446,50 @@ library Witnet { } - /// =============================================================================================================== - /// --- 'Witnet.Request' helper methods --------------------------------------------------------------------------- + // /// =============================================================================================================== + // /// --- 'Witnet.Request' helper methods --------------------------------------------------------------------------- - function packRequesterCallbackGasLimit(address requester, uint96 callbackGasLimit) internal pure returns (bytes32) { - return bytes32(uint(bytes32(bytes20(requester))) | callbackGasLimit); - } + // function packRequesterCallbackGasLimit(address requester, uint96 callbackGasLimit) internal pure returns (bytes32) { + // return bytes32(uint(bytes32(bytes20(requester))) | callbackGasLimit); + // } - function unpackRequester(Request storage self) internal view returns (address) { - return address(bytes20(self.fromCallbackGas)); - } + // function unpackRequester(Request storage self) internal view returns (address) { + // return address(bytes20(self.fromCallbackGas)); + // } - function unpackCallbackGasLimit(Request storage self) internal view returns (uint96) { - return uint96(uint(self.fromCallbackGas)); - } + // function unpackCallbackGasLimit(Request storage self) internal view returns (uint96) { + // return uint96(uint(self.fromCallbackGas)); + // } - function unpackRequesterAndCallbackGasLimit(Request storage self) internal view returns (address, uint96) { - bytes32 _packed = self.fromCallbackGas; - return (address(bytes20(_packed)), uint96(uint(_packed))); - } + // function unpackRequesterAndCallbackGasLimit(Request storage self) internal view returns (address, uint96) { + // bytes32 _packed = self.fromCallbackGas; + // return (address(bytes20(_packed)), uint96(uint(_packed))); + // } - /// =============================================================================================================== - /// --- 'Witnet.Response' helper methods -------------------------------------------------------------------------- + // /// =============================================================================================================== + // /// --- 'Witnet.Response' helper methods -------------------------------------------------------------------------- - function packReporterEvmFinalityBlock(address reporter, uint256 evmFinalityBlock) internal pure returns (bytes32) { - return bytes32(uint(bytes32(bytes20(reporter))) << 96 | uint96(evmFinalityBlock)); - } + // function packReporterEvmFinalityBlock(address reporter, uint256 evmFinalityBlock) internal pure returns (bytes32) { + // return bytes32(uint(bytes32(bytes20(reporter))) << 96 | uint96(evmFinalityBlock)); + // } - function unpackWitnetReporter(Response storage self) internal view returns (address) { - return address(bytes20(self.fromFinality)); - } + // function unpackWitnetReporter(Response storage self) internal view returns (address) { + // return address(bytes20(self.fromFinality)); + // } - function unpackEvmFinalityBlock(Response storage self) internal view returns (uint256) { - return uint(uint96(uint(self.fromFinality))); - } + // function unpackEvmFinalityBlock(Response storage self) internal view returns (uint256) { + // return uint(uint96(uint(self.fromFinality))); + // } - function unpackEvmFinalityBlock(bytes32 fromFinality) internal pure returns (uint256) { - return uint(uint96(uint(fromFinality))); - } + // function unpackEvmFinalityBlock(bytes32 fromFinality) internal pure returns (uint256) { + // return uint(uint96(uint(fromFinality))); + // } - function unpackWitnetReporterAndEvmFinalityBlock(Response storage self) internal view returns (address, uint256) { - bytes32 _packed = self.fromFinality; - return (address(bytes20(_packed)), uint(uint96(uint(_packed)))); - } + // function unpackWitnetReporterAndEvmFinalityBlock(Response storage self) internal view returns (address, uint256) { + // bytes32 _packed = self.fromFinality; + // return (address(bytes20(_packed)), uint(uint96(uint(_packed)))); + // } /// =============================================================================================================== @@ -653,60 +653,60 @@ library Witnet { } - /// =============================================================================================================== - /// --- 'Witnet.RadonSLA' helper methods -------------------------------------------------------------------------- - - /// @notice Returns `true` if all witnessing parameters in `b` have same - /// @notice value or greater than the ones in `a`. - function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) - internal pure returns (bool) - { - return ( - a.numWitnesses >= b.numWitnesses - && a.minConsensusPercentage >= b.minConsensusPercentage - && a.witnessReward >= b.witnessReward - && a.witnessCollateral >= b.witnessCollateral - && a.minerCommitRevealFee >= b.minerCommitRevealFee - ); - } - - function isValid(Witnet.RadonSLA memory sla) - internal pure returns (bool) - { - return ( - sla.witnessReward > 0 - && sla.numWitnesses > 0 && sla.numWitnesses <= 127 - && sla.minConsensusPercentage > 50 && sla.minConsensusPercentage < 100 - && sla.witnessCollateral > 0 - && sla.witnessCollateral / sla.witnessReward <= 127 - ); - } - - function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { - return bytes32( - uint(sla.witnessReward) - | sla.witnessCollateral << 64 - | sla.minerCommitRevealFee << 128 - | sla.numWitnesses << 248 - | sla.minConsensusPercentage << 232 - ); - } - - function toRadonSLA(bytes32 _packed) internal pure returns (RadonSLA memory) { - return RadonSLA({ - numWitnesses: uint8(uint(_packed >> 248)), - minConsensusPercentage: uint8(uint(_packed >> 232) & 0xff), - witnessReward: uint64(uint(_packed) & 0xffffffffffffffff), - witnessCollateral: uint64(uint(_packed >> 64) & 0xffffffffffffffff), - minerCommitRevealFee: uint64(uint(_packed >> 128) & 0xffffffffffffffff) - }); - } - - function totalWitnessingReward(Witnet.RadonSLA memory sla) - internal pure returns (uint64) - { - return sla.witnessReward * sla.numWitnesses; - } + // /// =============================================================================================================== + // /// --- 'Witnet.RadonSLA' helper methods -------------------------------------------------------------------------- + + // /// @notice Returns `true` if all witnessing parameters in `b` have same + // /// @notice value or greater than the ones in `a`. + // function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) + // internal pure returns (bool) + // { + // return ( + // a.numWitnesses >= b.numWitnesses + // && a.minConsensusPercentage >= b.minConsensusPercentage + // && a.witnessReward >= b.witnessReward + // && a.witnessCollateral >= b.witnessCollateral + // && a.minerCommitRevealFee >= b.minerCommitRevealFee + // ); + // } + + // function isValid(Witnet.RadonSLA memory sla) + // internal pure returns (bool) + // { + // return ( + // sla.witnessReward > 0 + // && sla.numWitnesses > 0 && sla.numWitnesses <= 127 + // && sla.minConsensusPercentage > 50 && sla.minConsensusPercentage < 100 + // && sla.witnessCollateral > 0 + // && sla.witnessCollateral / sla.witnessReward <= 127 + // ); + // } + + // function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { + // return bytes32( + // uint(sla.witnessReward) + // | sla.witnessCollateral << 64 + // | sla.minerCommitRevealFee << 128 + // | sla.numWitnesses << 248 + // | sla.minConsensusPercentage << 232 + // ); + // } + + // function toRadonSLA(bytes32 _packed) internal pure returns (RadonSLA memory) { + // return RadonSLA({ + // numWitnesses: uint8(uint(_packed >> 248)), + // minConsensusPercentage: uint8(uint(_packed >> 232) & 0xff), + // witnessReward: uint64(uint(_packed) & 0xffffffffffffffff), + // witnessCollateral: uint64(uint(_packed >> 64) & 0xffffffffffffffff), + // minerCommitRevealFee: uint64(uint(_packed >> 128) & 0xffffffffffffffff) + // }); + // } + + // function totalWitnessingReward(Witnet.RadonSLA memory sla) + // internal pure returns (uint64) + // { + // return sla.witnessReward * sla.numWitnesses; + // } /// =============================================================================================================== diff --git a/contracts/libs/WitnetErrorsLib.sol b/contracts/libs/WitnetErrorsLib.sol index ae1f38ec6..d32ee65e5 100644 --- a/contracts/libs/WitnetErrorsLib.sol +++ b/contracts/libs/WitnetErrorsLib.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./Witnet.sol"; +import "./WitnetV2.sol"; /// @title A library for interpreting Witnet resolution errors /// @author The Witnet Foundation. @@ -28,16 +28,16 @@ library WitnetErrorsLib { ); } - function asResultError(Witnet.ResultStatus _status, bytes memory _cborBytes) + function asResultError(WitnetV2.ResultStatus _status, bytes memory _cborBytes) public pure returns (Witnet.ResultError memory) { - if (_status == Witnet.ResultStatus.Awaiting) { + if (_status == WitnetV2.ResultStatus.Awaiting) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, reason: "WitnetRequestBoard: not yet solved" }); - } else if (_status == Witnet.ResultStatus.Void) { + } else if (_status == WitnetV2.ResultStatus.Void) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, reason: "WitnetRequestBoard: unknown query" diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 43fb46db2..0cb3454ef 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -6,12 +6,51 @@ import "./Witnet.sol"; library WitnetV2 { - uint256 internal constant _WITNET_GENESIS_TIMESTAMP = 1602666045; - uint256 internal constant _WITNET_GENESIS_EPOCH_SECONDS = 45; + /// Struct containing both request and response data related to every query posted to the Witnet Request Board + struct Query { + Request request; + Response response; + } - uint256 internal constant _WITNET_2_0_EPOCH = 1234567; - uint256 internal constant _WITNET_2_0_EPOCH_SECONDS = 30; - uint256 internal constant _WITNET_2_0_TIMESTAMP = _WITNET_GENESIS_TIMESTAMP + _WITNET_2_0_EPOCH * _WITNET_GENESIS_EPOCH_SECONDS; + /// Possible status of a Witnet query. + enum QueryStatus { + Unknown, + Posted, + Reported, + Undeliverable, + Finalized + } + + /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. + struct Request { + bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, + // and max callback gas limit if a callback is required. + bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request + // will be solved by the Witnet blockchain. + bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. + uint256 reserved1; // Reserved uint256 slot. + uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. + bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). + } + + /// Data kept in EVM-storage containing Witnet-provided response metadata and result. + struct Response { + bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and + // the EVM block at which the provided result can be considered to be final. + uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. + bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. + bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. + } + + /// Final query's result status from a requester's point of view. + enum ResultStatus { + Void, + Awaiting, + Ready, + Error, + AwaitingReady, + AwaitingError + } struct RadonSLA { /// @dev Number of witnessing nodes that will take part in the resolution of a data request within the Witnet blockchain: @@ -22,6 +61,55 @@ library WitnetV2 { uint64 witnessingWitReward; } + /// =============================================================================================================== + /// --- 'WitnetV2.Request' helper methods ------------------------------------------------------------------------- + + function packRequesterCallbackGasLimit(address requester, uint96 callbackGasLimit) internal pure returns (bytes32) { + return bytes32(uint(bytes32(bytes20(requester))) | callbackGasLimit); + } + + function unpackRequester(Request storage self) internal view returns (address) { + return address(bytes20(self.fromCallbackGas)); + } + + function unpackCallbackGasLimit(Request storage self) internal view returns (uint96) { + return uint96(uint(self.fromCallbackGas)); + } + + function unpackRequesterAndCallbackGasLimit(Request storage self) internal view returns (address, uint96) { + bytes32 _packed = self.fromCallbackGas; + return (address(bytes20(_packed)), uint96(uint(_packed))); + } + + + /// =============================================================================================================== + /// --- 'WitnetV2.Response' helper methods ------------------------------------------------------------------------ + + function packReporterEvmFinalityBlock(address reporter, uint256 evmFinalityBlock) internal pure returns (bytes32) { + return bytes32(uint(bytes32(bytes20(reporter))) << 96 | uint96(evmFinalityBlock)); + } + + function unpackWitnetReporter(Response storage self) internal view returns (address) { + return address(bytes20(self.fromFinality)); + } + + function unpackEvmFinalityBlock(Response storage self) internal view returns (uint256) { + return uint(uint96(uint(self.fromFinality))); + } + + function unpackEvmFinalityBlock(bytes32 fromFinality) internal pure returns (uint256) { + return uint(uint96(uint(fromFinality))); + } + + function unpackWitnetReporterAndEvmFinalityBlock(Response storage self) internal view returns (address, uint256) { + bytes32 _packed = self.fromFinality; + return (address(bytes20(_packed)), uint(uint96(uint(_packed)))); + } + + + /// =============================================================================================================== + /// --- 'WitnetV2.RadonSLA' helper methods ------------------------------------------------------------------------ + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) { @@ -73,6 +161,13 @@ library WitnetV2 { ); } + uint256 internal constant _WITNET_GENESIS_TIMESTAMP = 1602666045; + uint256 internal constant _WITNET_GENESIS_EPOCH_SECONDS = 45; + + uint256 internal constant _WITNET_2_0_EPOCH = 1234567; + uint256 internal constant _WITNET_2_0_EPOCH_SECONDS = 30; + uint256 internal constant _WITNET_2_0_TIMESTAMP = _WITNET_GENESIS_TIMESTAMP + _WITNET_2_0_EPOCH * _WITNET_GENESIS_EPOCH_SECONDS; + function timestampToWitnetEpoch(uint _timestamp) internal pure returns (uint) { if (_timestamp > _WITNET_2_0_TIMESTAMP ) { return ( From eb7c61b6e239cc99016a2683ec2a69750b86f56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 17:06:46 +0100 Subject: [PATCH 070/149] chore: IWitnetRequestBoard -> V2/IWitnetRequestBoard --- contracts/WitnetRequestBoard.sol | 4 ++-- contracts/interfaces/{ => V2}/IWitnetRequestBoard.sol | 2 +- contracts/interfaces/{ => V2}/IWitnetRequestBoardEvents.sol | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename contracts/interfaces/{ => V2}/IWitnetRequestBoard.sol (99%) rename contracts/interfaces/{ => V2}/IWitnetRequestBoardEvents.sol (96%) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index fcb99ba96..372a3c02d 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -4,8 +4,8 @@ pragma solidity >=0.7.0 <0.9.0; import "./WitnetBytecodes.sol"; import "./WitnetRequestFactory.sol"; -import "./interfaces/IWitnetRequestBoard.sol"; -import "./interfaces/IWitnetRequestBoardEvents.sol"; +import "./interfaces/V2/IWitnetRequestBoard.sol"; +import "./interfaces/V2/IWitnetRequestBoardEvents.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. diff --git a/contracts/interfaces/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol similarity index 99% rename from contracts/interfaces/IWitnetRequestBoard.sol rename to contracts/interfaces/V2/IWitnetRequestBoard.sol index 4a0894a05..b90bdc045 100644 --- a/contracts/interfaces/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; -import "../libs/WitnetV2.sol"; +import "../../libs/WitnetV2.sol"; interface IWitnetRequestBoard { diff --git a/contracts/interfaces/IWitnetRequestBoardEvents.sol b/contracts/interfaces/V2/IWitnetRequestBoardEvents.sol similarity index 96% rename from contracts/interfaces/IWitnetRequestBoardEvents.sol rename to contracts/interfaces/V2/IWitnetRequestBoardEvents.sol index 1c7ab7f2e..0dce1d9b0 100644 --- a/contracts/interfaces/IWitnetRequestBoardEvents.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoardEvents.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; -import "../libs/WitnetV2.sol"; +import "../../libs/WitnetV2.sol"; interface IWitnetRequestBoardEvents { From b50c8f6cf65a311bf84a19288707834a902b0942 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 17:07:16 +0100 Subject: [PATCH 071/149] chore: restoring Witnet.* v0.7 structs --- contracts/libs/Witnet.sol | 76 ++++++++++++++++++--------------------- 1 file changed, 35 insertions(+), 41 deletions(-) diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 94fcf09ec..931e41ee3 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -11,41 +11,37 @@ library Witnet { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - // /// Struct containing both request and response data related to every query posted to the Witnet Request Board - // struct Query { - // Request request; - // Response response; - // } + /// Struct containing both request and response data related to every query posted to the Witnet Request Board + struct Query { + Request request; + Response response; + address from; // Address from which the request was posted. + } - // /// Possible status of a Witnet query. - // enum QueryStatus { - // Unknown, - // Posted, - // Reported, - // Undeliverable, - // Finalized - // } + /// Possible status of a Witnet query. + enum QueryStatus { + Unknown, + Posted, + Reported, + Deleted + } - // /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. - // struct Request { - // bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, - // // and max callback gas limit if a callback is required. - // bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request - // // will be solved by the Witnet blockchain. - // bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. - // uint256 reserved1; // Reserved uint256 slot. - // uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. - // bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). - // } + /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. + struct Request { + address addr; // Address of the IWitnetRequest contract containing Witnet data request raw bytecode. + bytes32 slaHash; // Radon SLA hash of the Witnet data request. + bytes32 radHash; // Radon radHash of the Witnet data request. + uint256 gasprice; // Minimum gas price the DR resolver should pay on the solving tx. + uint256 reward; // Escrowed reward to be paid to the DR resolver. + } - // /// Data kept in EVM-storage containing Witnet-provided response metadata and result. - // struct Response { - // bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and - // // the EVM block at which the provided result can be considered to be final. - // uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. - // bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. - // bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. - // } + /// Data kept in EVM-storage containing Witnet-provided response metadata and result. + struct Response { + address reporter; // Address from which the result was reported. + uint256 timestamp; // Timestamp of the Witnet-provided result. + bytes32 drTxHash; // Hash of the Witnet transaction that solved the queried Data Request. + bytes cborBytes; // Witnet-provided result CBOR-bytes to the queried Data Request. + } /// Data struct containing the Witnet-provided result to a Data Request. struct Result { @@ -53,15 +49,13 @@ library Witnet { WitnetCBOR.CBOR value; // Resulting value, in CBOR-serialized bytes. } - // /// Final query's result status from a requester's point of view. - // enum ResultStatus { - // Void, - // Awaiting, - // Ready, - // Error, - // AwaitingReady, - // AwaitingError - // } + /// Final query's result status from a requester's point of view. + enum ResultStatus { + Void, + Awaiting, + Ready, + Error + } /// Data struct describing an error when trying to fetch a Witnet-provided result to a Data Request. struct ResultError { From 2d970fcfc46d77e6c6da7bfdd213b37fd5b20c18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 17:11:56 +0100 Subject: [PATCH 072/149] chore: IWitnetRequestBoardReporter -> V2/IWitnetRequestBoardReporter --- contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 2 +- contracts/interfaces/{ => V2}/IWitnetRequestBoardReporter.sol | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename contracts/interfaces/{ => V2}/IWitnetRequestBoardReporter.sol (100%) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index ccadccffe..6006d5dad 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -10,7 +10,7 @@ import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestBoardDataACLs.sol"; import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; -import "../../interfaces/IWitnetRequestBoardReporter.sol"; +import "../../interfaces/V2/IWitnetRequestBoardReporter.sol"; import "../../interfaces/V2/IWitnetConsumer.sol"; import "../../libs/WitnetErrorsLib.sol"; import "../../patterns/Payable.sol"; diff --git a/contracts/interfaces/IWitnetRequestBoardReporter.sol b/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol similarity index 100% rename from contracts/interfaces/IWitnetRequestBoardReporter.sol rename to contracts/interfaces/V2/IWitnetRequestBoardReporter.sol From ddab6cf9f79567d437318954891e292600c20113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 28 Nov 2023 17:17:26 +0100 Subject: [PATCH 073/149] feat: WRBTrustableBase.ddrTag() --- .../core/defaults/WitnetRequestBoardTrustableBase.sol | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 6006d5dad..d224f2a55 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -37,7 +37,6 @@ abstract contract WitnetRequestBoardTrustableBase using WitnetV2 for WitnetV2.Response; bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; - bytes4 public immutable group = bytes4(keccak256(abi.encode(address(this), block.chainid))); WitnetRequestFactory immutable public override factory; WitnetBytecodes immutable public override registry; @@ -101,6 +100,10 @@ abstract contract WitnetRequestBoardTrustableBase ))); } + function ddrTag() virtual public view returns (bytes4) { + return bytes4(keccak256(abi.encode(address(this), block.chainid))); + } + // ================================================================================================================ // --- Yet to be implemented virtual methods ---------------------------------------------------------------------- @@ -771,7 +774,7 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256) { return uint(keccak256(abi.encode( - group, + ddrTag(), block.number, msg.sender, _queryRAD, From 565c3bccbe0f6a48d196057b1eefd3b085424135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 29 Nov 2023 11:51:19 +0100 Subject: [PATCH 074/149] refactor: WRB.ddrTag() -> WRB.channel() --- contracts/WitnetRequestBoard.sol | 1 + contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 372a3c02d..93da562cd 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -17,6 +17,7 @@ abstract contract WitnetRequestBoard function class() virtual external view returns (string memory) { return type(WitnetRequestBoard).name; } + function channel() virtual external view returns (bytes4); function factory() virtual external view returns (WitnetRequestFactory); function registry() virtual external view returns (WitnetBytecodes); function specs() virtual external view returns (bytes4); diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index d224f2a55..073e357ae 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -100,7 +100,7 @@ abstract contract WitnetRequestBoardTrustableBase ))); } - function ddrTag() virtual public view returns (bytes4) { + function channel() virtual override public view returns (bytes4) { return bytes4(keccak256(abi.encode(address(this), block.chainid))); } @@ -774,7 +774,7 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256) { return uint(keccak256(abi.encode( - ddrTag(), + channel(), block.number, msg.sender, _queryRAD, From cd140243d7b7539ef08076d367a8ff04729dcc54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 29 Nov 2023 11:52:34 +0100 Subject: [PATCH 075/149] feat: add mocking contracts --- .../WitnetRequestBoardTrustableBase.sol | 25 ++++++++------ .../defaults/WitnetRequestFactoryDefault.sol | 1 - contracts/data/WitnetRequestBoardDataACLs.sol | 6 ++-- contracts/mocks/WitnetBytecodesMock.sol | 15 ++++++++ contracts/mocks/WitnetPriceFeedsMock.sol | 15 ++++++++ contracts/mocks/WitnetRequestBoardMock.sol | 34 +++++++++++++++++++ contracts/mocks/WitnetRequestFactoryMock.sol | 21 ++++++++++++ 7 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 contracts/mocks/WitnetBytecodesMock.sol create mode 100644 contracts/mocks/WitnetPriceFeedsMock.sol create mode 100644 contracts/mocks/WitnetRequestBoardMock.sol create mode 100644 contracts/mocks/WitnetRequestFactoryMock.sol diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 073e357ae..2f46da79e 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -37,9 +37,9 @@ abstract contract WitnetRequestBoardTrustableBase using WitnetV2 for WitnetV2.Response; bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; - - WitnetRequestFactory immutable public override factory; WitnetBytecodes immutable public override registry; + + WitnetRequestFactory immutable private __factory; modifier checkCallbackRecipient(address _addr, uint96 _callbackGasLimit) { require( @@ -76,8 +76,7 @@ abstract contract WitnetRequestBoardTrustableBase "io.witnet.proxiable.board" ) { - assert(address(_factory) != address(0) && address(_registry) != address(0)); - factory = _factory; + __factory = _factory; registry = _registry; } @@ -104,6 +103,10 @@ abstract contract WitnetRequestBoardTrustableBase return bytes4(keccak256(abi.encode(address(this), block.chainid))); } + function factory() virtual override public view returns (WitnetRequestFactory) { + return __factory; + } + // ================================================================================================================ // --- Yet to be implemented virtual methods ---------------------------------------------------------------------- @@ -158,16 +161,16 @@ abstract contract WitnetRequestBoardTrustableBase __storage().base = base(); require( - address(factory).code.length > 0, + address(__factory).code.length > 0, "WitnetRequestBoardTrustableBase: inexistent factory" ); require( - factory.specs() == type(IWitnetRequestFactory).interfaceId, + __factory.specs() == type(IWitnetRequestFactory).interfaceId, "WitnetRequestBoardTrustableBase: uncompliant factory" ); require( - address(factory.witnet()) == address(this) - && address(factory.registry()) == address(registry), + address(__factory.witnet()) == address(this) + && address(__factory.registry()) == address(registry), "WitnetRequestBoardTrustableBase: discordant factory" ); @@ -734,7 +737,7 @@ abstract contract WitnetRequestBoardTrustableBase /// 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 _acls().isReporter_[_reporter]; + return __acls().isReporter_[_reporter]; } /// Adds given addresses to the active reporters control list. @@ -760,7 +763,7 @@ abstract contract WitnetRequestBoardTrustableBase { for (uint ix = 0; ix < _exReporters.length; ix ++) { address _reporter = _exReporters[ix]; - _acls().isReporter_[_reporter] = false; + __acls().isReporter_[_reporter] = false; } emit ReportersUnset(_exReporters); } @@ -983,7 +986,7 @@ abstract contract WitnetRequestBoardTrustableBase { for (uint ix = 0; ix < _reporters.length; ix ++) { address _reporter = _reporters[ix]; - _acls().isReporter_[_reporter] = true; + __acls().isReporter_[_reporter] = true; } emit ReportersSet(_reporters); } diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index a3ef1b114..6bc54b6fb 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -60,7 +60,6 @@ contract WitnetRequestFactoryDefault "io.witnet.requests.factory" ) { - assert(address(_witnet) != address(0) && address(_registry) != address(0)); witnet = _witnet; registry = _registry; // let logic contract be used as a factory, while avoiding further initializations: diff --git a/contracts/data/WitnetRequestBoardDataACLs.sol b/contracts/data/WitnetRequestBoardDataACLs.sol index 1652d16f9..42ca19217 100644 --- a/contracts/data/WitnetRequestBoardDataACLs.sol +++ b/contracts/data/WitnetRequestBoardDataACLs.sol @@ -19,12 +19,12 @@ abstract contract WitnetRequestBoardDataACLs } constructor() { - _acls().isReporter_[msg.sender] = true; + __acls().isReporter_[msg.sender] = true; } modifier onlyReporters { require( - _acls().isReporter_[msg.sender], + __acls().isReporter_[msg.sender], "WitnetRequestBoard: unauthorized reporter" ); _; @@ -33,7 +33,7 @@ abstract contract WitnetRequestBoardDataACLs // ================================================================================================================ // --- Internal functions ----------------------------------------------------------------------------------------- - function _acls() internal pure returns (WitnetBoardACLs storage _struct) { + function __acls() internal pure returns (WitnetBoardACLs storage _struct) { assembly { _struct.slot := _WITNET_BOARD_ACLS_SLOTHASH } diff --git a/contracts/mocks/WitnetBytecodesMock.sol b/contracts/mocks/WitnetBytecodesMock.sol new file mode 100644 index 000000000..6b50c5260 --- /dev/null +++ b/contracts/mocks/WitnetBytecodesMock.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../core/defaults/WitnetBytecodesDefault.sol"; + +contract WitnetBytecodesMock is WitnetBytecodesDefault { + constructor() + WitnetBytecodesDefault( + false, + bytes32("mocked") + ) + {} +} diff --git a/contracts/mocks/WitnetPriceFeedsMock.sol b/contracts/mocks/WitnetPriceFeedsMock.sol new file mode 100644 index 000000000..1656c0bb9 --- /dev/null +++ b/contracts/mocks/WitnetPriceFeedsMock.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../apps/WitnetPriceFeeds.sol"; + +contract WitnetPriceFeedsMock is WitnetPriceFeeds { + constructor(WitnetRequestBoard _wrb) + WitnetPriceFeeds( + msg.sender, + _wrb + ) + {} +} diff --git a/contracts/mocks/WitnetRequestBoardMock.sol b/contracts/mocks/WitnetRequestBoardMock.sol new file mode 100644 index 000000000..a1cb85471 --- /dev/null +++ b/contracts/mocks/WitnetRequestBoardMock.sol @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./WitnetBytecodesMock.sol"; +import "../core/defaults/WitnetRequestBoardTrustableDefault.sol"; + +contract WitnetRequestBoardMock + is + WitnetRequestBoardTrustableDefault +{ + WitnetRequestFactory private __factory; + + constructor(WitnetBytecodesMock _registry) + WitnetRequestBoardTrustableDefault( + WitnetRequestFactory(address(0)), + WitnetBytecodes(address(_registry)), + false, + bytes32("mocked"), + 60000, 65000, 70000, 20000 + ) + { + __acls().isReporter_[msg.sender] = true; + } + + function factory() override public view returns (WitnetRequestFactory) { + return __factory; + } + + function setFactory(WitnetRequestFactory _factory) external onlyOwner { + __factory = _factory; + } +} \ No newline at end of file diff --git a/contracts/mocks/WitnetRequestFactoryMock.sol b/contracts/mocks/WitnetRequestFactoryMock.sol new file mode 100644 index 000000000..41679ed92 --- /dev/null +++ b/contracts/mocks/WitnetRequestFactoryMock.sol @@ -0,0 +1,21 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "./WitnetRequestBoardMock.sol"; +import "../core/defaults/WitnetRequestFactoryDefault.sol"; + +contract WitnetRequestFactoryMock + is + WitnetRequestFactoryDefault +{ + constructor (WitnetRequestBoardMock _wrb) + WitnetRequestFactoryDefault( + WitnetRequestBoard(address(_wrb)), + WitnetBytecodes(_wrb.registry()), + false, + bytes32("mocked") + ) + {} +} \ No newline at end of file From b4f7b71a951a2d4983a0675d9fc1af9a6f379096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 29 Nov 2023 12:33:19 +0100 Subject: [PATCH 076/149] chore: refactor Witnet*Mock -> WitnetMocked* --- ...tBytecodesMock.sol => WitnetMockedBytecodes.sol} | 2 +- ...riceFeedsMock.sol => WitnetMockedPriceFeeds.sol} | 2 +- ...andomnessMock.sol => WitnetMockedRandomness.sol} | 10 +++++----- ...stBoardMock.sol => WitnetMockedRequestBoard.sol} | 13 ++++++++----- ...ctoryMock.sol => WitnetMockedRequestFactory.sol} | 6 +++--- 5 files changed, 18 insertions(+), 15 deletions(-) rename contracts/mocks/{WitnetBytecodesMock.sol => WitnetMockedBytecodes.sol} (82%) rename contracts/mocks/{WitnetPriceFeedsMock.sol => WitnetMockedPriceFeeds.sol} (83%) rename contracts/mocks/{WitnetRandomnessMock.sol => WitnetMockedRandomness.sol} (95%) rename contracts/mocks/{WitnetRequestBoardMock.sol => WitnetMockedRequestBoard.sol} (66%) rename contracts/mocks/{WitnetRequestFactoryMock.sol => WitnetMockedRequestFactory.sol} (76%) diff --git a/contracts/mocks/WitnetBytecodesMock.sol b/contracts/mocks/WitnetMockedBytecodes.sol similarity index 82% rename from contracts/mocks/WitnetBytecodesMock.sol rename to contracts/mocks/WitnetMockedBytecodes.sol index 6b50c5260..9c205fb39 100644 --- a/contracts/mocks/WitnetBytecodesMock.sol +++ b/contracts/mocks/WitnetMockedBytecodes.sol @@ -5,7 +5,7 @@ pragma experimental ABIEncoderV2; import "../core/defaults/WitnetBytecodesDefault.sol"; -contract WitnetBytecodesMock is WitnetBytecodesDefault { +contract WitnetMockedBytecodes is WitnetBytecodesDefault { constructor() WitnetBytecodesDefault( false, diff --git a/contracts/mocks/WitnetPriceFeedsMock.sol b/contracts/mocks/WitnetMockedPriceFeeds.sol similarity index 83% rename from contracts/mocks/WitnetPriceFeedsMock.sol rename to contracts/mocks/WitnetMockedPriceFeeds.sol index 1656c0bb9..d99eb1fd2 100644 --- a/contracts/mocks/WitnetPriceFeedsMock.sol +++ b/contracts/mocks/WitnetMockedPriceFeeds.sol @@ -5,7 +5,7 @@ pragma experimental ABIEncoderV2; import "../apps/WitnetPriceFeeds.sol"; -contract WitnetPriceFeedsMock is WitnetPriceFeeds { +contract WitnetMockedPriceFeeds is WitnetPriceFeeds { constructor(WitnetRequestBoard _wrb) WitnetPriceFeeds( msg.sender, diff --git a/contracts/mocks/WitnetRandomnessMock.sol b/contracts/mocks/WitnetMockedRandomness.sol similarity index 95% rename from contracts/mocks/WitnetRandomnessMock.sol rename to contracts/mocks/WitnetMockedRandomness.sol index 6e15db063..114a8b4be 100644 --- a/contracts/mocks/WitnetRandomnessMock.sol +++ b/contracts/mocks/WitnetMockedRandomness.sol @@ -11,7 +11,7 @@ import "../apps/WitnetRandomness.sol"; /// @dev CONTRACT ADDRESS PROVIDED BY THE WITNET FOUNDATION. /// @dev SEE: https://docs.witnet.io/smart-contracts/witnet-randomness-oracle/contract-addresses /// @author Witnet Foundation. -contract WitnetRandomnessMock +contract WitnetMockedRandomness is WitnetRandomness { @@ -19,7 +19,7 @@ contract WitnetRandomnessMock uint256 internal __mockRandomizeFee; uint256 internal __mockRandomizeLatestId; - /// Constructor: new WitnetRandomnessMock contract + /// Constructor: new WitnetMockedRandomness contract /// @param _mockRandomizeLatencyBlocks Mocked number of blocks in which a new randomness will be provided after `randomize()` /// @param _mockRandomizeFee Mocked randomize fee (will be constant no matter what tx gas price is provided). constructor ( @@ -81,8 +81,8 @@ contract WitnetRandomnessMock _block = getRandomnessNextBlock(_block); } uint256 _queryId = __randomize_[_block].witnetQueryId; - require(_queryId != 0, "WitnetRandomnessMock: not randomized"); - require(block.number >= _block + __mockRandomizeLatencyBlocks, "WitnetRandomnessMock: pending randomize"); + require(_queryId != 0, "WitnetMockedRandomness: not randomized"); + require(block.number >= _block + __mockRandomizeLatencyBlocks, "WitnetMockedRandomness: pending randomize"); return blockhash(_block); } @@ -115,7 +115,7 @@ contract WitnetRandomnessMock _usedFunds = __mockRandomizeFee; require( msg.value >= _usedFunds, - "WitnetRandomnessMock: insufficient reward" + "WitnetMockedRandomness: insufficient reward" ); // Post the Witnet Randomness request: uint _queryId = ++ __mockRandomizeLatestId; diff --git a/contracts/mocks/WitnetRequestBoardMock.sol b/contracts/mocks/WitnetMockedRequestBoard.sol similarity index 66% rename from contracts/mocks/WitnetRequestBoardMock.sol rename to contracts/mocks/WitnetMockedRequestBoard.sol index a1cb85471..5f5b1176d 100644 --- a/contracts/mocks/WitnetRequestBoardMock.sol +++ b/contracts/mocks/WitnetMockedRequestBoard.sol @@ -3,16 +3,19 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetBytecodesMock.sol"; +import "./WitnetMockedBytecodes.sol"; +import "./WitnetMockedRequestFactory.sol"; import "../core/defaults/WitnetRequestBoardTrustableDefault.sol"; -contract WitnetRequestBoardMock +import "./WitnetMockedPriceFeeds.sol"; + +contract WitnetMockedRequestBoard is WitnetRequestBoardTrustableDefault { WitnetRequestFactory private __factory; - constructor(WitnetBytecodesMock _registry) + constructor(WitnetMockedBytecodes _registry) WitnetRequestBoardTrustableDefault( WitnetRequestFactory(address(0)), WitnetBytecodes(address(_registry)), @@ -28,7 +31,7 @@ contract WitnetRequestBoardMock return __factory; } - function setFactory(WitnetRequestFactory _factory) external onlyOwner { - __factory = _factory; + function setFactory(WitnetMockedRequestFactory _factory) external onlyOwner { + __factory = WitnetRequestFactory(address(_factory)); } } \ No newline at end of file diff --git a/contracts/mocks/WitnetRequestFactoryMock.sol b/contracts/mocks/WitnetMockedRequestFactory.sol similarity index 76% rename from contracts/mocks/WitnetRequestFactoryMock.sol rename to contracts/mocks/WitnetMockedRequestFactory.sol index 41679ed92..654b43d55 100644 --- a/contracts/mocks/WitnetRequestFactoryMock.sol +++ b/contracts/mocks/WitnetMockedRequestFactory.sol @@ -3,14 +3,14 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetRequestBoardMock.sol"; +import "./WitnetMockedRequestBoard.sol"; import "../core/defaults/WitnetRequestFactoryDefault.sol"; -contract WitnetRequestFactoryMock +contract WitnetMockedRequestFactory is WitnetRequestFactoryDefault { - constructor (WitnetRequestBoardMock _wrb) + constructor (WitnetMockedRequestBoard _wrb) WitnetRequestFactoryDefault( WitnetRequestBoard(address(_wrb)), WitnetBytecodes(_wrb.registry()), From 1ba0496626aa5fcc81ec0055ac32aec7be9ccae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 29 Nov 2023 12:36:55 +0100 Subject: [PATCH 077/149] chore: add disclaimer to mocked contracts --- contracts/mocks/WitnetMockedBytecodes.sol | 5 +++++ contracts/mocks/WitnetMockedPriceFeeds.sol | 5 +++++ contracts/mocks/WitnetMockedRandomness.sol | 9 ++++----- contracts/mocks/WitnetMockedRequestBoard.sol | 5 +++++ contracts/mocks/WitnetMockedRequestFactory.sol | 5 +++++ 5 files changed, 24 insertions(+), 5 deletions(-) diff --git a/contracts/mocks/WitnetMockedBytecodes.sol b/contracts/mocks/WitnetMockedBytecodes.sol index 9c205fb39..144738cbd 100644 --- a/contracts/mocks/WitnetMockedBytecodes.sol +++ b/contracts/mocks/WitnetMockedBytecodes.sol @@ -5,6 +5,11 @@ pragma experimental ABIEncoderV2; import "../core/defaults/WitnetBytecodesDefault.sol"; +/// @title Mocked implementation of `WitnetBytecodes`. +/// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. +/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE +/// @dev THE `WitnetBytecodes` CONTRACT ADDRESS PROVIDED +/// @dev BY THE WITNET FOUNDATION. contract WitnetMockedBytecodes is WitnetBytecodesDefault { constructor() WitnetBytecodesDefault( diff --git a/contracts/mocks/WitnetMockedPriceFeeds.sol b/contracts/mocks/WitnetMockedPriceFeeds.sol index d99eb1fd2..b16e883a0 100644 --- a/contracts/mocks/WitnetMockedPriceFeeds.sol +++ b/contracts/mocks/WitnetMockedPriceFeeds.sol @@ -5,6 +5,11 @@ pragma experimental ABIEncoderV2; import "../apps/WitnetPriceFeeds.sol"; +/// @title Mocked implementation of `WitnetPriceFeeds`. +/// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. +/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE +/// @dev THE `WitnetPriceFeeds` CONTRACT ADDRESS PROVIDED +/// @dev BY THE WITNET FOUNDATION. contract WitnetMockedPriceFeeds is WitnetPriceFeeds { constructor(WitnetRequestBoard _wrb) WitnetPriceFeeds( diff --git a/contracts/mocks/WitnetMockedRandomness.sol b/contracts/mocks/WitnetMockedRandomness.sol index 114a8b4be..e77d04c55 100644 --- a/contracts/mocks/WitnetMockedRandomness.sol +++ b/contracts/mocks/WitnetMockedRandomness.sol @@ -5,12 +5,11 @@ pragma experimental ABIEncoderV2; import "../apps/WitnetRandomness.sol"; -/// @title WitnetRandomness mock contract implementation. +/// @title Mocked implementation of `WitnetRandomness`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. -/// @dev ON SUPPORTED TESTNETS, PLEASE USE THE `WitnetRandomness` -/// @dev CONTRACT ADDRESS PROVIDED BY THE WITNET FOUNDATION. -/// @dev SEE: https://docs.witnet.io/smart-contracts/witnet-randomness-oracle/contract-addresses -/// @author Witnet Foundation. +/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE +/// @dev THE `WitnetRandomness` CONTRACT ADDRESS PROVIDED +/// @dev BY THE WITNET FOUNDATION. contract WitnetMockedRandomness is WitnetRandomness diff --git a/contracts/mocks/WitnetMockedRequestBoard.sol b/contracts/mocks/WitnetMockedRequestBoard.sol index 5f5b1176d..f429060b6 100644 --- a/contracts/mocks/WitnetMockedRequestBoard.sol +++ b/contracts/mocks/WitnetMockedRequestBoard.sol @@ -9,6 +9,11 @@ import "../core/defaults/WitnetRequestBoardTrustableDefault.sol"; import "./WitnetMockedPriceFeeds.sol"; +/// @title Mocked implementation of `WitnetRequestBoard`. +/// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. +/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE +/// @dev THE `WitnetRequestBoard` CONTRACT ADDRESS PROVIDED +/// @dev BY THE WITNET FOUNDATION. contract WitnetMockedRequestBoard is WitnetRequestBoardTrustableDefault diff --git a/contracts/mocks/WitnetMockedRequestFactory.sol b/contracts/mocks/WitnetMockedRequestFactory.sol index 654b43d55..bfabbba44 100644 --- a/contracts/mocks/WitnetMockedRequestFactory.sol +++ b/contracts/mocks/WitnetMockedRequestFactory.sol @@ -6,6 +6,11 @@ pragma experimental ABIEncoderV2; import "./WitnetMockedRequestBoard.sol"; import "../core/defaults/WitnetRequestFactoryDefault.sol"; +/// @title Mocked implementation of `WitnetRequestFactory`. +/// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. +/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE +/// @dev THE `WitnetRequestFactory` CONTRACT ADDRESS PROVIDED +/// @dev BY THE WITNET FOUNDATION. contract WitnetMockedRequestFactory is WitnetRequestFactoryDefault From ea8613f52443e425d9ee8403ececbb42a4a57f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 30 Nov 2023 14:31:44 +0100 Subject: [PATCH 078/149] feat: deprecate WitnetV2.RadonSLA.witnessingCollateralRatio --- contracts/apps/UsingWitnetRandomness.sol | 16 ++++---- contracts/apps/WitnetPriceFeeds.sol | 5 +-- contracts/apps/WitnetRandomness.sol | 7 ++-- .../WitnetRequestBoardTrustableBase.sol | 8 ++-- contracts/interfaces/V2/IWitnetConsumer.sol | 8 +--- contracts/libs/Witnet.sol | 3 +- contracts/libs/WitnetEncodingLib.sol | 4 +- contracts/libs/WitnetV2.sol | 41 +++++++------------ 8 files changed, 36 insertions(+), 56 deletions(-) diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index df034d3f0..ca7576ee9 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -18,11 +18,15 @@ abstract contract UsingWitnetRandomness bytes32 internal immutable __witnetRandomnessRadHash; bytes32 private __defaultRandomizePackedSLA; - constructor(WitnetRequestBoard _wrb, uint96 _randomizeCallbackGasLimit) + constructor( + WitnetRequestBoard _wrb, + uint96 _randomizeCallbackGasLimit, + WitnetV2.RadonSLA memory _defaultSLA + ) UsingWitnet(_wrb) WitnetConsumer(_randomizeCallbackGasLimit) { - // Build Witnet randomness request + // On-chain building of the Witnet Randomness Request: { WitnetRequestFactory _factory = witnet().factory(); WitnetBytecodes _registry = witnet().registry(); @@ -48,18 +52,14 @@ abstract contract UsingWitnetRandomness _retrievals, _aggregator, _tally, - 35 // CBOR overhead (3 bytes) + payload (32 bytes) + 32 // 256 bits of pure entropy ;-) )); __witnetRandomnessRadHash = WitnetRequest( _template.buildRequest(new string[][](_retrievals.length)) ).radHash(); } // Settle default randomize SLA: - __defaultRandomizePackedSLA = WitnetV2.RadonSLA({ - witnessingCommitteeSize: 7, - witnessingCollateralRatio: 10, - witnessingWitReward: 10 ** 9 - }).toBytes32(); + __defaultRandomizePackedSLA = _defaultSLA.toBytes32(); } function _defaultRandomizeSLA() internal view returns (WitnetV2.RadonSLA memory) { diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 2ffcbffa5..7c6de97a6 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -46,9 +46,8 @@ contract WitnetPriceFeeds ); witnet = _wrb; __settleDefaultRadonSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 5, - witnessingCollateralRatio: 10, - witnessingWitReward: 10 ** 9 + witnessingCommitteeSize: 10, + witnessingWitTotalReward: 10 ** 9 })); } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index cdb357d5d..593a2d9b8 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -70,7 +70,7 @@ contract WitnetRandomness _retrievals, _aggregator, _tally, - 35 // CBOR overhead (3 bytes) + payload (32 bytes) + 32 // 256 bits of pure entropy ;-) )); witnetRandomnessRequest = WitnetRequest(_template.buildRequest(new string[][](_retrievals.length))); __witnetRandomnessRadHash = witnetRandomnessRequest.radHash(); @@ -466,9 +466,8 @@ contract WitnetRandomness function __initializeWitnetRandomnessSLA() virtual internal { __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 5, - witnessingCollateralRatio: 10, - witnessingWitReward: 10 ** 9 + witnessingCommitteeSize: 10, + witnessingWitTotalReward: 10 ** 9 })); } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 2f46da79e..5819d6b2f 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -445,7 +445,7 @@ abstract contract WitnetRequestBoardTrustableBase ) virtual override external payable - checkReward(estimateBaseFee(_getGasPrice(), _queryRAD))//32))// _queryRAD)) + checkReward(estimateBaseFee(_getGasPrice(), _queryRAD)) checkSLA(_querySLA) returns (uint256 _witnetQueryId) { @@ -453,7 +453,7 @@ abstract contract WitnetRequestBoardTrustableBase // Let Web3 observers know that a new request has been posted emit WitnetQuery( _witnetQueryId, - _querySLA.totalWitnessingReward(), + _querySLA.witnessingWitTotalReward, _getMsgValue() ); } @@ -492,7 +492,7 @@ abstract contract WitnetRequestBoardTrustableBase ); emit WitnetQuery( _witnetQueryId, - _querySLA.totalWitnessingReward(), + _querySLA.witnessingWitTotalReward, _getMsgValue() ); } @@ -532,7 +532,7 @@ abstract contract WitnetRequestBoardTrustableBase __seekQueryRequest(_witnetQueryId).bytecode = _queryUnverifiedBytecode; emit WitnetQuery( _witnetQueryId, - _querySLA.totalWitnessingReward(), + _querySLA.witnessingWitTotalReward, _getMsgValue() ); } diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index 8fcc4ce62..6c46d1c1c 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -8,9 +8,7 @@ interface IWitnetConsumer { /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` /// @notice gets reported, if reported with no errors. /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used - /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer - /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` - /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. + /// @dev by the WitnetConsumer contract. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. /// @param witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. @@ -27,9 +25,7 @@ interface IWitnetConsumer { /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` /// @notice gets reported, if reported WITH errors. /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used - /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer - /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` - /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. + /// @dev by the WitnetConsumer contract. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 931e41ee3..5b2fcfec9 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -229,7 +229,6 @@ library Witnet { struct RadonReducer { RadonReducerOpcodes opcode; RadonFilter[] filters; - // bytes script; } /// Reducting functions currently supported on the Witnet blockchain. @@ -696,7 +695,7 @@ library Witnet { // }); // } - // function totalWitnessingReward(Witnet.RadonSLA memory sla) + // function witnessingWitTotalReward(Witnet.RadonSLA memory sla) // internal pure returns (uint64) // { // return sla.witnessReward * sla.numWitnesses; diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index ba679d55f..422d204eb 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -372,13 +372,13 @@ library WitnetEncodingLib { maxDataSize ); } - return maxDataSize; + 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; // TBD: size(dataType); + return 9; } else { revert UnsupportedRadonDataType( uint8(dataType), diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 0cb3454ef..13e0f1285 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -53,12 +53,13 @@ library WitnetV2 { } struct RadonSLA { - /// @dev Number of witnessing nodes that will take part in the resolution of a data request within the Witnet blockchain: + /// @dev Number of witnessing nodes that will take part in the resolution + /// @dev of a data request within the Witnet blockchain: uint8 witnessingCommitteeSize; - /// @dev Collateral-to-reward ratio that witnessing nodes will have to commit with when taking part in a data request resolution. - uint8 witnessingCollateralRatio; - /// @dev Minimum amount of $nanoWIT that all Witnet nodes participating in the resolution of a data request will receive as a reward: - uint64 witnessingWitReward; + + /// @dev Total reward in $nanoWIT that will be equally distributed to all nodes + /// @dev involved in the resolution of a data request in the Witnet blockchain: + uint64 witnessingWitTotalReward; } /// =============================================================================================================== @@ -113,26 +114,22 @@ library WitnetV2 { function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) { - return ( - a.witnessingCommitteeSize * a.witnessingCollateralRatio * a.witnessingWitReward - >= b.witnessingCommitteeSize * b.witnessingCollateralRatio * b.witnessingWitReward - ); + return (a.witnessingCommitteeSize >= b.witnessingCommitteeSize); } function isValid(RadonSLA calldata sla) internal pure returns (bool) { return ( - sla.witnessingWitReward > 0 + sla.witnessingWitTotalReward > 0 && sla.witnessingCommitteeSize > 0 && sla.witnessingCommitteeSize <= 127 - && sla.witnessingCollateralRatio > 0 && sla.witnessingCollateralRatio <= 127 ); } function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { return bytes32( uint(sla.witnessingCommitteeSize) << 248 - | uint(sla.witnessingCollateralRatio) << 240 + // | uint(sla.witnessingCollateralRatio) << 240 // | uint(sla.witnessingNotBeforeTimestamp) << 64 - | uint(sla.witnessingWitReward) + | uint(sla.witnessingWitTotalReward) ); } @@ -141,24 +138,14 @@ library WitnetV2 { { return RadonSLA({ witnessingCommitteeSize: uint8(uint(_packed) >> 248), - witnessingCollateralRatio: uint8(uint(_packed) >> 240), + // witnessingCollateralRatio: uint8(uint(_packed) >> 240), // witnessingNotBeforeTimestamp: uint64(uint(_packed) >> 64), - witnessingWitReward: uint64(uint(_packed)) + witnessingWitTotalReward: uint64(uint(_packed)) }); } - function totalWitnessingReward(WitnetV2.RadonSLA calldata sla) internal pure returns (uint64) { - return ( - (3 + sla.witnessingCommitteeSize) - * sla.witnessingWitReward - ); - } - - function totalWitnessingReward(bytes32 _packed) internal pure returns (uint64) { - return ( - (3 + (uint8(uint(_packed) << 248))) // 3 + witnessingCommitteSize - * uint64(uint(_packed)) // witnessingWitReward - ); + function witnessingWitTotalReward(bytes32 _packed) internal pure returns (uint64) { + return uint64(uint(_packed)); } uint256 internal constant _WITNET_GENESIS_TIMESTAMP = 1602666045; From ff0e351fb1b4bdd8c6a5c78b172ce46adcfdfdb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 30 Nov 2023 14:47:43 +0100 Subject: [PATCH 079/149] chore: refactor UsingWitnetRandomness internal methods --- contracts/apps/UsingWitnetRandomness.sol | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index ca7576ee9..79908f1e7 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -62,15 +62,15 @@ abstract contract UsingWitnetRandomness __defaultRandomizePackedSLA = _defaultSLA.toBytes32(); } - function _defaultRandomizeSLA() internal view returns (WitnetV2.RadonSLA memory) { + function _witnetDefaultSLA() virtual internal view returns (WitnetV2.RadonSLA memory) { return __defaultRandomizePackedSLA.toRadonSLA(); } - function _estimateRandomizeBaseFee() internal view returns (uint256) { - return _witnetEstimateBaseFee(35); + function _witnetEstimateRandomizeBaseFee() internal view returns (uint256) { + return _witnetEstimateBaseFee(32); } - function _randomUniform(uint32 _range, uint256 _nonce, bytes32 _seed) internal pure returns (uint32) { + function _witnetRandomUniformUint32(uint32 _range, uint256 _nonce, bytes32 _seed) internal pure returns (uint32) { uint256 _number = uint256( keccak256( abi.encode(_seed, _nonce) @@ -79,19 +79,15 @@ abstract contract UsingWitnetRandomness return uint32((_number * _range) >> 224); } - function _readRandomnessFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { - return cborValue.readBytes().toBytes32(); - } - - function __randomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { + function __witnetRandomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { return __witnetRequestData( _witnetEvmReward, - _defaultRandomizeSLA(), + _witnetDefaultSLA(), __witnetRandomnessRadHash ); } - function __randomize( + function __witnetRandomize( uint256 _witnetEvmReward, WitnetV2.RadonSLA calldata _witnetQuerySLA ) @@ -105,7 +101,11 @@ abstract contract UsingWitnetRandomness ); } - function __settleRandomizeDefaultSLA(WitnetV2.RadonSLA calldata sla) virtual internal { + function _witnetReadRandomizeFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { + return cborValue.readBytes().toBytes32(); + } + + function __witnetSettleDefaultSLA(WitnetV2.RadonSLA calldata sla) virtual internal { __defaultRandomizePackedSLA = sla.toBytes32(); } } \ No newline at end of file From b8e74c830bc6a0aa83103a112ad1c13fb8be5944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 30 Nov 2023 18:01:16 +0100 Subject: [PATCH 080/149] chore: refactor UsingWitnet internal methods --- contracts/apps/UsingWitnet.sol | 24 +++++++++++++ contracts/apps/UsingWitnetRandomness.sol | 11 +----- contracts/apps/UsingWitnetRequest.sol | 15 +++++++- contracts/apps/UsingWitnetRequestTemplate.sol | 18 +++++++++- contracts/apps/WitnetRequestConsumer.sol | 8 +++-- .../apps/WitnetRequestTemplateConsumer.sol | 36 +++++++++++++++++-- 6 files changed, 95 insertions(+), 17 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index f19147db5..928f5c240 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -13,6 +13,7 @@ abstract contract UsingWitnet IWitnetRequestBoardEvents { WitnetRequestBoard internal immutable __witnet; + bytes32 private __witnetDefaultPackedSLA; /// @dev Include an address to specify the WitnetRequestBoard entry point address. /// @param _wrb The WitnetRequestBoard entry point address. @@ -22,6 +23,10 @@ abstract contract UsingWitnet "UsingWitnet: uncompliant WitnetRequestBoard" ); __witnet = _wrb; + __witnetDefaultPackedSLA = WitnetV2.toBytes32(WitnetV2.RadonSLA({ + witnessingCommitteeSize: 10, + witnessingWitTotalReward: 10 ** 9 + })); } /// @dev Provides a convenient way for client contracts extending this to block the execution of the main logic of the @@ -80,6 +85,10 @@ abstract contract UsingWitnet return __witnet.getQueryResultError(_witnetQueryId); } + function _witnetDefaultSLA() virtual internal view returns (WitnetV2.RadonSLA memory) { + return WitnetV2.toRadonSLA(__witnetDefaultPackedSLA); + } + function __witnetRequestData( uint256 _witnetEvmReward, WitnetV2.RadonSLA memory _witnetQuerySLA, @@ -92,4 +101,19 @@ abstract contract UsingWitnet _witnetQuerySLA ); } + + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes32 _witnetRadHash + ) + virtual internal returns (uint256) + { + return __witnet.postRequest{value: _witnetEvmReward}( + _witnetRadHash, + _witnetDefaultSLA() + ); + } + function __witnetSetDefaultSLA(WitnetV2.RadonSLA memory _defaultSLA) virtual internal { + __witnetDefaultPackedSLA = WitnetV2.toBytes32(_defaultSLA); + } } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index 79908f1e7..d7b3c9a03 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -16,7 +16,6 @@ abstract contract UsingWitnetRandomness using WitnetV2 for WitnetV2.RadonSLA; bytes32 internal immutable __witnetRandomnessRadHash; - bytes32 private __defaultRandomizePackedSLA; constructor( WitnetRequestBoard _wrb, @@ -59,11 +58,7 @@ abstract contract UsingWitnetRandomness ).radHash(); } // Settle default randomize SLA: - __defaultRandomizePackedSLA = _defaultSLA.toBytes32(); - } - - function _witnetDefaultSLA() virtual internal view returns (WitnetV2.RadonSLA memory) { - return __defaultRandomizePackedSLA.toRadonSLA(); + __witnetSetDefaultSLA(_defaultSLA); } function _witnetEstimateRandomizeBaseFee() internal view returns (uint256) { @@ -104,8 +99,4 @@ abstract contract UsingWitnetRandomness function _witnetReadRandomizeFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { return cborValue.readBytes().toBytes32(); } - - function __witnetSettleDefaultSLA(WitnetV2.RadonSLA calldata sla) virtual internal { - __defaultRandomizePackedSLA = sla.toBytes32(); - } } \ No newline at end of file diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 3e75ca492..3d29baca1 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -12,7 +12,10 @@ abstract contract UsingWitnetRequest bytes32 immutable internal __witnetRequestRadHash; uint16 immutable internal __witnetResultMaxSize; - constructor (WitnetRequest _witnetRequest) + constructor ( + WitnetRequest _witnetRequest, + WitnetV2.RadonSLA memory _defaultSLA + ) UsingWitnet(_witnetRequest.witnet()) { require( @@ -22,6 +25,7 @@ abstract contract UsingWitnetRequest dataRequest = _witnetRequest; __witnetResultMaxSize = _witnetRequest.resultDataMaxSize(); __witnetRequestRadHash = _witnetRequest.radHash(); + __witnetSetDefaultSLA(_defaultSLA); } function _witnetEstimateBaseFee() @@ -47,4 +51,13 @@ abstract contract UsingWitnetRequest ); } + function __witnetRequestData(uint256 _witnetEvmReward) + virtual internal returns (uint256) + { + return __witnetRequestData( + _witnetEvmReward, + _witnetDefaultSLA(), + __witnetRequestRadHash + ); + } } \ No newline at end of file diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index c95d591da..17af88bbc 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -11,7 +11,10 @@ abstract contract UsingWitnetRequestTemplate uint16 immutable internal __witnetResultMaxSize; - constructor (WitnetRequestTemplate _requestTemplate) + constructor ( + WitnetRequestTemplate _requestTemplate, + WitnetV2.RadonSLA memory _defaultSLA + ) UsingWitnet(_requestTemplate.witnet()) { require( @@ -20,6 +23,7 @@ abstract contract UsingWitnetRequestTemplate ); dataRequestTemplate = _requestTemplate; __witnetResultMaxSize = _requestTemplate.resultDataMaxSize(); + __witnetSetDefaultSLA(_defaultSLA); } function _witnetBuildRadHash(string[][] memory _witnetRequestArgs) @@ -58,4 +62,16 @@ abstract contract UsingWitnetRequestTemplate ); } + function __witnetRequestData( + uint256 _witnetEvmReward, + string[][] memory _witnetRequestArgs + ) + virtual internal returns (uint256) + { + return __witnetRequestData( + _witnetEvmReward, + _witnetBuildRadHash(_witnetRequestArgs) + ); + } + } \ No newline at end of file diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index e8f4e0ec5..4b9ca68c7 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -12,8 +12,12 @@ abstract contract WitnetRequestConsumer using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - constructor(WitnetRequest _witnetRequest, uint96 _callbackGasLimit) - UsingWitnetRequest(_witnetRequest) + constructor( + WitnetRequest _witnetRequest, + uint96 _callbackGasLimit, + WitnetV2.RadonSLA memory _defaultSLA + ) + UsingWitnetRequest(_witnetRequest, _defaultSLA) WitnetConsumer(_callbackGasLimit) { require( diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index 7adad22c5..01195b6fa 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -12,8 +12,12 @@ abstract contract WitnetRequestTemplateConsumer using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - constructor(WitnetRequestTemplate _requestTemplate, uint96 _callbackGasLimit) - UsingWitnetRequestTemplate(_requestTemplate) + constructor( + WitnetRequestTemplate _requestTemplate, + uint96 _callbackGasLimit, + WitnetV2.RadonSLA memory _defaultSLA + ) + UsingWitnetRequestTemplate(_requestTemplate, _defaultSLA) WitnetConsumer(_callbackGasLimit) { require( @@ -55,6 +59,20 @@ abstract contract WitnetRequestTemplateConsumer ); } + function __witnetRequestData( + uint256 _witnetEvmReward, + bytes32 _witnetRadHash + ) + virtual override internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetDefaultSLA(), + _witnetRadHash + ); + } + function __witnetRequestData( uint256 _witnetEvmReward, WitnetV2.RadonSLA memory _witnetQuerySLA, @@ -70,6 +88,18 @@ abstract contract WitnetRequestTemplateConsumer ); } - + function __witnetRequestData( + uint256 _witnetEvmReward, + string[][] memory _witnetRequestArgs + ) + virtual override internal + returns (uint256) + { + return WitnetConsumer.__witnetRequestData( + _witnetEvmReward, + _witnetDefaultSLA(), + _witnetBuildRadHash(_witnetRequestArgs) + ); + } } From 0d9fc0c979e1e2d8d7c7db95b4ef3028385cbe9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 1 Dec 2023 10:15:05 +0100 Subject: [PATCH 081/149] feat: UsingWitnet._witnetBaseFeeOverheadPercentage() --- contracts/apps/UsingWitnet.sol | 34 +++++++++++--- contracts/apps/UsingWitnetRandomness.sol | 14 ++++-- contracts/apps/UsingWitnetRequest.sol | 12 ++--- contracts/apps/UsingWitnetRequestTemplate.sol | 22 +++++----- contracts/apps/WitnetConsumer.sol | 44 ++++++++++++------- contracts/apps/WitnetRequestConsumer.sol | 27 ++++++------ .../apps/WitnetRequestTemplateConsumer.sol | 28 ++++++------ contracts/interfaces/V2/IWitnetConsumer.sol | 1 - 8 files changed, 111 insertions(+), 71 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index 928f5c240..c02f93c35 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -12,11 +12,20 @@ abstract contract UsingWitnet is IWitnetRequestBoardEvents { + /// @dev Immutable reference to the Witnet Request Board contract. WitnetRequestBoard internal immutable __witnet; + + /// @dev Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain + /// @dev when solving a data request. bytes32 private __witnetDefaultPackedSLA; - /// @dev Include an address to specify the WitnetRequestBoard entry point address. - /// @param _wrb The WitnetRequestBoard entry point address. + /// @dev Percentage over base fee to pay on every data request, + /// @dev as to deal with volatility of evmGasPrice and evmWitPrice during the live time of + /// @dev a data request (since being posted until a result gets reported back), at both the EVM and + /// @dev the Witnet blockchain levels, respectivelly. + uint16 private __witnetBaseFeeOverheadPercentage; + + /// @param _wrb Address of the WitnetRequestBoard contract. constructor(WitnetRequestBoard _wrb) { require( _wrb.specs() == type(IWitnetRequestBoard).interfaceId, @@ -24,9 +33,11 @@ abstract contract UsingWitnet ); __witnet = _wrb; __witnetDefaultPackedSLA = WitnetV2.toBytes32(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 10, - witnessingWitTotalReward: 10 ** 9 + witnessingCommitteeSize: 10, // up to 127 + witnessingWitTotalReward: 10 ** 9 // 1.0 $WIT })); + + __witnetBaseFeeOverheadPercentage = 10; // defaults to 10% } /// @dev Provides a convenient way for client contracts extending this to block the execution of the main logic of the @@ -53,11 +64,14 @@ abstract contract UsingWitnet /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _resultMaxSize Maximum expected size of returned data (in bytes). - function _witnetEstimateBaseFee(uint16 _resultMaxSize) + function _witnetEstimateEvmReward(uint16 _resultMaxSize) virtual internal view returns (uint256) { - return __witnet.estimateBaseFee(tx.gasprice, _resultMaxSize); + return ( + (100 + _witnetBaseFeeOverheadPercentage()) + * __witnet.estimateBaseFee(tx.gasprice, _resultMaxSize) + ) / 100; } function _witnetCheckQueryResultAuditTrail(uint256 _witnetQueryId) @@ -89,6 +103,10 @@ abstract contract UsingWitnet return WitnetV2.toRadonSLA(__witnetDefaultPackedSLA); } + function _witnetBaseFeeOverheadPercentage() virtual internal view returns (uint16) { + return __witnetBaseFeeOverheadPercentage; + } + function __witnetRequestData( uint256 _witnetEvmReward, WitnetV2.RadonSLA memory _witnetQuerySLA, @@ -116,4 +134,8 @@ abstract contract UsingWitnet function __witnetSetDefaultSLA(WitnetV2.RadonSLA memory _defaultSLA) virtual internal { __witnetDefaultPackedSLA = WitnetV2.toBytes32(_defaultSLA); } + + function __witnetSetBaseFeeOverheadPercentage(uint16 _baseFeeOverheadPercentage) virtual internal { + __witnetBaseFeeOverheadPercentage = _baseFeeOverheadPercentage; + } } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index d7b3c9a03..2fbeb323b 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -17,13 +17,18 @@ abstract contract UsingWitnetRandomness bytes32 internal immutable __witnetRandomnessRadHash; + /// @param _wrb Address of the WitnetRequestBoard contract. + /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. + /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. + /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( WitnetRequestBoard _wrb, - uint96 _randomizeCallbackGasLimit, + uint16 _baseFeeOverheadPercentage, + uint96 _callbackGasLimit, WitnetV2.RadonSLA memory _defaultSLA ) UsingWitnet(_wrb) - WitnetConsumer(_randomizeCallbackGasLimit) + WitnetConsumer(_callbackGasLimit) { // On-chain building of the Witnet Randomness Request: { @@ -59,10 +64,11 @@ abstract contract UsingWitnetRandomness } // Settle default randomize SLA: __witnetSetDefaultSLA(_defaultSLA); + __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } - function _witnetEstimateRandomizeBaseFee() internal view returns (uint256) { - return _witnetEstimateBaseFee(32); + function _witnetEstimateEvmReward() virtual override internal view returns (uint256) { + return _witnetEstimateEvmReward(32); } function _witnetRandomUniformUint32(uint32 _range, uint256 _nonce, bytes32 _seed) internal pure returns (uint32) { diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 3d29baca1..464c28333 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -12,8 +12,12 @@ abstract contract UsingWitnetRequest bytes32 immutable internal __witnetRequestRadHash; uint16 immutable internal __witnetResultMaxSize; + /// @param _witnetRequest Address of the WitnetRequest contract containing the actual data request. + /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. + /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor ( WitnetRequest _witnetRequest, + uint16 _baseFeeOverheadPercentage, WitnetV2.RadonSLA memory _defaultSLA ) UsingWitnet(_witnetRequest.witnet()) @@ -26,16 +30,14 @@ abstract contract UsingWitnetRequest __witnetResultMaxSize = _witnetRequest.resultDataMaxSize(); __witnetRequestRadHash = _witnetRequest.radHash(); __witnetSetDefaultSLA(_defaultSLA); + __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } - function _witnetEstimateBaseFee() + function _witnetEstimateEvmReward() virtual internal view returns (uint256) { - return __witnet.estimateBaseFee( - tx.gasprice, - __witnetResultMaxSize - ); + return _witnetEstimateEvmReward(__witnetResultMaxSize); } function __witnetRequestData( diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index 17af88bbc..11efa8497 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -11,19 +11,24 @@ abstract contract UsingWitnetRequestTemplate uint16 immutable internal __witnetResultMaxSize; + /// @param _witnetRequestTemplate Address of the WitnetRequestTemplate from which actual data requests will get built. + /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. + /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor ( - WitnetRequestTemplate _requestTemplate, + WitnetRequestTemplate _witnetRequestTemplate, + uint16 _baseFeeOverheadPercentage, WitnetV2.RadonSLA memory _defaultSLA ) - UsingWitnet(_requestTemplate.witnet()) + UsingWitnet(_witnetRequestTemplate.witnet()) { require( - _requestTemplate.specs() == type(WitnetRequestTemplate).interfaceId, + _witnetRequestTemplate.specs() == type(WitnetRequestTemplate).interfaceId, "UsingWitnetRequestTemplate: uncompliant WitnetRequestTemplate" ); - dataRequestTemplate = _requestTemplate; - __witnetResultMaxSize = _requestTemplate.resultDataMaxSize(); + dataRequestTemplate = _witnetRequestTemplate; + __witnetResultMaxSize = _witnetRequestTemplate.resultDataMaxSize(); __witnetSetDefaultSLA(_defaultSLA); + __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } function _witnetBuildRadHash(string[][] memory _witnetRequestArgs) @@ -38,14 +43,11 @@ abstract contract UsingWitnetRequestTemplate return WitnetRequest(dataRequestTemplate.buildRequest(_witnetRequestArgs)); } - function _witnetEstimateBaseFee() + function _witnetEstimateEvmReward() virtual internal view returns (uint256) { - return __witnet.estimateBaseFee( - tx.gasprice, - __witnetResultMaxSize - ); + return _witnetEstimateEvmReward(__witnetResultMaxSize); } function __witnetRequestData( diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 3a460dc29..92befc63c 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -8,16 +8,18 @@ abstract contract WitnetConsumer is IWitnetConsumer, UsingWitnet -{ - uint96 private immutable __witnetReportCallbackGasLimit; +{ + /// @dev Maximum gas to be spent by the IWitnetConsumer's callback methods. + uint96 private immutable __witnetCallbackGasLimit; modifier onlyFromWitnet { require(msg.sender == address(__witnet), "WitnetConsumer: unauthorized"); _; } - constructor (uint96 _maxCallbackGas) { - __witnetReportCallbackGasLimit = _maxCallbackGas; + /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. + constructor (uint96 _callbackGasLimit) { + __witnetCallbackGasLimit = _callbackGasLimit; } @@ -32,31 +34,41 @@ abstract contract WitnetConsumer /// =============================================================================================================== /// --- WitnetConsumer virtual methods ---------------------------------------------------------------------------- - function _witnetEstimateBaseFee(uint16) + function _witnetCallbackGasLimit() + virtual internal view + returns (uint96) + { + return __witnetCallbackGasLimit; + } + + function _witnetEstimateEvmReward() virtual internal view returns (uint256) { + return ( + (100 + _witnetBaseFeeOverheadPercentage()) + * __witnet.estimateBaseFeeWithCallback( + tx.gasprice, + _witnetCallbackGasLimit() + ) + ) / 100; + } + + function _witnetEstimateEvmReward(uint16) virtual override internal view returns (uint256) { - return _witnetEstimateBaseFeeWithCallback(_witnetReportCallbackGasLimit()); + return _witnetEstimateEvmReward(); } /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. - function _witnetEstimateBaseFeeWithCallback(uint96 _callbackGasLimit) + function _witnetEstimateEvmRewardWithCallback(uint96 _callbackGasLimit) virtual internal view returns (uint256) { return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _callbackGasLimit); } - function _witnetReportCallbackGasLimit() - virtual internal view - returns (uint96) - { - return __witnetReportCallbackGasLimit; - } - function __witnetRequestData( uint256 _witnetEvmReward, WitnetV2.RadonSLA memory _witnetQuerySLA, @@ -68,7 +80,7 @@ abstract contract WitnetConsumer return __witnet.postRequestWithCallback{value: _witnetEvmReward}( _witnetRadHash, _witnetQuerySLA, - __witnetReportCallbackGasLimit + __witnetCallbackGasLimit ); } @@ -82,7 +94,7 @@ abstract contract WitnetConsumer return __witnet.postRequestWithCallback{value: _witnetEvmReward}( _witnetRequestBytecode, _witnetQuerySLA, - __witnetReportCallbackGasLimit + __witnetCallbackGasLimit ); } diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index 4b9ca68c7..6e34e2932 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -11,36 +11,35 @@ abstract contract WitnetRequestConsumer { using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; - + + /// @param _witnetRequest Address of the WitnetRequest contract containing the actual data request. + /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. + /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. + /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( WitnetRequest _witnetRequest, + uint16 _baseFeeOverheadPercentage, uint96 _callbackGasLimit, WitnetV2.RadonSLA memory _defaultSLA ) - UsingWitnetRequest(_witnetRequest, _defaultSLA) + UsingWitnetRequest(_witnetRequest, _baseFeeOverheadPercentage, _defaultSLA) WitnetConsumer(_callbackGasLimit) - { - require( - _witnetEstimateBaseFeeWithCallback(_callbackGasLimit) - > UsingWitnetRequest._witnetEstimateBaseFee(), - "WitnetRequestConsumer: insufficient callback gas limit" - ); - } + {} - function _witnetEstimateBaseFee() - virtual override + function _witnetEstimateEvmReward() + virtual override(UsingWitnetRequest, WitnetConsumer) internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); + return WitnetConsumer._witnetEstimateEvmReward(); } - function _witnetEstimateBaseFee(uint16 _resultMaxSize) + function _witnetEstimateEvmReward(uint16) virtual override(UsingWitnet, WitnetConsumer) internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(_resultMaxSize); + return WitnetConsumer._witnetEstimateEvmReward(); } function __witnetRequestData( diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index 01195b6fa..71d20eaa9 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -12,36 +12,34 @@ abstract contract WitnetRequestTemplateConsumer using WitnetCBOR for WitnetCBOR.CBOR; using WitnetCBOR for WitnetCBOR.CBOR[]; + /// @param _witnetRequestTemplate Address of the WitnetRequestTemplate from which actual data requests will get built. + /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. + /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. + /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( - WitnetRequestTemplate _requestTemplate, + WitnetRequestTemplate _witnetRequestTemplate, + uint16 _baseFeeOverheadPercentage, uint96 _callbackGasLimit, WitnetV2.RadonSLA memory _defaultSLA ) - UsingWitnetRequestTemplate(_requestTemplate, _defaultSLA) + UsingWitnetRequestTemplate(_witnetRequestTemplate, _baseFeeOverheadPercentage, _defaultSLA) WitnetConsumer(_callbackGasLimit) - { - require( - _witnetEstimateBaseFeeWithCallback(_callbackGasLimit) - > UsingWitnetRequestTemplate._witnetEstimateBaseFee(), - "WitnetRequestTemplateConsumer: insufficient callback gas limit" - ); - - } + {} - function _witnetEstimateBaseFee() - virtual override + function _witnetEstimateEvmReward() + virtual override(UsingWitnetRequestTemplate, WitnetConsumer) internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(__witnetResultMaxSize); + return WitnetConsumer._witnetEstimateEvmReward(__witnetResultMaxSize); } - function _witnetEstimateBaseFee(uint16 _resultMaxSize) + function _witnetEstimateEvmReward(uint16) virtual override(UsingWitnet, WitnetConsumer) internal view returns (uint256) { - return WitnetConsumer._witnetEstimateBaseFee(_resultMaxSize); + return WitnetConsumer._witnetEstimateEvmReward(); } function __witnetRequestData( diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index 6c46d1c1c..bc191d06a 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -27,7 +27,6 @@ interface IWitnetConsumer { /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used /// @dev by the WitnetConsumer contract. /// @param witnetQueryId The unique identifier of the Witnet query being reported. - /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. /// @param witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. /// @param witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. From 71e7973ea444047c6990602614241706aa119499 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 1 Dec 2023 10:54:20 +0100 Subject: [PATCH 082/149] refactor: IWRB.estimateQueryEarnings -> IWRBReporter.estimateQueryEarnings --- .../WitnetRequestBoardTrustableBase.sol | 46 ++++++++----------- .../interfaces/V2/IWitnetRequestBoard.sol | 8 +--- .../V2/IWitnetRequestBoardReporter.sol | 6 +++ 3 files changed, 27 insertions(+), 33 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 5819d6b2f..f8056eb5e 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -213,32 +213,6 @@ abstract contract WitnetRequestBoardTrustableBase _resultMaxSize ); } - - /// @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. - /// @dev Fails if the query does not exist, or if deleted. - function estimateQueryEarnings(uint256 _witnetQueryId, uint256 _gasPrice) - virtual override - external view - returns (int256 _earnings) - { - WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - - _earnings = int(__request.evmReward); - uint96 _callbackGasLimit = __request.unpackCallbackGasLimit(); - if (_callbackGasLimit > 0) { - _earnings -= int(estimateBaseFeeWithCallback( - _gasPrice, - _callbackGasLimit - )); - } else { - _earnings -= int(estimateBaseFee( - _gasPrice, - __request.RAD - )); - } - } /// Retrieves copy of all response data related to a previously posted request, removing the whole query from storage. /// @dev Fails if the `_witnetQueryId` is not in 'Reported' status, or called from an address different to @@ -554,6 +528,26 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ // --- Full implementation of IWitnetRequestBoardReporter --------------------------------------------------------- + /// @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. + /// @dev Fails if the query does not exist, or if deleted. + function estimateQueryEarnings(uint256[] calldata _witnetQueryIds, uint256 _gasPrice) + virtual override + external view + returns (int256 _earnings) + { + uint256 _expenses; uint256 _revenues; + for (uint _ix = 0; _ix < _witnetQueryIds.length; _ix ++) { + if (_statusOf(_witnetQueryIds[_ix]) == WitnetV2.QueryStatus.Posted) { + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryIds[_ix]); + _revenues += __request.evmReward; + _expenses += _gasPrice * __request.unpackCallbackGasLimit(); + } + } + return int256(_revenues) - int256(_expenses); + } + /// 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: diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol index b90bdc045..aa4ec2d16 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -21,13 +21,7 @@ interface IWitnetRequestBoard { /// @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, uint96 callbackGasLimit) external view returns (uint256); - - /// @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. - /// @dev Fails if the query does not exist, or if deleted. - function estimateQueryEarnings(uint256 queryId, uint256 gasPrice) external view returns (int256); - + /// @notice Retrieves a copy of all Witnet-provable data related to a previously posted request, /// removing the whole query from the WRB storage. /// @dev Fails if the query was not in 'Reported' status, or called from an address different to diff --git a/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol b/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol index ede92a211..3be90abd4 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol @@ -6,6 +6,12 @@ pragma solidity >=0.7.0 <0.9.0; /// @author The Witnet Foundation. interface IWitnetRequestBoardReporter { + /// @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. + /// @dev Fails if the query does not exist, or if deleted. + function estimateQueryEarnings(uint256[] calldata queryIds, uint256 gasPrice) external view returns (int256); + /// @notice Reports the Witnet-provided result to a previously posted request. /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. /// @dev Fails if: From 935395d4d3600c016fe6215ec6b1c806c989b696 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 1 Dec 2023 11:47:54 +0100 Subject: [PATCH 083/149] refactor: remove posting logic from UsingWitnet & WitnetConsumer --- contracts/apps/UsingWitnet.sol | 24 -------- contracts/apps/UsingWitnetRandomness.sol | 25 ++++---- contracts/apps/UsingWitnetRequest.sol | 25 ++++---- contracts/apps/UsingWitnetRequestTemplate.sol | 19 +++--- contracts/apps/WitnetConsumer.sol | 38 +++--------- contracts/apps/WitnetRandomness.sol | 7 +-- contracts/apps/WitnetRequestConsumer.sol | 29 ---------- .../apps/WitnetRequestTemplateConsumer.sol | 58 ------------------- 8 files changed, 37 insertions(+), 188 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index c02f93c35..f267a67f8 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -107,30 +107,6 @@ abstract contract UsingWitnet return __witnetBaseFeeOverheadPercentage; } - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - bytes32 _witnetRadHash - ) - virtual internal returns (uint256) - { - return __witnet.postRequest{value: _witnetEvmReward}( - _witnetRadHash, - _witnetQuerySLA - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes32 _witnetRadHash - ) - virtual internal returns (uint256) - { - return __witnet.postRequest{value: _witnetEvmReward}( - _witnetRadHash, - _witnetDefaultSLA() - ); - } function __witnetSetDefaultSLA(WitnetV2.RadonSLA memory _defaultSLA) virtual internal { __witnetDefaultPackedSLA = WitnetV2.toBytes32(_defaultSLA); } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index 2fbeb323b..fa62d6f45 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -80,29 +80,24 @@ abstract contract UsingWitnetRandomness return uint32((_number * _range) >> 224); } + function _witnetReadRandomizeFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { + return cborValue.readBytes().toBytes32(); + } + function __witnetRandomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { - return __witnetRequestData( - _witnetEvmReward, - _witnetDefaultSLA(), - __witnetRandomnessRadHash - ); + return __witnetRandomize(_witnetEvmReward, _witnetDefaultSLA()); } function __witnetRandomize( uint256 _witnetEvmReward, - WitnetV2.RadonSLA calldata _witnetQuerySLA + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual internal returns (uint256 _randomizeId) { - return __witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - __witnetRandomnessRadHash + return __witnet.postRequest{value: _witnetEvmReward}( + __witnetRandomnessRadHash, + _witnetQuerySLA ); } - - function _witnetReadRandomizeFromResultValue(WitnetCBOR.CBOR calldata cborValue) internal pure returns (bytes32) { - return cborValue.readBytes().toBytes32(); - } -} \ No newline at end of file +} diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index 464c28333..fa5cbec20 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -40,26 +40,21 @@ abstract contract UsingWitnetRequest return _witnetEstimateEvmReward(__witnetResultMaxSize); } - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) + function __witnetRequestData(uint256 _witnetEvmReward) virtual internal returns (uint256) { - return __witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - __witnetRequestRadHash - ); + return __witnetRequestData(_witnetEvmReward, _witnetDefaultSLA()); } - function __witnetRequestData(uint256 _witnetEvmReward) + function __witnetRequestData( + uint256 _witnetEvmReward, + WitnetV2.RadonSLA memory _witnetQuerySLA + ) virtual internal returns (uint256) { - return __witnetRequestData( - _witnetEvmReward, - _witnetDefaultSLA(), - __witnetRequestRadHash + return __witnet.postRequest{value: _witnetEvmReward}( + __witnetRequestRadHash, + _witnetQuerySLA ); } -} \ No newline at end of file +} diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index 11efa8497..d3ad0a172 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -52,28 +52,23 @@ abstract contract UsingWitnetRequestTemplate function __witnetRequestData( uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, string[][] memory _witnetRequestArgs ) virtual internal returns (uint256) { - return __witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - _witnetBuildRadHash(_witnetRequestArgs) - ); + return __witnetRequestData(_witnetEvmReward, _witnetRequestArgs, _witnetDefaultSLA()); } function __witnetRequestData( uint256 _witnetEvmReward, - string[][] memory _witnetRequestArgs + string[][] memory _witnetRequestArgs, + WitnetV2.RadonSLA memory _witnetQuerySLA ) virtual internal returns (uint256) { - return __witnetRequestData( - _witnetEvmReward, - _witnetBuildRadHash(_witnetRequestArgs) + return __witnet.postRequest{value: _witnetEvmReward}( + _witnetBuildRadHash(_witnetRequestArgs), + _witnetQuerySLA ); } - -} \ No newline at end of file +} diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 92befc63c..c0029b640 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -66,36 +66,12 @@ abstract contract WitnetConsumer virtual internal view returns (uint256) { - return __witnet.estimateBaseFeeWithCallback(tx.gasprice, _callbackGasLimit); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - bytes32 _witnetRadHash - ) - virtual override internal - returns (uint256) - { - return __witnet.postRequestWithCallback{value: _witnetEvmReward}( - _witnetRadHash, - _witnetQuerySLA, - __witnetCallbackGasLimit - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - bytes calldata _witnetRequestBytecode - ) - virtual internal returns (uint256) - { - return __witnet.postRequestWithCallback{value: _witnetEvmReward}( - _witnetRequestBytecode, - _witnetQuerySLA, - __witnetCallbackGasLimit - ); + return ( + (100 + _witnetBaseFeeOverheadPercentage()) + * __witnet.estimateBaseFeeWithCallback( + tx.gasprice, + _callbackGasLimit + ) + ) / 100; } - } diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 593a2d9b8..7947ef024 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -327,10 +327,9 @@ contract WitnetRandomness { if (latestRandomizeBlock < block.number) { // Post the Witnet Randomness request: - uint _queryId = __witnetRequestData( - msg.value, - __witnetRandomnessPackedSLA.toRadonSLA(), - __witnetRandomnessRadHash + uint _queryId = __witnet.postRequest{value: msg.value}( + __witnetRandomnessRadHash, + __witnetRandomnessPackedSLA.toRadonSLA() ); // Keep Randomize data in storage: RandomizeData storage __data = __randomize_[block.number]; diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index 6e34e2932..e93b66dfb 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -42,33 +42,4 @@ abstract contract WitnetRequestConsumer return WitnetConsumer._witnetEstimateEvmReward(); } - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - bytes32 _witnetRadHash - ) - virtual override(UsingWitnet, WitnetConsumer) internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - _witnetRadHash - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA - ) - virtual override internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - __witnetRequestRadHash - ); - } - } diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index 71d20eaa9..dc00a9c11 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -42,62 +42,4 @@ abstract contract WitnetRequestTemplateConsumer return WitnetConsumer._witnetEstimateEvmReward(); } - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - bytes32 _witnetRadHash - ) - virtual override(UsingWitnet, WitnetConsumer) internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - _witnetRadHash - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - bytes32 _witnetRadHash - ) - virtual override internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetDefaultSLA(), - _witnetRadHash - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - WitnetV2.RadonSLA memory _witnetQuerySLA, - string[][] memory _witnetRequestArgs - ) - virtual override internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetQuerySLA, - _witnetBuildRadHash(_witnetRequestArgs) - ); - } - - function __witnetRequestData( - uint256 _witnetEvmReward, - string[][] memory _witnetRequestArgs - ) - virtual override internal - returns (uint256) - { - return WitnetConsumer.__witnetRequestData( - _witnetEvmReward, - _witnetDefaultSLA(), - _witnetBuildRadHash(_witnetRequestArgs) - ); - } - } From 1099a665826f3035a54edac557ee3dfd3a5c3e87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 12 Dec 2023 19:12:10 +0100 Subject: [PATCH 084/149] feat(libs): add support to new radon operators BytesAsInteger, BytesLength, BytesSlice, BytesStringify, IntegerToBytes, StringAsBytes --- contracts/libs/WitnetEncodingLib.sol | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index 422d204eb..968a7e854 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -13,15 +13,15 @@ library WitnetEncodingLib { using WitnetCBOR for WitnetCBOR.CBOR[]; bytes internal constant WITNET_RADON_OPCODES_RESULT_TYPES = - hex"10ffffffffffffffffffffffffffffff040100010203050406071311ff01ffff07ff02ffffffffffffffffffffffffff0703ffffffffffffffffffffffffffff0405070202ff04040404ffffffffffff05070402040205050505ff04ff04ffffff010203050406070101ffffffffffff02ff050404000106060707070701ffff"; + hex"10ffffffffffffffffffffffffffffff040100010203050406071311ff01ffff07ff02ffffffffffffffffffffffffff070304ff04ffffffffffffff03ffffff0405070202ff0404040403ffffffffff05070402040205050505ff04ff04ffffff010203050406070101ffffffffffff0203050404000106060707070701ffff"; // 10ffffffffffffffffffffffffffffff // 040100001203050406070100ff01ffff // 07ff02ffffffffffffffffffffffffff - // 0703ffffffffffffffffffffffffffff - // 0405070202ff04040404ffffffffffff + // 070304ff04ffffffffffffff03ffffff + // 0405070202ff0404040403ffffffffff // 05070402040205050505ff04ff04ffff // ff010203050406070101ffffffffffff - // 02ff050404000106060707070701ffff + // 0203050404000106060707070701ffff error UnsupportedDataRequestMethod(uint8 method, string schema, string body, string[2][] headers); error UnsupportedRadonDataType(uint8 datatype, uint256 maxlength); From 153f486b302d77ea2d0e236088d9224af85db519 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 12 Jan 2024 14:59:27 +0100 Subject: [PATCH 085/149] feat(libs): add support to new radon operators ArrayPick, MapAlter, MapPick, MapStringify --- contracts/libs/WitnetEncodingLib.sol | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/contracts/libs/WitnetEncodingLib.sol b/contracts/libs/WitnetEncodingLib.sol index 968a7e854..36065dc3b 100644 --- a/contracts/libs/WitnetEncodingLib.sol +++ b/contracts/libs/WitnetEncodingLib.sol @@ -13,14 +13,14 @@ library WitnetEncodingLib { using WitnetCBOR for WitnetCBOR.CBOR[]; bytes internal constant WITNET_RADON_OPCODES_RESULT_TYPES = - hex"10ffffffffffffffffffffffffffffff040100010203050406071311ff01ffff07ff02ffffffffffffffffffffffffff070304ff04ffffffffffffff03ffffff0405070202ff0404040403ffffffffff05070402040205050505ff04ff04ffffff010203050406070101ffffffffffff0203050404000106060707070701ffff"; + hex"10ffffffffffffffffffffffffffffff040100010203050406071311ff0101ff07ff02ffffffffffffffffffffffffff070304ff04ffffffffffffff03ffffff0405070202ff0404040403ffffffffff05070402040205050505ff04ff04ffff07010203050406070101ff06ffff06ff0203050404000106060707070701ffff"; // 10ffffffffffffffffffffffffffffff - // 040100001203050406070100ff01ffff + // 040100001203050406070100ff0101ff // 07ff02ffffffffffffffffffffffffff // 070304ff04ffffffffffffff03ffffff // 0405070202ff0404040403ffffffffff // 05070402040205050505ff04ff04ffff - // ff010203050406070101ffffffffffff + // 07010203050406070101ff06ffff06ff // 0203050404000106060707070701ffff error UnsupportedDataRequestMethod(uint8 method, string schema, string body, string[2][] headers); @@ -34,7 +34,7 @@ library WitnetEncodingLib { error UnsupportedRadonTallyScript(bytes32 hash); /// =============================================================================================================== - /// --- WitnetLib internal methods -------------------------------------------------------------------------------- + /// --- WitnetEncodingLib internal methods -------------------------------------------------------------------------------- function size(Witnet.RadonDataTypes _type) internal pure returns (uint16) { if (_type == Witnet.RadonDataTypes.Integer @@ -51,7 +51,7 @@ library WitnetEncodingLib { /// =============================================================================================================== - /// --- WitnetLib public methods (if used library will have to linked to calling contracts) ----------------------- + /// --- WitnetEncodingLib public methods (if used library will have to linked to calling contracts) ----------------------- /// @notice Encode bytes array into given major type (UTF-8 not yet supported) /// @param buf Bytes array @@ -474,7 +474,7 @@ library WitnetEncodingLib { /// =============================================================================================================== - /// --- WitnetLib private methods --------------------------------------------------------------------------------- + /// --- WitnetEncodingLib private methods --------------------------------------------------------------------------------- function _replaceCborWildcards( WitnetCBOR.CBOR memory self, From bc0bd9276bb2ea1a98af34db212982d3617d3f3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 12 Jan 2024 15:01:35 +0100 Subject: [PATCH 086/149] chore: fmt! --- migrations/scripts/1_deployer.js | 40 ++--- migrations/scripts/2_libs.js | 89 ++++++----- migrations/scripts/3_core.js | 258 +++++++++++++++++-------------- migrations/scripts/4_proxies.js | 238 ++++++++++++++-------------- migrations/scripts/5_apps.js | 216 ++++++++++++++------------ migrations/witnet.settings.js | 94 +++++------ scripts/eth-create2.js | 19 ++- scripts/eth-create3.js | 21 ++- scripts/utils/index.js | 2 +- scripts/utils/traceTx.js | 2 +- scripts/vanity2gen.js | 1 - scripts/vanity3gen.js | 2 +- 12 files changed, 506 insertions(+), 476 deletions(-) diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index 66bc77d3c..a3382c969 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -4,27 +4,27 @@ const utils = require("../../scripts/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (deployer, network, [, from,, master]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - let factory - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetDeployer)) { - await deployer.deploy(WitnetDeployer, { from: master }) - factory = await WitnetDeployer.deployed() - addresses[ecosystem][network].WitnetDeployer = factory.address - } else { - factory = await WitnetDeployer.at(addresses[ecosystem][network].WitnetDeployer) - WitnetDeployer.address = factory.address - utils.traceHeader("Skipped 'WitnetDeployer'") - console.info(" > Contract address:", factory.address) - console.info() - } + let factory + if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetDeployer)) { + await deployer.deploy(WitnetDeployer, { from: master }) + factory = await WitnetDeployer.deployed() + addresses[ecosystem][network].WitnetDeployer = factory.address + } else { + factory = await WitnetDeployer.at(addresses[ecosystem][network].WitnetDeployer) + WitnetDeployer.address = factory.address + utils.traceHeader("Skipped 'WitnetDeployer'") + console.info(" > Contract address:", factory.address) + console.info() + } - if (!isDryRun) { - utils.saveAddresses(addresses) - } + if (!isDryRun) { + utils.saveAddresses(addresses) + } } diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index edaf95995..451663e57 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -6,53 +6,52 @@ const utils = require("../../scripts/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] - const addresses = require("../witnet.addresses") - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + const addresses = require("../witnet.addresses") + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) - const libs = [ - targets.WitnetErrorsLib, - targets.WitnetEncodingLib, - targets.WitnetPriceFeedsLib, - ] + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + const libs = [ + targets.WitnetErrorsLib, + targets.WitnetEncodingLib, + targets.WitnetPriceFeedsLib, + ] - const deployer = await WitnetDeployer.deployed() - for (index in libs) { - const key = libs[index] - const artifact = artifacts.require(key) - if (utils.isNullAddress(addresses[ecosystem][network][key])) { - 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[ecosystem][network][key] = libAddr - } else { - console.info(`Error: Library was not deployed on expected address: ${libAddr}`) - process.exit(1) - } - } else { - utils.traceHeader(`Skipped '${key}'`) - } - artifact.address = addresses[ecosystem][network][key] - console.info(" ", "> library address: ", artifact.address) - console.info(" ", "> library codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) - console.info() - if (!isDryRun) { - utils.saveAddresses(addresses) - } + const deployer = await WitnetDeployer.deployed() + for (index in libs) { + const key = libs[index] + const artifact = artifacts.require(key) + if (utils.isNullAddress(addresses[ecosystem][network][key])) { + 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[ecosystem][network][key] = libAddr + } else { + console.info(`Error: Library was not deployed on expected address: ${libAddr}`) + process.exit(1) + } + } else { + utils.traceHeader(`Skipped '${key}'`) } - + artifact.address = addresses[ecosystem][network][key] + console.info(" ", "> library address: ", artifact.address) + console.info(" ", "> library codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) + console.info() + if (!isDryRun) { + utils.saveAddresses(addresses) + } + } } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 887ae59af..cf999f89b 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -5,142 +5,160 @@ const addresses = require("../witnet.addresses") const settings = require("../witnet.settings") const utils = require("../../scripts/utils") const version = `${ - require("../../package").version - }-${ - require("child_process").execSync("git rev-parse HEAD").toString().trim().substring(0, 7) - }` + 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 isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) - // Deploy/upgrade WitnetBytecodes target implementation, if required - { - await deploy({ - from, ecosystem, network, targets, - key: targets.WitnetBytecodes, - libs: specs.WitnetBytecodes.libs, - immutables: specs.WitnetBytecodes.immutables, - intrinsics: { types: [ 'bool', 'bytes32' ], values: [ - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version) - ]}, - }); - if (!isDryRun) { - utils.saveAddresses(addresses); - } + // Deploy/upgrade WitnetBytecodes target implementation, if required + { + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetBytecodes, + libs: specs.WitnetBytecodes.libs, + immutables: specs.WitnetBytecodes.immutables, + intrinsics: { + types: ["bool", "bytes32"], + values: [ + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } - // Deploy/upgrade WitnetRequestFactory target implementation, if required - { - await deploy({ - from, ecosystem, network, targets, - key: targets.WitnetRequestFactory, - libs: specs.WitnetRequestFactory.libs, - immutables: specs.WitnetRequestFactory.immutables, - intrinsics: { types: [ 'address', 'address', 'bool', 'bytes32' ], values: [ - /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ]}, - }); - if (!isDryRun) { - utils.saveAddresses(addresses); - } + } + // Deploy/upgrade WitnetRequestFactory target implementation, if required + { + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetRequestFactory, + libs: specs.WitnetRequestFactory.libs, + immutables: specs.WitnetRequestFactory.immutables, + intrinsics: { + types: ["address", "address", "bool", "bytes32"], + values: [ + /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } - // Deploy/upgrade WitnetRequestBoard target implementation, if required - { - await deploy({ - from, ecosystem, network, targets, - key: targets.WitnetRequestBoard, - libs: specs.WitnetRequestBoard.libs, - immutables: specs.WitnetRequestBoard.immutables, - intrinsics: { types: [ 'address', 'address', 'bool', 'bytes32' ], values: [ - /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ]}, - }); - if (!isDryRun) { - utils.saveAddresses(addresses); - } + } + // Deploy/upgrade WitnetRequestBoard target implementation, if required + { + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetRequestBoard, + libs: specs.WitnetRequestBoard.libs, + immutables: specs.WitnetRequestBoard.immutables, + intrinsics: { + types: ["address", "address", "bool", "bytes32"], + values: [ + /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } + } } -async function deploy(specs) { - const { from, ecosystem, network, key, libs, intrinsics, immutables, targets } = specs; - const contract = artifacts.require(key) - if (utils.isNullAddress(addresses[ecosystem][network][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:", types) - console.info(" ", "> constructor args: ", constructorArgs.slice(2)) - } - const coreBytecode = link(contract.toJSON().bytecode, libs, targets) - if (coreBytecode.indexOf("__") > -1) { - console.info(bytecode) - 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[ecosystem][network][key] = coreAddr - } else { - console.info(`Error: Contract was not deployed on expected address: ${coreAddr}`) - process.exit(1) - } +async function deploy (specs) { + const { from, ecosystem, network, key, libs, intrinsics, immutables, targets } = specs + const contract = artifacts.require(key) + if (utils.isNullAddress(addresses[ecosystem][network][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:", types) + console.info(" ", "> constructor args: ", constructorArgs.slice(2)) + } + const coreBytecode = link(contract.toJSON().bytecode, libs, targets) + if (coreBytecode.indexOf("__") > -1) { + console.info(bytecode) + 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[ecosystem][network][key] = coreAddr } else { - utils.traceHeader(`Skipped '${key}'`) + console.info(`Error: Contract was not deployed on expected address: ${coreAddr}`) + process.exit(1) } - contract.address = addresses[ecosystem][network][key] - console.info(" ", "> contract address: ", contract.address) - console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(contract.address))) - console.info() - return contract + } else { + utils.traceHeader(`Skipped '${key}'`) + } + contract.address = addresses[ecosystem][network][key] + 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 }) +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 (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}`) - } +function link (bytecode, libs, targets) { + if (libs && Array.isArray(libs) && libs.length > 0) { + for (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 -} \ No newline at end of file + } + return bytecode +} diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index e5fbcf5d7..08f104d1a 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -9,137 +9,141 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") module.exports = async function (_, network, [, from, reporter]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) - const singletons = [ - "WitnetBytecodes", - "WitnetRequestFactory", - "WitnetRequestBoard", - ] + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const singletons = [ + "WitnetBytecodes", + "WitnetRequestFactory", + "WitnetRequestBoard", + ] - specs["WitnetRequestBoard"].mutables = merge({ - types: [ 'address[]', ], - values: [ [ reporter, ], ], - }, specs["WitnetRequestBoard"].mutables - ) + specs.WitnetRequestBoard.mutables = merge({ + types: ["address[]"], + values: [[reporter]], + }, specs.WitnetRequestBoard.mutables + ) - // Deploy/upgrade singleton proxies, if required - for (index in singletons) { - await deploy({ - from, ecosystem, network, specs, targets, - key: singletons[index], - }); - if (!isDryRun) { - utils.saveAddresses(addresses); - } + // Deploy/upgrade singleton proxies, if required + for (index in singletons) { + await deploy({ + from, + ecosystem, + network, + specs, + targets, + key: singletons[index], + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } + } } -async function deploy(target) { - const { from, ecosystem, network, key, specs, targets } = target; - - const mutables = specs[key].mutables - const proxy = artifacts.require(key) - const proxy_salt = specs[key].vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") : "0x0" - - if (utils.isNullAddress(addresses[ecosystem][network][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() - const impl = await artifacts.require(targets[key]).deployed() - const proxyAddr = await deployer.determineProxyAddr.call(proxy_salt, { 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(proxy_salt, impl.address, initdata, { from }) - utils.traceTx(tx) - // save/overwrite exportable abi file - utils.saveJsonAbi(key, proxy.abi) - } 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) { - addresses[ecosystem][network][key] = proxyAddr +async function deploy (target) { + const { from, ecosystem, network, key, specs, targets } = target + + const mutables = specs[key].mutables + const proxy = artifacts.require(key) + const proxy_salt = specs[key].vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") : "0x0" + + if (utils.isNullAddress(addresses[ecosystem][network][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() + const impl = await artifacts.require(targets[key]).deployed() + const proxyAddr = await deployer.determineProxyAddr.call(proxy_salt, { 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(proxy_salt, impl.address, initdata, { from }) + utils.traceTx(tx) + // save/overwrite exportable abi file + utils.saveJsonAbi(key, proxy.abi) + } 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(`Error: Contract was not deployed on expected address: ${proxyAddr}`) - process.exit(1) + 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) { + addresses[ecosystem][network][key] = proxyAddr } else { - const oldAddr = await getProxyImplementation(from, addresses[ecosystem][network][key]) - const oldImpl = await artifacts.require(targets[key]).at(oldAddr) - const newImpl = await artifacts.require(targets[key]).deployed() - if (oldAddr !== newImpl.address) { - utils.traceHeader(`Upgrading '${key}'...`) - const oldVersion = await oldImpl.version.call({ from }) - const newVersion = await newImpl.version.call({ from }) - if( - process.argv.length >= 3 && process.argv[2].includes("--upgrade-all") || ["y", "yes"].includes( - (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [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) - } - const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) - utils.traceTx(tx) - // save/overwrite exportable abi file - utils.saveJsonAbi(key, proxy.abi) - } - } else { - utils.traceHeader(`Skipped '${key}'`) + console.info(`Error: Contract was not deployed on expected address: ${proxyAddr}`) + process.exit(1) + } + } else { + const oldAddr = await getProxyImplementation(from, addresses[ecosystem][network][key]) + const oldImpl = await artifacts.require(targets[key]).at(oldAddr) + const newImpl = await artifacts.require(targets[key]).deployed() + if (oldAddr !== newImpl.address) { + utils.traceHeader(`Upgrading '${key}'...`) + const oldVersion = await oldImpl.version.call({ from }) + const newVersion = await newImpl.version.call({ from }) + if ( + process.argv.length >= 3 && process.argv[2].includes("--upgrade-all") || ["y", "yes"].includes( + (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [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) } + const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) + utils.traceTx(tx) + // save/overwrite exportable abi file + utils.saveJsonAbi(key, proxy.abi) + } + } else { + utils.traceHeader(`Skipped '${key}'`) } - proxy.address = addresses[ecosystem][network][key] - 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()) - console.info(" ", "> impl. address: ", await getProxyImplementation(from, proxy.address)) - console.info(" ", "> impl. version: ", await impl.version.call()) - console.info() - return proxy + } + proxy.address = addresses[ecosystem][network][key] + 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()) + console.info(" ", "> impl. address: ", await getProxyImplementation(from, proxy.address)) + console.info(" ", "> impl. version: ", await impl.version.call()) + console.info() + return proxy } -async function getProxyImplementation(from, proxyAddr) { - proxy = await WitnetProxy.at(proxyAddr) - return await proxy.implementation.call({ from }) +async function getProxyImplementation (from, proxyAddr) { + proxy = await WitnetProxy.at(proxyAddr) + return await proxy.implementation.call({ from }) } -async function upgradeProxyTo(from, proxy, implAddr, initData) { - proxy = await WitnetProxy.at(proxy.address) - return await proxy.upgradeTo(implAddr, initData, { from }) +async function upgradeProxyTo (from, proxy, implAddr, initData) { + proxy = await WitnetProxy.at(proxy.address) + return await proxy.upgradeTo(implAddr, initData, { from }) } diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 3692fa4b5..3080cc8ab 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -8,117 +8,129 @@ const utils = require("../../scripts/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [,,, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] + const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const ecosystem = utils.getRealmNetworkFromArgs()[0] + network = network.split("-")[0] - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + if (!addresses[ecosystem]) addresses[ecosystem] = {} + if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) + const specs = merge( + settings.specs.default, + settings.specs[ecosystem], + settings.specs[network], + ) + const targets = merge( + settings.artifacts.default, + settings.artifacts[ecosystem], + settings.artifacts[network] + ) - // Deploy the WitnetPriceFeeds oracle, if required - { - await deploy({ - from, ecosystem, network, targets, - key: targets.WitnetPriceFeeds, - libs: specs.WitnetPriceFeeds.libs, - vanity: specs.WitnetPriceFeeds?.vanity || 0, - immutables: specs.WitnetPriceFeeds.immutables, - intrinsics: { types: [ 'address', 'address' ], values: [ - /* _operator */ from, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ]}, - }); - if (!isDryRun) utils.saveAddresses(addresses); - } - // Deploy the WitnetRandomness oracle, if required - { - await deploy({ - from, ecosystem, network, targets, - key: targets.WitnetRandomness, - libs: specs.WitnetRandomness?.libs, - vanity: specs.WitnetRandomness?.vanity || 0, - immutables: specs.WitnetRandomness?.immutables, - intrinsics: { types: [ 'address', 'address' ], values: [ - /* _operator */ from, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ]}, - }); - if (!isDryRun) utils.saveAddresses(addresses); - } + // Deploy the WitnetPriceFeeds oracle, if required + { + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetPriceFeeds, + libs: specs.WitnetPriceFeeds.libs, + vanity: specs.WitnetPriceFeeds?.vanity || 0, + immutables: specs.WitnetPriceFeeds.immutables, + intrinsics: { + types: ["address", "address"], + values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ], + }, + }) + if (!isDryRun) utils.saveAddresses(addresses) + } + // Deploy the WitnetRandomness oracle, if required + { + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetRandomness, + libs: specs.WitnetRandomness?.libs, + vanity: specs.WitnetRandomness?.vanity || 0, + immutables: specs.WitnetRandomness?.immutables, + intrinsics: { + types: ["address", "address"], + values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ], + }, + }) + if (!isDryRun) utils.saveAddresses(addresses) + } } -async function deploy(specs) { - const { from, ecosystem, network, key, libs, intrinsics, immutables, targets, vanity } = specs; - const artifact = artifacts.require(key) - const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" - if (utils.isNullAddress(addresses[ecosystem][network][key])) { - utils.traceHeader(`Deploying '${key}'...`) - 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:", types) - console.info(" ", "> constructor args: ", constructorArgs.slice(2)) - } - const coreBytecode = link(artifact.toJSON().bytecode, libs, targets) - if (coreBytecode.indexOf("__") > -1) { - console.info(bytecode) - console.info("Cannot deploy due to some missing libs") - process.exit(1) - } - const dappInitCode = coreBytecode + constructorArgs.slice(2) - const dappAddr = await deployer.determineAddr.call(dappInitCode, salt, { from }) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), 'ether'), "ETH") - const tx = await deployer.deploy(dappInitCode, salt, { from }) - utils.traceTx(tx) - if ((await web3.eth.getCode(dappAddr)).length > 3) { - addresses[ecosystem][network][key] = dappAddr - // save/overwrite exportable abi file - utils.saveJsonAbi(key, artifact.abi) - } else { - console.info(`Contract was not deployed on expected address: ${dappAddr}`) - console.log(tx.receipt) - process.exit(1) - } +async function deploy (specs) { + const { from, ecosystem, network, key, libs, intrinsics, immutables, targets, vanity } = specs + const artifact = artifacts.require(key) + const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" + if (utils.isNullAddress(addresses[ecosystem][network][key])) { + utils.traceHeader(`Deploying '${key}'...`) + 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:", types) + console.info(" ", "> constructor args: ", constructorArgs.slice(2)) + } + const coreBytecode = link(artifact.toJSON().bytecode, libs, targets) + if (coreBytecode.indexOf("__") > -1) { + console.info(bytecode) + console.info("Cannot deploy due to some missing libs") + process.exit(1) + } + const dappInitCode = coreBytecode + constructorArgs.slice(2) + const dappAddr = await deployer.determineAddr.call(dappInitCode, salt, { from }) + console.info(" ", "> account: ", from) + console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") + const tx = await deployer.deploy(dappInitCode, salt, { from }) + utils.traceTx(tx) + if ((await web3.eth.getCode(dappAddr)).length > 3) { + addresses[ecosystem][network][key] = dappAddr + // save/overwrite exportable abi file + utils.saveJsonAbi(key, artifact.abi) } else { - utils.traceHeader(`Skipped '${key}'`) + console.info(`Contract was not deployed on expected address: ${dappAddr}`) + console.log(tx.receipt) + process.exit(1) } - artifact.address = addresses[ecosystem][network][key] - console.info(" ", "> contract address: ", artifact.address) - console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) - console.info() - return artifact + } else { + utils.traceHeader(`Skipped '${key}'`) + } + artifact.address = addresses[ecosystem][network][key] + console.info(" ", "> contract address: ", artifact.address) + console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) + console.info() + return artifact } -async function determineProxyAddr(from, nonce) { - const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" - const deployer = await WitnetDeployer.deployed() - const addr = await deployer.determineProxyAddr.call(salt, { from }) - return addr +async function determineProxyAddr (from, nonce) { + const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" + const deployer = await WitnetDeployer.deployed() + const addr = await deployer.determineProxyAddr.call(salt, { from }) + return addr } -function link(bytecode, libs, targets) { - if (libs && Array.isArray(libs) && libs.length > 0) { - for (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}`) - } +function link (bytecode, libs, targets) { + if (libs && Array.isArray(libs) && libs.length > 0) { + for (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 -} \ No newline at end of file + } + return bytecode +} diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js index 80bcc6faf..5081d57d8 100644 --- a/migrations/witnet.settings.js +++ b/migrations/witnet.settings.js @@ -659,7 +659,7 @@ module.exports = { specs: { default: { WitnetBytecodes: { - libs: [ "WitnetEncodingLib", ], + libs: ["WitnetEncodingLib"], vanity: 172582, }, WitnetRandomness: { @@ -667,31 +667,31 @@ module.exports = { }, WitnetRequestBoard: { immutables: { - types: [ 'uint256', 'uint256', 'uint256', 'uint256', ], + types: ["uint256", "uint256", "uint256", "uint256"], values: [ - /* _reportResultGasBase */ 58282, - /* _reportResultWithCallbackGasBase */ 65273, - /* _reportResultWithCallbackRevertGasBase */ 69546, - /* _sstoreFromZeroGas */ 20000, - ] + /* _reportResultGasBase */ 58282, + /* _reportResultWithCallbackGasBase */ 65273, + /* _reportResultWithCallbackRevertGasBase */ 69546, + /* _sstoreFromZeroGas */ 20000, + ], }, - libs: [ "WitnetErrorsLib", ], + libs: ["WitnetErrorsLib"], vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 }, WitnetRequestFactory: { vanity: 178848, }, WitnetPriceFeeds: { - libs: [ "WitnetPriceFeedsLib", ], + libs: ["WitnetPriceFeedsLib"], vanity: 5, - } + }, }, avalanche: { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 155000, - ] + /* _reportResultGasBase */ 155000, + ], }, }, }, @@ -699,8 +699,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 114000, - ] + /* _reportResultGasBase */ 114000, + ], }, }, }, @@ -708,8 +708,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 78500, - ] + /* _reportResultGasBase */ 78500, + ], }, }, }, @@ -717,8 +717,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 225000, - ] + /* _reportResultGasBase */ 225000, + ], }, }, }, @@ -726,8 +726,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 225000, - ] + /* _reportResultGasBase */ 225000, + ], }, }, }, @@ -735,8 +735,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 137500, - ] + /* _reportResultGasBase */ 137500, + ], }, }, }, @@ -744,8 +744,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 85000, - ] + /* _reportResultGasBase */ 85000, + ], }, }, }, @@ -753,8 +753,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 530000, - ] + /* _reportResultGasBase */ 530000, + ], }, }, }, @@ -762,8 +762,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 85000, - ] + /* _reportResultGasBase */ 85000, + ], }, }, }, @@ -771,8 +771,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 92500, - ] + /* _reportResultGasBase */ 92500, + ], }, }, }, @@ -780,8 +780,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 105000, - ] + /* _reportResultGasBase */ 105000, + ], }, }, }, @@ -789,8 +789,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 85000, - ] + /* _reportResultGasBase */ 85000, + ], }, }, }, @@ -798,8 +798,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 134800, - ] + /* _reportResultGasBase */ 134800, + ], }, }, }, @@ -807,8 +807,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 115000, - ] + /* _reportResultGasBase */ 115000, + ], }, }, }, @@ -816,8 +816,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 145000, - ] + /* _reportResultGasBase */ 145000, + ], }, }, }, @@ -825,8 +825,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 135000, - ] + /* _reportResultGasBase */ 135000, + ], }, }, }, @@ -834,8 +834,8 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", - ] + /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", + ], }, }, }, @@ -843,10 +843,10 @@ module.exports = { WitnetRequestBoard: { immutables: { values: [ - /* _reportResultGasBase */ 83949, - ] + /* _reportResultGasBase */ 83949, + ], }, }, }, }, -} \ No newline at end of file +} diff --git a/scripts/eth-create2.js b/scripts/eth-create2.js index 52a0f84c3..5a364f00e 100644 --- a/scripts/eth-create2.js +++ b/scripts/eth-create2.js @@ -1,6 +1,6 @@ -const assert = require('nanoassert') -const { utils } = require('eth-helpers') -const keccak = require('sha3-wasm').keccak256 +const assert = require("nanoassert") +const { utils } = require("eth-helpers") +const keccak = require("sha3-wasm").keccak256 const prefix = Buffer.from([0xff]) @@ -16,13 +16,13 @@ const prefix = Buffer.from([0xff]) * `eth-checksum` or similar modules */ module.exports = function create2 (address, salt, initCode) { - if (typeof address === 'string') address = utils.parse.address(address) - if (typeof salt === 'string') salt = utils.parse.uint256(salt) - if (typeof initCode === 'string') initCode = utils.parse.bytes(initCode) + if (typeof address === "string") address = utils.parse.address(address) + if (typeof salt === "string") salt = utils.parse.uint256(salt) + if (typeof initCode === "string") initCode = utils.parse.bytes(initCode) - assert(address.byteLength === 20, 'address must be 20 bytes') - assert(salt.byteLength === 32, 'salt must be 32 bytes') - assert(initCode.byteLength != null, 'initCode must be Buffer') + assert(address.byteLength === 20, "address must be 20 bytes") + assert(salt.byteLength === 32, "salt must be 32 bytes") + assert(initCode.byteLength != null, "initCode must be Buffer") const codeHash = keccak().update(initCode).digest() @@ -34,4 +34,3 @@ module.exports = function create2 (address, salt, initCode) { .digest() .slice(-20)) } - diff --git a/scripts/eth-create3.js b/scripts/eth-create3.js index 2f5347d48..613e8de59 100644 --- a/scripts/eth-create3.js +++ b/scripts/eth-create3.js @@ -1,6 +1,6 @@ -const assert = require('nanoassert') -const { utils } = require('eth-helpers') -const keccak = require('sha3-wasm').keccak256 +const assert = require("nanoassert") +const { utils } = require("eth-helpers") +const keccak = require("sha3-wasm").keccak256 const factoryPrefix = Buffer.from([0xff]) @@ -15,11 +15,11 @@ const factoryPrefix = Buffer.from([0xff]) * `eth-checksum` or similar modules */ module.exports = function create3 (address, salt) { - if (typeof address === 'string') address = utils.parse.address(address) - if (typeof salt === 'string') salt = utils.parse.uint256(salt) + if (typeof address === "string") address = utils.parse.address(address) + if (typeof salt === "string") salt = utils.parse.uint256(salt) - assert(address.byteLength === 20, 'address must be 20 bytes') - assert(salt.byteLength === 32, 'salt must be 32 bytes') + assert(address.byteLength === 20, "address must be 20 bytes") + assert(salt.byteLength === 32, "salt must be 32 bytes") const factoryHash = utils.parse.uint256("0x21c35dbe1b344a2488cf3321d6ce542f8e9f305544ff09e4993a62319a497c1f") const factoryAddr = keccak() @@ -29,8 +29,8 @@ module.exports = function create3 (address, salt) { .update(factoryHash) .digest() .slice(-20) - ; - assert(factoryAddr.byteLength === 20, 'address must be 20 bytes') + + assert(factoryAddr.byteLength === 20, "address must be 20 bytes") return utils.format.address(keccak() .update(Buffer.from([0xd6, 0x94])) @@ -38,6 +38,5 @@ module.exports = function create3 (address, salt) { .update(Buffer.from([0x01])) .digest() .slice(-20) - ) + ) } - diff --git a/scripts/utils/index.js b/scripts/utils/index.js index 6d9190a6b..1cce66d5b 100644 --- a/scripts/utils/index.js +++ b/scripts/utils/index.js @@ -121,7 +121,7 @@ function saveAddresses (addrs) { function saveJsonAbi (key, abi) { const version = require("../../package.json").version - const latest_fn = `./migrations/abis/${key}.json`; + const latest_fn = `./migrations/abis/${key}.json` const version_fn = `./migrations/abis/${key}-${version}.json` let latest_abi = [] if (fs.existsSync(latest_fn)) { diff --git a/scripts/utils/traceTx.js b/scripts/utils/traceTx.js index 4c36b7223..28134518a 100644 --- a/scripts/utils/traceTx.js +++ b/scripts/utils/traceTx.js @@ -4,5 +4,5 @@ module.exports = function (tx) { console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), 'ether'), "ETH") + console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), "ether"), "ETH") } diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index 8a8354137..0ce0ee900 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -80,4 +80,3 @@ module.exports = async function () { offset++ } } - diff --git a/scripts/vanity3gen.js b/scripts/vanity3gen.js index 6452d3b81..3e1721686 100644 --- a/scripts/vanity3gen.js +++ b/scripts/vanity3gen.js @@ -14,7 +14,7 @@ module.exports = async function () { let network = "default" let prefix = "0x00" let suffix = "0x00" - let hexArgs = "" + const hexArgs = "" process.argv.map((argv, index, args) => { if (argv === "--offset") { offset = parseInt(args[index + 1]) From 9713d61a9352a4a1c50a0d453c9a2ffe1b771603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 24 Jan 2024 16:46:38 +0100 Subject: [PATCH 087/149] feat(libs): add/refactor result error codes --- contracts/libs/Witnet.sol | 266 ++++++++++++++++++++++++-------------- 1 file changed, 168 insertions(+), 98 deletions(-) diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 5b2fcfec9..57e496a38 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -66,113 +66,183 @@ library Witnet { enum ResultErrorCodes { /// 0x00: Unknown error. Something went really bad! Unknown, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Script format errors ============================================================================================= - /// 0x01: At least one of the source scripts is not a valid CBOR-encoded value. - SourceScriptNotCBOR, - /// 0x02: The CBOR value decoded from a source script is not an Array. - SourceScriptNotArray, - /// 0x03: The Array value decoded form a source script is not a valid Data Request. - SourceScriptNotRADON, - /// Unallocated - ScriptFormat0x04, ScriptFormat0x05, ScriptFormat0x06, ScriptFormat0x07, ScriptFormat0x08, ScriptFormat0x09, - ScriptFormat0x0A, ScriptFormat0x0B, ScriptFormat0x0C, ScriptFormat0x0D, ScriptFormat0x0E, ScriptFormat0x0F, + /// Source-specific format error sub-codes ============================================================================ + /// 0x01: At least one of the source scripts is not a valid CBOR-encoded value. + SourceScriptNotCBOR, + /// 0x02: The CBOR value decoded from a source script is not an Array. + SourceScriptNotArray, + /// 0x03: The Array value decoded form a source script is not a valid Data Request. + SourceScriptNotRADON, + /// 0x04: The request body of at least one data source was not properly formated. + SourceRequestBody, + /// 0x05: The request headers of at least one data source was not properly formated. + SourceRequestHeaders, + /// 0x06: The request URL of at least one data source was not properly formated. + SourceRequestURL, + /// Unallocated + SourceFormat0x07, SourceFormat0x08, SourceFormat0x09, SourceFormat0x0A, SourceFormat0x0B, SourceFormat0x0C, + SourceFormat0x0D, SourceFormat0x0E, SourceFormat0x0F, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Complexity errors ================================================================================================ - /// 0x10: The request contains too many sources. - RequestTooManySources, - /// 0x11: The script contains too many calls. - ScriptTooManyCalls, - /// Unallocated - Complexity0x12, Complexity0x13, Complexity0x14, Complexity0x15, Complexity0x16, Complexity0x17, Complexity0x18, - Complexity0x19, Complexity0x1A, Complexity0x1B, Complexity0x1C, Complexity0x1D, Complexity0x1E, Complexity0x1F, + /// Complexity error sub-codes ======================================================================================== + /// 0x10: The request contains too many sources. + RequestTooManySources, + /// 0x11: The script contains too many calls. + ScriptTooManyCalls, + /// Unallocated + Complexity0x12, Complexity0x13, Complexity0x14, Complexity0x15, Complexity0x16, Complexity0x17, Complexity0x18, + Complexity0x19, Complexity0x1A, Complexity0x1B, Complexity0x1C, Complexity0x1D, Complexity0x1E, Complexity0x1F, + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Lack of support error sub-codes =================================================================================== + /// 0x20: Some Radon operator code was found that is not supported (1+ args). + UnsupportedOperator, + /// 0x21: Some Radon filter opcode is not currently supported (1+ args). + UnsupportedFilter, + /// 0x22: Some Radon request type is not currently supported (1+ args). + UnsupportedHashFunction, + /// 0x23: Some Radon reducer opcode is not currently supported (1+ args) + UnsupportedReducer, + /// 0x24: Some Radon hash function is not currently supported (1+ args). + UnsupportedRequestType, + /// 0x25: Some Radon encoding function is not currently supported (1+ args). + UnsupportedEncodingFunction, + /// Unallocated + Operator0x26, Operator0x27, + /// 0x28: Wrong number (or type) of arguments were passed to some Radon operator. + WrongArguments, + /// Unallocated + Operator0x29, Operator0x2A, Operator0x2B, Operator0x2C, Operator0x2D, Operator0x2E, Operator0x2F, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Operator errors =================================================================================================== - /// 0x20: The operator does not exist. - UnsupportedOperator, - /// Unallocated - Operator0x21, Operator0x22, Operator0x23, Operator0x24, Operator0x25, Operator0x26, Operator0x27, Operator0x28, - Operator0x29, Operator0x2A, Operator0x2B, Operator0x2C, Operator0x2D, Operator0x2E, Operator0x2F, + /// Retrieve-specific circumstantial error sub-codes ================================================================================ + /// 0x30: A majority of data sources returned an HTTP status code other than 200 (1+ args): + HttpErrors, + /// 0x31: A majority of data sources timed out: + RetrievalsTimeout, + /// Unallocated + RetrieveCircumstance0x32, RetrieveCircumstance0x33, RetrieveCircumstance0x34, RetrieveCircumstance0x35, + RetrieveCircumstance0x36, RetrieveCircumstance0x37, RetrieveCircumstance0x38, RetrieveCircumstance0x39, + RetrieveCircumstance0x3A, RetrieveCircumstance0x3B, RetrieveCircumstance0x3C, RetrieveCircumstance0x3D, + RetrieveCircumstance0x3E, RetrieveCircumstance0x3F, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Retrieval-specific errors ========================================================================================= - /// 0x30: At least one of the sources could not be retrieved, but returned HTTP error. - HTTP, - /// 0x31: Retrieval of at least one of the sources timed out. - RetrievalTimeout, - /// Unallocated - Retrieval0x32, Retrieval0x33, Retrieval0x34, Retrieval0x35, Retrieval0x36, Retrieval0x37, Retrieval0x38, - Retrieval0x39, Retrieval0x3A, Retrieval0x3B, Retrieval0x3C, Retrieval0x3D, Retrieval0x3E, Retrieval0x3F, + /// Scripting-specific runtime error sub-code ========================================================================= + /// 0x40: Math operator caused an underflow. + MathUnderflow, + /// 0x41: Math operator caused an overflow. + MathOverflow, + /// 0x42: Math operator tried to divide by zero. + MathDivisionByZero, + /// 0x43:Wrong input to subscript call. + WrongSubscriptInput, + /// 0x44: Value cannot be extracted from input binary buffer. + BufferIsNotValue, + /// 0x45: Value cannot be decoded from expected type. + Decode, + /// 0x46: Unexpected empty array. + EmptyArray, + /// 0x47: Value cannot be encoded to expected type. + Encode, + /// 0x48: Failed to filter input values (1+ args). + Filter, + /// 0x49: Failed to hash input value. + Hash, + /// 0x4A: Mismatching array ranks. + MismatchingArrays, + /// 0x4B: Failed to process non-homogenous array. + NonHomegeneousArray, + /// 0x4C: Failed to parse syntax of some input value, or argument. + Parse, + /// 0x4E: Parsing logic limits were exceeded. + ParseOverflow, + /// 0x4F: Unallocated + ScriptError0x4F, + + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /// Actual first-order result error codes ============================================================================= + /// 0x50: Not enough reveal quorum was reached on tally stage: + InsufficientQuorum, + /// 0x51: No actual reveal majority was reached on tally stage: + InsufficientMajority, + /// 0x52: Not enough commits were received before tally stage: + InsufficientCommits, + /// 0x53: Generic error during tally execution (to be deprecated after WIP #0028) + TallyExecution, + /// 0x54: A majority of data sources could either be temporarily unresponsive or failing to report the requested data: + CircumstantialFailure, + /// 0x55: At least one data source is inconsistent when queried through multiple transports at once: + InconsistentSources, + /// 0x56: Any one of the (multiple) Retrieve, Aggregate or Tally scripts were badly formated: + MalformedDataRequest, + /// 0x57: Values returned from a majority of data sources don't match the expected schema: + MalformedResponses, + /// Unallocated: + OtherError0x58, OtherError0x59, OtherError0x5A, OtherError0x5B, OtherError0x5C, OtherError0x5D, OtherError0x5E, + /// 0x5F: Size of serialized tally result exceeds allowance: + OversizedTallyResult, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Math errors ======================================================================================================= - /// 0x40: Math operator caused an underflow. - Underflow, - /// 0x41: Math operator caused an overflow. - Overflow, - /// 0x42: Tried to divide by zero. - DivisionByZero, - /// Unallocated - Math0x43, Math0x44, Math0x45, Math0x46, Math0x47, Math0x48, Math0x49, - Math0x4A, Math0x4B, Math0x4C, Math0x4D, Math0x4E, Math0x4F, + /// Inter-stage runtime error sub-codes =============================================================================== + /// 0x60: Data aggregation reveals could not get decoded on the tally stage: + MalformedReveals, + /// 0x61: The result to data aggregation could not get encoded: + EncodeReveals, + /// 0x62: A mode tie ocurred when calculating some mode value on the aggregation or the tally stage: + ModeTie, + /// Unallocated: + OtherError0x63, OtherError0x64, OtherError0x65, OtherError0x66, OtherError0x67, OtherError0x68, OtherError0x69, + OtherError0x6A, OtherError0x6B, OtherError0x6C, OtherError0x6D, OtherError0x6E, OtherError0x6F, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Other errors ====================================================================================================== - /// 0x50: Received zero reveals - NoReveals, - /// 0x51: Insufficient consensus in tally precondition clause - InsufficientConsensus, - /// 0x52: Received zero commits - InsufficientCommits, - /// 0x53: Generic error during tally execution - TallyExecution, - /// Unallocated - OtherError0x54, OtherError0x55, OtherError0x56, OtherError0x57, OtherError0x58, OtherError0x59, - OtherError0x5A, OtherError0x5B, OtherError0x5C, OtherError0x5D, OtherError0x5E, OtherError0x5F, - /// 0x60: Invalid reveal serialization (malformed reveals are converted to this value) - MalformedReveal, - /// Unallocated - OtherError0x61, OtherError0x62, OtherError0x63, OtherError0x64, OtherError0x65, OtherError0x66, - OtherError0x67, OtherError0x68, OtherError0x69, OtherError0x6A, OtherError0x6B, OtherError0x6C, - OtherError0x6D, OtherError0x6E,OtherError0x6F, + /// Runtime access error sub-codes ==================================================================================== + /// 0x70: Tried to access a value from an array using an index that is out of bounds (1+ args): + ArrayIndexOutOfBounds, + /// 0x71: Tried to access a value from a map using a key that does not exist (1+ args): + MapKeyNotFound, + /// 0X72: Tried to extract value from a map using a JSON Path that returns no values (+1 args): + JsonPathNotFound, + /// Unallocated: + OtherError0x73, OtherError0x74, OtherError0x75, OtherError0x76, OtherError0x77, OtherError0x78, + OtherError0x79, OtherError0x7A, OtherError0x7B, OtherError0x7C, OtherError0x7D, OtherError0x7E, OtherError0x7F, + OtherError0x80, OtherError0x81, OtherError0x82, OtherError0x83, OtherError0x84, OtherError0x85, OtherError0x86, + OtherError0x87, OtherError0x88, OtherError0x89, OtherError0x8A, OtherError0x8B, OtherError0x8C, OtherError0x8D, + OtherError0x8E, OtherError0x8F, OtherError0x90, OtherError0x91, OtherError0x92, OtherError0x93, OtherError0x94, + OtherError0x95, OtherError0x96, OtherError0x97, OtherError0x98, OtherError0x99, OtherError0x9A, OtherError0x9B, + OtherError0x9C, OtherError0x9D, OtherError0x9E, OtherError0x9F, OtherError0xA0, OtherError0xA1, OtherError0xA2, + OtherError0xA3, OtherError0xA4, OtherError0xA5, OtherError0xA6, OtherError0xA7, OtherError0xA8, OtherError0xA9, + OtherError0xAA, OtherError0xAB, OtherError0xAC, OtherError0xAD, OtherError0xAE, OtherError0xAF, OtherError0xB0, + OtherError0xB1, OtherError0xB2, OtherError0xB3, OtherError0xB4, OtherError0xB5, OtherError0xB6, OtherError0xB7, + OtherError0xB8, OtherError0xB9, OtherError0xBA, OtherError0xBB, OtherError0xBC, OtherError0xBD, OtherError0xBE, + OtherError0xBF, OtherError0xC0, OtherError0xC1, OtherError0xC2, OtherError0xC3, OtherError0xC4, OtherError0xC5, + OtherError0xC6, OtherError0xC7, OtherError0xC8, OtherError0xC9, OtherError0xCA, OtherError0xCB, OtherError0xCC, + OtherError0xCD, OtherError0xCE, OtherError0xCF, OtherError0xD0, OtherError0xD1, OtherError0xD2, OtherError0xD3, + OtherError0xD4, OtherError0xD5, OtherError0xD6, OtherError0xD7, OtherError0xD8, OtherError0xD9, OtherError0xDA, + OtherError0xDB, OtherError0xDC, OtherError0xDD, OtherError0xDE, OtherError0xDF, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Access errors ===================================================================================================== - /// 0x70: Tried to access a value from an array using an index that is out of bounds - ArrayIndexOutOfBounds, - /// 0x71: Tried to access a value from a map using a key that does not exist - MapKeyNotFound, - /// Unallocated - OtherError0x72, OtherError0x73, OtherError0x74, OtherError0x75, OtherError0x76, OtherError0x77, OtherError0x78, - OtherError0x79, OtherError0x7A, OtherError0x7B, OtherError0x7C, OtherError0x7D, OtherError0x7E, OtherError0x7F, - OtherError0x80, OtherError0x81, OtherError0x82, OtherError0x83, OtherError0x84, OtherError0x85, OtherError0x86, - OtherError0x87, OtherError0x88, OtherError0x89, OtherError0x8A, OtherError0x8B, OtherError0x8C, OtherError0x8D, - OtherError0x8E, OtherError0x8F, OtherError0x90, OtherError0x91, OtherError0x92, OtherError0x93, OtherError0x94, - OtherError0x95, OtherError0x96, OtherError0x97, OtherError0x98, OtherError0x99, OtherError0x9A, OtherError0x9B, - OtherError0x9C, OtherError0x9D, OtherError0x9E, OtherError0x9F, OtherError0xA0, OtherError0xA1, OtherError0xA2, - OtherError0xA3, OtherError0xA4, OtherError0xA5, OtherError0xA6, OtherError0xA7, OtherError0xA8, OtherError0xA9, - OtherError0xAA, OtherError0xAB, OtherError0xAC, OtherError0xAD, OtherError0xAE, OtherError0xAF, OtherError0xB0, - OtherError0xB1, OtherError0xB2, OtherError0xB3, OtherError0xB4, OtherError0xB5, OtherError0xB6, OtherError0xB7, - OtherError0xB8, OtherError0xB9, OtherError0xBA, OtherError0xBB, OtherError0xBC, OtherError0xBD, OtherError0xBE, - OtherError0xBF, OtherError0xC0, OtherError0xC1, OtherError0xC2, OtherError0xC3, OtherError0xC4, OtherError0xC5, - OtherError0xC6, OtherError0xC7, OtherError0xC8, OtherError0xC9, OtherError0xCA, OtherError0xCB, OtherError0xCC, - OtherError0xCD, OtherError0xCE, OtherError0xCF, OtherError0xD0, OtherError0xD1, OtherError0xD2, OtherError0xD3, - OtherError0xD4, OtherError0xD5, OtherError0xD6, OtherError0xD7, OtherError0xD8, OtherError0xD9, OtherError0xDA, - OtherError0xDB, OtherError0xDC, OtherError0xDD, OtherError0xDE, OtherError0xDF, + /// Inter-client generic error codes ================================================================================== + /// Data requests that cannot be relayed into the Witnet blockchain should be reported + /// with one of these errors. + /// 0xE0: Requests that cannot be parsed must always get this error as their result. + BridgeMalformedDataRequest, + /// 0xE1: Witnesses exceeds 100 + BridgePoorIncentives, + /// 0xE2: The request is rejected on the grounds that it may cause the submitter to spend or stake an + /// amount of value that is unjustifiably high when compared with the reward they will be getting + BridgeOversizedTallyResult, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// Bridge errors: errors that only belong in inter-client communication ============================================== - /// 0xE0: Requests that cannot be parsed must always get this error as their result. - /// However, this is not a valid result in a Tally transaction, because invalid requests - /// are never included into blocks and therefore never get a Tally in response. - BridgeMalformedRequest, - /// 0xE1: Witnesses exceeds 100 - BridgePoorIncentives, - /// 0xE2: The request is rejected on the grounds that it may cause the submitter to spend or stake an - /// amount of value that is unjustifiably high when compared with the reward they will be getting - BridgeOversizedResult, - /// Unallocated - OtherError0xE3, OtherError0xE4, OtherError0xE5, OtherError0xE6, OtherError0xE7, OtherError0xE8, OtherError0xE9, - OtherError0xEA, OtherError0xEB, OtherError0xEC, OtherError0xED, OtherError0xEE, OtherError0xEF, OtherError0xF0, - OtherError0xF1, OtherError0xF2, OtherError0xF3, OtherError0xF4, OtherError0xF5, OtherError0xF6, OtherError0xF7, - OtherError0xF8, OtherError0xF9, OtherError0xFA, OtherError0xFB, OtherError0xFC, OtherError0xFD, OtherError0xFE, + /// Unallocated ======================================================================================================= + OtherError0xE3, OtherError0xE4, OtherError0xE5, OtherError0xE6, OtherError0xE7, OtherError0xE8, OtherError0xE9, + OtherError0xEA, OtherError0xEB, OtherError0xEC, OtherError0xED, OtherError0xEE, OtherError0xEF, OtherError0xF0, + OtherError0xF1, OtherError0xF2, OtherError0xF3, OtherError0xF4, OtherError0xF5, OtherError0xF6, OtherError0xF7, + OtherError0xF8, OtherError0xF9, OtherError0xFA, OtherError0xFB, OtherError0xFC, OtherError0xFD, OtherError0xFE, + /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /// 0xFF: Some tally error is not intercepted but should + /// 0xFF: Some tally error is not intercepted but it should (0+ args) UnhandledIntercept } From 6917348626ca1f37ce8eeffb33b99001639b00e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 24 Jan 2024 16:47:57 +0100 Subject: [PATCH 088/149] feat(libs): add ResultErrorCodes helper methods --- contracts/libs/Witnet.sol | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 57e496a38..876bbcf47 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -246,6 +246,36 @@ 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.InsufficientQuorum + ); + } + + 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 Radon data request methods that can be used within a Radon Retrieval. enum RadonDataRequestMethods { /* 0 */ Unknown, From bfa56962588dd25de5f68101eed87d02118e23bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 24 Jan 2024 16:49:35 +0100 Subject: [PATCH 089/149] feat(libs): adopt new rules for decoding errored results --- contracts/libs/WitnetErrorsLib.sol | 330 +++++++++++++++-------------- test/TestWitnetErrorsLib.sol | 16 +- 2 files changed, 176 insertions(+), 170 deletions(-) diff --git a/contracts/libs/WitnetErrorsLib.sol b/contracts/libs/WitnetErrorsLib.sol index d32ee65e5..03ef45c69 100644 --- a/contracts/libs/WitnetErrorsLib.sol +++ b/contracts/libs/WitnetErrorsLib.sol @@ -11,8 +11,10 @@ library WitnetErrorsLib { using Witnet for uint8; using Witnet for uint256; + using Witnet for Witnet.ResultErrorCodes; using WitnetCBOR for WitnetCBOR.CBOR; + // ================================================================================================================ // --- Library public methods ------------------------------------------------------------------------------------- @@ -32,18 +34,45 @@ library WitnetErrorsLib { public pure returns (Witnet.ResultError memory) { - if (_status == WitnetV2.ResultStatus.Awaiting) { + if ( + _status == WitnetV2.ResultStatus.Error + || _status == WitnetV2.ResultStatus.Ready + ) { + return resultErrorFromCborBytes(_cborBytes); + } else if ( + _status == WitnetV2.ResultStatus.AwaitingError + || _status == WitnetV2.ResultStatus.AwaitingReady + ) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetRequestBoard: not yet solved" + reason: "WitnetErrorsLib: not yet finalized" }); - } else if (_status == WitnetV2.ResultStatus.Void) { + } if (_status == WitnetV2.ResultStatus.Awaiting) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetRequestBoard: unknown query" + reason: "WitnetErrorsLib: not yet solved" }); } else { - return resultErrorFromCborBytes(_cborBytes); + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitnetErrorsLib: unknown query" + }); + } + } + + function resultErrorCodesFromCborBytes(bytes memory cborBytes) + public pure + returns ( + Witnet.ResultErrorCodes _code, + Witnet.ResultErrorCodes _subcode + ) + { + WitnetCBOR.CBOR[] memory _errors = _errorsFromResult(Witnet.resultFromCborBytes(cborBytes)); + if (_errors.length > 1) { + _code = Witnet.ResultErrorCodes(_errors[0].readUint()); + if (_errors.length > 2) { + _subcode = Witnet.ResultErrorCodes(_errors[1].readUint()); + } } } @@ -92,177 +121,154 @@ library WitnetErrorsLib { if (errors.length < 2) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, - reason: "Unknown error: no error code was found." + reason: "Critical: no error code was found." }); - } - else { + } else { _error.code = Witnet.ResultErrorCodes(errors[0].readUint()); } - // switch on _error.code - if ( - _error.code == Witnet.ResultErrorCodes.SourceScriptNotCBOR - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: invalid CBOR value." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.SourceScriptNotArray - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: CBOR value expected to be an array of calls." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.SourceScriptNotRADON - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: CBOR value expected to be a data request." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.RequestTooManySources - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: too many sources." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.ScriptTooManyCalls - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: too many calls." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.UnsupportedOperator - && errors.length > 3 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Radon: unsupported '", - errors[2].readString(), - "' for input type '", - errors[1].readString(), - "'." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.HTTP - && errors.length > 2 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Retrieval: HTTP/", - errors[1].readUint().toString(), - " error." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.RetrievalTimeout - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Retrieval: timeout." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.Underflow - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Aggregation: math underflow." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.Overflow - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Aggregation: math overflow." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.DivisionByZero - && errors.length > 1 - ) { - _error.reason = string(abi.encodePacked( - "Witnet: Aggregation: division by zero." - )); - } else if ( - _error.code == Witnet.ResultErrorCodes.BridgeMalformedRequest - ) { - _error.reason = "Witnet: Bridge: malformed data request cannot be processed."; - } else if ( - _error.code == Witnet.ResultErrorCodes.BridgePoorIncentives - ) { - _error.reason = "Witnet: Bridge: rejected due to poor witnessing incentives."; - } else if ( - _error.code == Witnet.ResultErrorCodes.BridgeOversizedResult - ) { - _error.reason = "Witnet: Bridge: rejected due to poor bridging incentives."; - } else if ( - _error.code == Witnet.ResultErrorCodes.InsufficientConsensus - && errors.length > 3 - ) { - uint reached = (errors[1].additionalInformation == 25 - ? uint(int(errors[1].readFloat16() / 10 ** 4)) - : uint(int(errors[1].readFloat64() / 10 ** 15)) - ); - uint expected = (errors[2].additionalInformation == 25 - ? uint(int(errors[2].readFloat16() / 10 ** 4)) - : uint(int(errors[2].readFloat64() / 10 ** 15)) - ); - _error.reason = string(abi.encodePacked( - "Witnet: Tally: insufficient consensus: ", - reached.toString(), - "% <= ", - expected.toString(), - "%." - )); + string memory _prefix; + if (_error.code.isCircumstantial()) { + _prefix = "Circumstantial: "; + } else if (_error.code.poorIncentives()) { + _prefix = "Poor incentives: "; + } else if (_error.code.lackOfConsensus()) { + _prefix = "Consensual: "; + } else { + _prefix = "Critical: "; + } + _error.reason = string(abi.encodePacked(_prefix, _stringify(_error.code, errors))); + } + + function _stringify(Witnet.ResultErrorCodes code, WitnetCBOR.CBOR[] memory args) + private pure + returns (string memory) + { + if (code == Witnet.ResultErrorCodes.InsufficientCommits) { + return "insufficient commits."; + } else if ( - _error.code == Witnet.ResultErrorCodes.InsufficientCommits + code == Witnet.ResultErrorCodes.CircumstantialFailure + && args.length > 2 ) { - _error.reason = "Witnet: Tally: insufficient commits."; + return _stringify(args[1].readUint(), args); + + } else if (code == Witnet.ResultErrorCodes.InsufficientMajority) { + return "insufficient majority."; + + } else if (code == Witnet.ResultErrorCodes.InsufficientQuorum) { + return "insufficient quorum."; + + } else if (code == Witnet.ResultErrorCodes.BridgePoorIncentives) { + return "as for the bridge."; + } else if ( - _error.code == Witnet.ResultErrorCodes.TallyExecution - && errors.length > 3 + code == Witnet.ResultErrorCodes.OversizedTallyResult + || code == Witnet.ResultErrorCodes.BridgeOversizedTallyResult ) { - _error.reason = string(abi.encodePacked( - "Witnet: Tally: execution error: ", - errors[2].readString(), - "." - )); + return "oversized result."; + + } else if (code == Witnet.ResultErrorCodes.InconsistentSources) { + return "inconsistent sources."; + } else if ( - _error.code == Witnet.ResultErrorCodes.ArrayIndexOutOfBounds - && errors.length > 2 + code == Witnet.ResultErrorCodes.MalformedResponses + && args.length > 2 ) { - _error.reason = string(abi.encodePacked( - "Witnet: Aggregation: tried to access a value from an array with an index (", - errors[1].readUint().toString(), - ") out of bounds." + return string(abi.encodePacked( + "malformed response: ", + _stringify(args[1].readUint(), args) )); + } else if ( - _error.code == Witnet.ResultErrorCodes.MapKeyNotFound - && errors.length > 2 + code == Witnet.ResultErrorCodes.MalformedDataRequest + || code == Witnet.ResultErrorCodes.BridgeMalformedDataRequest + ) { - _error.reason = string(abi.encodePacked( - "Witnet: Aggregation: tried to access a value from a map with a key (\"", - errors[1].readString(), - "\") that was not found." + if (args.length > 2) { + return string(abi.encodePacked( + "malformed request: ", + _stringify(args[1].readUint(), args) + )); + } else { + return "malformed request."; + } + + } else if (code == Witnet.ResultErrorCodes.UnhandledIntercept) { + if (args.length > 2) { + return string(abi.encodePacked( + "unhandled intercept on tally (+", + (args.length - 2).toString(), + " args)." + )); + } else { + return "unhandled intercept on tally."; + } + + } else { + return string(abi.encodePacked( + "0x", + uint8(code).toHexString() )); - } else if ( - _error.code == Witnet.ResultErrorCodes.NoReveals - ) { - _error.reason = "Witnet: Tally: no reveals."; - } else if ( - _error.code == Witnet.ResultErrorCodes.MalformedReveal - ) { - _error.reason = "Witnet: Tally: malformed reveal."; - } else if ( - _error.code == Witnet.ResultErrorCodes.UnhandledIntercept - ) { - _error.reason = "Witnet: Tally: unhandled intercept."; + } + } + + function _stringify(uint subcode, WitnetCBOR.CBOR[] memory args) + private pure + returns (string memory) + { + Witnet.ResultErrorCodes _code = Witnet.ResultErrorCodes(subcode); + + // circumstantial subcodes: + if (_code == Witnet.ResultErrorCodes.HttpErrors) { + if (args.length > 3) { + return string(abi.encodePacked( + "http/", + args[2].readUint().toString() + )); + } else { + return "unspecific http status code."; + } + + } else if (_code == Witnet.ResultErrorCodes.RetrievalsTimeout) { + return "response timeout."; + + } else if (_code == Witnet.ResultErrorCodes.ArrayIndexOutOfBounds) { + if (args.length > 3) { + return string(abi.encodePacked( + "array index out of bounds: ", + args[2].readUint().toString() + )); + } else { + return "array index out of bounds."; + } + + } else if (_code == Witnet.ResultErrorCodes.MapKeyNotFound) { + if (args.length > 3) { + return string(abi.encodePacked( + "map key not found: ", + args[2].readString() + )); + } else { + return "map key not found."; + } + + } else if (_code == Witnet.ResultErrorCodes.JsonPathNotFound) { + if (args.length > 3) { + return string(abi.encodePacked( + "json path returned no values: ", + args[2].readString() + )); + } else { + return "json path returned no values."; + } + } else { - _error.reason = string(abi.encodePacked( - "Unhandled error: 0x", - Witnet.toHexString(uint8(_error.code)), - errors.length > 2 - ? string(abi.encodePacked(" (", uint(errors.length - 1).toString(), " params).")) - : "." + return string(abi.encodePacked( + "0x", + Witnet.toHexString(uint8(_code)), + args.length > 3 + ? string(abi.encodePacked(" (+", uint(args.length - 3).toString(), " args)")) + : "" )); } } diff --git a/test/TestWitnetErrorsLib.sol b/test/TestWitnetErrorsLib.sol index 486e112d7..a7fd530a3 100644 --- a/test/TestWitnetErrorsLib.sol +++ b/test/TestWitnetErrorsLib.sol @@ -109,13 +109,13 @@ contract TestWitnetErrorsLib { Witnet.ResultError memory error0xff = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118FF"); Assert.equal( uint(error0x50.code), - uint(Witnet.ResultErrorCodes.NoReveals), - "Error code #0x50 should be `Witnet.ResultErrorCodes.NoReveals`" + uint(Witnet.ResultErrorCodes.InsufficientQuorum), + "Error code #0x50 should be `Witnet.ResultErrorCodes.InsufficientQuorum`" ); Assert.equal( uint(error0x51.code), - uint(Witnet.ResultErrorCodes.InsufficientConsensus), - "Error code #0x51 should be `Witnet.ResultErrorCodes.InsufficientConsensus`" + uint(Witnet.ResultErrorCodes.InsufficientMajority), + "Error code #0x51 should be `Witnet.ResultErrorCodes.InsufficientMajority`" ); Assert.equal( uint(error0x52.code), @@ -144,8 +144,8 @@ contract TestWitnetErrorsLib { ); Assert.equal( uint(error0xe0.code), - uint(Witnet.ResultErrorCodes.BridgeMalformedRequest), - "Error code #0xE0 should be `Witnet.ResultErrorCodes.BridgeMalformedRequest`" + uint(Witnet.ResultErrorCodes.BridgeMalformedDataRequest), + "Error code #0xE0 should be `Witnet.ResultErrorCodes.BridgeMalformedDataRequest`" ); Assert.equal( uint(error0xe1.code), @@ -154,8 +154,8 @@ contract TestWitnetErrorsLib { ); Assert.equal( uint(error0xe2.code), - uint(Witnet.ResultErrorCodes.BridgeOversizedResult), - "Error code #0xE2 should be `Witnet.ResultErrorCodes.BridgeOversizedResult`" + uint(Witnet.ResultErrorCodes.BridgeOversizedTallyResult), + "Error code #0xE2 should be `Witnet.ResultErrorCodes.BridgeOversizedTallyResult`" ); Assert.equal( uint(error0xff.code), From db0b3003b013c824dc15b97c9ae037f6067b4d55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 1 Feb 2024 12:47:22 +0100 Subject: [PATCH 090/149] feat: modularize package --- .github/workflows/npm-publish.yml | 22 ++++++++++++++++++++++ index.js | 6 ++++++ package.json | 13 +++++++++++-- truffle-config.js | 9 ++++++--- 4 files changed, 45 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/npm-publish.yml create mode 100644 index.js diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml new file mode 100644 index 000000000..12cb97dc8 --- /dev/null +++ b/.github/workflows/npm-publish.yml @@ -0,0 +1,22 @@ +# This workflow will run tests using node and then publish a package to GitHub Packages when a release is created +# For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages + +name: Publish NPM package + +on: + release: + types: [created] + +jobs: + publish-npm: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + with: + node-version: 18 + registry-url: https://registry.npmjs.org/ + - run: yarn install + - run: yarn publish + env: + NODE_AUTH_TOKEN: ${{SECRETS.NPM_TOKEN}} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100644 index 000000000..ee1c80d51 --- /dev/null +++ b/index.js @@ -0,0 +1,6 @@ +const addresses = require("./migrations/witnet.addresses.json") +const settings = require("./migrations/witnet.settings") +module.exports = { + addresses, + settings +} \ No newline at end of file diff --git a/package.json b/package.json index 794351cb0..4a977900d 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,22 @@ "version": "2.0.1", "description": "Witnet Solidity Bridge contracts for EVM-compatible chains", "main": "", + "type": "commonjs", + "export": { + ".": "./index.js" + }, + "files": [ + "build", + "contracts", + "migrations/witnet.*" + ], "scripts": { "addresses": "node ./scripts/addresses.js 2>&1", "clean": "npm run clean:build && npm run clean:flattened", "clean:build": "node ./scripts/clean.js build", "clean:flattened": "node ./scripts/clean.js flattened", - "compile": "truffle compile --all --network", - "console": "truffle console", + "compile": "npx truffle compile --all --network", + "console": "npx truffle console", "coverage": "solidity-coverage", "flatten": "node ./scripts/flatten.js 2>&1", "flatten:all": "npm run clean && npm run flatten:core && npm run flatten:apps && npm run flatten:libs && npm run flatten:proxy", diff --git a/truffle-config.js b/truffle-config.js index b97a944c2..81283e961 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -13,11 +13,14 @@ if (!settings.networks[realm] || !settings.networks[realm][network]) { process.exit(1) } } -console.info(` + +if (realm !== "default") console.info(` Targetting "${realm.toUpperCase()}" realm -===================${"=".repeat(realm.length)}`) +===================${"=".repeat(realm.length)} +`); + module.exports = { - build_directory: `./build/${realm}/`, + build_directory: `./build/`, contracts_directory: "./contracts/", migrations_directory: "./migrations/scripts/", networks: settings.networks[realm], From 8bf74ff8d114e8604546e780f381bbb4eda396ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 1 Feb 2024 12:47:57 +0100 Subject: [PATCH 091/149] chore: revisit package scripts and dependencies --- package.json | 70 +++++++++++++++++++++++++--------------------------- 1 file changed, 34 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index 4a977900d..47de9c472 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,18 @@ "name": "witnet-solidity-bridge", "version": "2.0.1", "description": "Witnet Solidity Bridge contracts for EVM-compatible chains", - "main": "", + "author": "Witnet Foundation ", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/witnet/witnet-solidity-bridge.git" + }, "type": "commonjs", + "keywords": [ + "bridge", + "witnet", + "ethereum" + ], "export": { ".": "./index.js" }, @@ -34,46 +44,34 @@ "fmt": "npm run fmt:js && npm run fmt:sol", "migrate": "node ./scripts/migrate.js 2>&1", "networks": "node ./scripts/networks.js 2>&1", - "ops:rng:sla": "truffle migrate --migrations_directory ./migrations/ops/rng/sla --network", - "test": "npm run clean && truffle test" - }, - "author": "Witnet Foundation ", - "repository": { - "type": "git", - "url": "https://github.com/witnet/witnet-solidity-bridge.git" - }, - "keywords": [ - "bridge", - "witnet", - "ethereum" - ], - "license": "MIT", - "dependencies": { - "@openzeppelin/contracts": "4.8.0", - "@openzeppelin/contracts-upgradeable": "4.8.0", - "ado-contracts": "1.0.0", - "lodash": "4.17.21" + "ops:rng:sla": "npx truffle migrate --migrations_directory ./migrations/ops/rng/sla --network", + "prepare": "npx truffle compile --all", + "test": "npm run clean && npx truffle test" }, "devDependencies": { + "@openzeppelin/contracts": "^5.0.1", + "@openzeppelin/contracts-upgradeable": "^5.0.1", "@openzeppelin/test-helpers": "~0.5.16", - "chai": "4.3.6", + "ado-contracts": "1.0.0", + "bn.js": "^4.11.0", "custom-error-test-helper": "^1.0.6", - "dotenv": "8.2.0", - "eslint": "~8.31.0", - "eslint-config-standard": "~17.0.0", - "eslint-plugin-import": "~2.26.0", - "eslint-plugin-n": "~15.6.0", - "eslint-plugin-promise": "~6.1.1", + "dotenv": "^16.4.1", + "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", - "eth-gas-reporter": "0.2.25", - "js-sha256": "0.9.0", + "js-sha256": "^0.11.0", + "lodash": "^4.17.21", "nanoassert": "^2.0.0", - "sha3-wasm": "0.0.7", - "solhint": "3.3.7", - "solidity-coverage": "0.7.16", - "truffle": "~5.11.5", - "truffle-assertions": "0.9.2", - "truffle-flattener": "~1.6.0", - "truffle-plugin-verify": "~0.6.2" + "sha3-wasm": "^1.0.0", + "solhint": "^4.1.1", + "truffle": "^5.11.5", + "truffle-assertions": "^0.9.2", + "truffle-flattener": "^1.6.0", + "typescript": "latest", + "web3": "^4.4.0" } } From 862449c5ccdc7940994facbb37609b68f9417f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:12:01 +0100 Subject: [PATCH 092/149] chore: refactor package exports --- .gitignore | 11 +- artifacts/WitnetBytecodes.json | 783 ++ artifacts/WitnetPriceFeeds.json | 1328 +++ artifacts/WitnetRandomness.json | 790 ++ .../abis => artifacts}/WitnetRequest.json | 72 +- artifacts/WitnetRequestBoard.json | 815 ++ artifacts/WitnetRequestFactory.json | 113 + .../WitnetRequestTemplate.json | 72 +- artifacts/index.js | 8 + index.js | 6 - migrations/abis/WitnetBytecodes.json | 954 -- migrations/abis/WitnetPriceFeeds.json | 1359 --- migrations/abis/WitnetRandomness.json | 649 -- migrations/abis/WitnetRequestBoard.json | 1088 -- migrations/abis/WitnetRequestFactory.json | 81 - migrations/scripts/1_deployer.js | 2 +- migrations/scripts/2_libs.js | 14 +- migrations/scripts/3_core.js | 140 +- migrations/scripts/4_proxies.js | 51 +- migrations/scripts/5_apps.js | 22 +- migrations/witnet.settings.js | 852 -- package.json | 5 +- pnpm-lock.yaml | 8921 +++++++++++++++++ settings/artifacts.js | 39 + settings/index.js | 43 + settings/networks.js | 372 + settings/solidity.js | 14 + settings/specs.js | 193 + src/index.js | 5 + {scripts => src}/utils/index.js | 67 +- {scripts => src}/utils/traceHeader.js | 0 {scripts => src}/utils/traceTx.js | 0 truffle-config.js | 37 +- yarn.lock | 8651 ++++++++++++++++ 34 files changed, 22303 insertions(+), 5254 deletions(-) create mode 100644 artifacts/WitnetBytecodes.json create mode 100644 artifacts/WitnetPriceFeeds.json create mode 100644 artifacts/WitnetRandomness.json rename {migrations/abis => artifacts}/WitnetRequest.json (85%) create mode 100644 artifacts/WitnetRequestBoard.json create mode 100644 artifacts/WitnetRequestFactory.json rename {migrations/abis => artifacts}/WitnetRequestTemplate.json (83%) create mode 100644 artifacts/index.js delete mode 100644 index.js delete mode 100644 migrations/abis/WitnetBytecodes.json delete mode 100644 migrations/abis/WitnetPriceFeeds.json delete mode 100644 migrations/abis/WitnetRandomness.json delete mode 100644 migrations/abis/WitnetRequestBoard.json delete mode 100644 migrations/abis/WitnetRequestFactory.json delete mode 100644 migrations/witnet.settings.js create mode 100644 pnpm-lock.yaml create mode 100644 settings/artifacts.js create mode 100644 settings/index.js create mode 100644 settings/networks.js create mode 100644 settings/solidity.js create mode 100644 settings/specs.js create mode 100644 src/index.js rename {scripts => src}/utils/index.js (55%) rename {scripts => src}/utils/traceHeader.js (100%) rename {scripts => src}/utils/traceTx.js (100%) create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index 777d959ea..c3e32aa7a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,12 @@ node_modules/ build/ -coverage/ -coverage.json -flattened/** +cache/ +flattened/ +**/*-*.json .env .idea .vscode -yarn.lock -yarn-error.log -package-lock.json - *.tmp +.old diff --git a/artifacts/WitnetBytecodes.json b/artifacts/WitnetBytecodes.json new file mode 100644 index 000000000..1632a7434 --- /dev/null +++ b/artifacts/WitnetBytecodes.json @@ -0,0 +1,783 @@ +{ + "contractName": "WitnetBytecodes", + "sourceName": "contracts/WitnetBytecodes.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonReducer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonRequest", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "UnknownRadonRetrieval", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "NewDataProvider", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadHash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadonReducerHash", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "NewRadonRetrievalHash", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "bytecodeOf", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "hashOf", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "lookupDataProvider", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "authority", + "type": "string" + } + ], + "name": "lookupDataProviderIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "offset", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "lookupDataProviderSources", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRAD", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonRetrieval[]", + "name": "retrieve", + "type": "tuple[]" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "aggregate", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "tally", + "type": "tuple" + } + ], + "internalType": "struct Witnet.RadonRAD", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonReducer", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestAggregator", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestResultDataType", + "outputs": [ + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestResultMaxSize", + "outputs": [ + { + "internalType": "uint16", + "name": "", + "type": "uint16" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestSources", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestSourcesCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "lookupRadonRequestTally", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrieval", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonRetrieval", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrievalArgsCount", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "name": "lookupRadonRetrievalResultDataType", + "outputs": [ + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalDataProviders", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "enum Witnet.RadonReducerOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "components": [ + { + "internalType": "enum Witnet.RadonFilterOpcodes", + "name": "opcode", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "args", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonFilter[]", + "name": "filters", + "type": "tuple[]" + } + ], + "internalType": "struct Witnet.RadonReducer", + "name": "reducer", + "type": "tuple" + } + ], + "name": "verifyRadonReducer", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "sources", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "aggregator", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tally", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resultMaxSize", + "type": "uint16" + }, + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "verifyRadonRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum Witnet.RadonDataRequestMethods", + "name": "requestMethod", + "type": "uint8" + }, + { + "internalType": "string", + "name": "requestURL", + "type": "string" + }, + { + "internalType": "string", + "name": "requestBody", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "requestHeaders", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "requestRadonScript", + "type": "bytes" + } + ], + "name": "verifyRadonRetrieval", + "outputs": [ + { + "internalType": "bytes32", + "name": "hash", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x" +} \ No newline at end of file diff --git a/artifacts/WitnetPriceFeeds.json b/artifacts/WitnetPriceFeeds.json new file mode 100644 index 000000000..9261d78d4 --- /dev/null +++ b/artifacts/WitnetPriceFeeds.json @@ -0,0 +1,1328 @@ +{ + "contractName": "WitnetPriceFeeds", + "sourceName": "contracts/apps/WitnetPriceFeeds.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, + { + "internalType": "contract WitnetRequestBoard", + "name": "_wrb", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "EmptyBuffer", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "range", + "type": "uint256" + } + ], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidLengthEncoding", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "read", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "UnexpectedMajorType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "unexpected", + "type": "uint256" + } + ], + "name": "UnsupportedMajorType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "DeletedFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "SettledFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "indexed": false, + "internalType": "address", + "name": "solver", + "type": "address" + } + ], + "name": "SettledFeedSolver", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + } + ], + "name": "SettledRadonSLA", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "slaHash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "UpdatingFeed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "UpdatingFeedReward", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "solver", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "codehash", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "WitnetPriceSolverDeployed", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "dataType", + "outputs": [ + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "prefix", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "hash", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupCaption", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "supportedFeeds", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "_ids", + "type": "bytes4[]" + }, + { + "internalType": "string[]", + "name": "_captions", + "type": "string[]" + }, + { + "internalType": "bytes32[]", + "name": "_solvers", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "supportsCaption", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalFeeds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "defaultRadonSLA", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_evmGasPrice", + "type": "uint256" + } + ], + "name": "estimateUpdateBaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestResponse", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "fromFinality", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestResult", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateQueryId", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResponse", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "fromFinality", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResultError", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.ResultErrorCodes", + "name": "code", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "internalType": "struct Witnet.ResultError", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestUpdateResultStatus", + "outputs": [ + { + "internalType": "enum WitnetV2.ResultStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupBytecode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupRadHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupRetrievals", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "argsCount", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataRequestMethods", + "name": "method", + "type": "uint8" + }, + { + "internalType": "enum Witnet.RadonDataTypes", + "name": "resultDataType", + "type": "uint8" + }, + { + "internalType": "string", + "name": "url", + "type": "string" + }, + { + "internalType": "string", + "name": "body", + "type": "string" + }, + { + "internalType": "string[2][]", + "name": "headers", + "type": "string[2][]" + }, + { + "internalType": "bytes", + "name": "script", + "type": "bytes" + } + ], + "internalType": "struct Witnet.RadonRetrieval[]", + "name": "_retrievals", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "requestUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "updateSLA", + "type": "tuple" + } + ], + "name": "requestUpdate", + "outputs": [ + { + "internalType": "uint256", + "name": "_usedFunds", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + } + ], + "name": "deleteFeed", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "defaultSLA", + "type": "tuple" + } + ], + "name": "settleDefaultRadonSLA", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "contract WitnetRequest", + "name": "request", + "type": "address" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "contract WitnetRequestTemplate", + "name": "template", + "type": "address" + }, + { + "internalType": "string[][]", + "name": "args", + "type": "string[][]" + } + ], + "name": "settleFeedRequest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "caption", + "type": "string" + }, + { + "internalType": "address", + "name": "solver", + "type": "address" + }, + { + "internalType": "string[]", + "name": "deps", + "type": "string[]" + } + ], + "name": "settleFeedSolver", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupDecimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "lookupPriceSolver", + "outputs": [ + { + "internalType": "contract IWitnetPriceSolver", + "name": "_solverAddress", + "type": "address" + }, + { + "internalType": "string[]", + "name": "_solverDeps", + "type": "string[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "feedId", + "type": "bytes4" + } + ], + "name": "latestPrice", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "enum WitnetV2.ResultStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct IWitnetPriceSolver.Price", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4[]", + "name": "feedIds", + "type": "bytes4[]" + } + ], + "name": "latestPrices", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "enum WitnetV2.ResultStatus", + "name": "status", + "type": "uint8" + } + ], + "internalType": "struct IWitnetPriceSolver.Price[]", + "name": "_prices", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initcode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "deployPriceSolver", + "outputs": [ + { + "internalType": "address", + "name": "_solver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "initcode", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "constructorParams", + "type": "bytes" + } + ], + "name": "determinePriceSolverAddress", + "outputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "feedId", + "type": "bytes32" + } + ], + "name": "valueFor", + "outputs": [ + { + "internalType": "int256", + "name": "_value", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_status", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x61010060405263346916ef60e11b60c0523480156200001d57600080fd5b506040516200546438038062005464833981016040819052620000409162000350565b60408051808201909152600681526550726963652d60d01b6020820152600490836001600160a01b0381166200009157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200009c816200021d565b50816013811115620000b257620000b26200038f565b6080816013811115620000c957620000c96200038f565b905250620000d7816200023b565b60a081815250505050636461cc6360e01b6001600160e01b031916816001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001579190620003a5565b6001600160e01b03191614620001c45760405162461bcd60e51b815260206004820152602b60248201527f5769746e6574507269636546656564733a20756e636f6d706c69616e7420726560448201526a1c5d595cdd08189bd85c9960aa1b606482015260840162000088565b6001600160a01b031660e0525060408051808201909152600a8152633b9aca00602090910152633b9aca00600560f91b017fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ff5562000404565b600180546001600160a01b0319169055620002388162000250565b50565b60006200024a826020620002a0565b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208260ff161115620002b957620002b9620003d8565b60008260ff16845111620002cf578351620002d4565b8260ff165b905060005b81811015620003325780600802858281518110620002fb57620002fb620003ee565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c9290921791600101620002d9565b505092915050565b6001600160a01b03811681146200023857600080fd5b600080604083850312156200036457600080fd5b825162000371816200033a565b602084015190925062000384816200033a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620003b857600080fd5b81516001600160e01b031981168114620003d157600080fd5b9392505050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051614fb6620004ae600039600081816104660152818161129b0152818161134b0152818161148c01528181611a1d01528181611cef01528181612248015281816122880152818161294c015281816129d001528181612adf01528181612b7c01528181612c1101528181612df50152612ff00152600061074101526000818161145c01526126df01526000818161052c01526115160152614fb66000f3fe6080604052600436106102515760003560e01c8063a55b471c11610139578063d3471e34116100b6578063f2fde38b1161007a578063f2fde38b146108f0578063f78eea8314610910578063f9f34bb61461094b578063fae91a5114610978578063ff24fb4f14610998578063ff75890f146109b857610251565b8063d3471e341461084c578063d6a3614f1461086c578063e13c11c41461088e578063e30c3978146108bb578063ef1dff2b146108d057610251565b8063b411ee94116100fd578063b411ee941461077c578063c064d372146107a2578063c2f2a2ed146107c2578063c3d98ea8146107ef578063c5010d171461081c57610251565b8063a55b471c146106af578063a80c5bc0146106cf578063abc86c6e146106fc578063ac82c6081461070f578063adb7c3f71461072f57610251565b80636ab221f8116101d25780637b103999116101965780637b103999146105ee57806384292f071461060357806386ac03e01461062357806389a87b16146106435780638da5cb5b14610671578063909375801461068f57610251565b80636ab221f81461055b5780636d1178e51461058d578063715018a6146105af57806375dadb32146105c457806379ba5097146105d957610251565b806346d1d21a1161021957806346d1d21a1461045457806348765643146104a057806349492ef1146104cd5780635be93984146104fa5780636175ff001461051a57610251565b80630306732e1461038b57806303f3813d146103b8578063384ac938146103d85780633e088e121461040657806340eb7a0714610427575b34801561025d57600080fd5b506000356001600160e01b03191663e0d20f7360e01b14801561027f57503330145b156103375760006102a660206102953684613785565b6001600160c01b031916901b6109d8565b600601546001600160a01b03169050806103125760405162461bcd60e51b815260206004820152602260248201527f5769746e6574507269636546656564733a20756e736574746c656420736f6c7660448201526132b960f11b60648201526084015b60405180910390fd5b60405136600082376000803683855af43d806000843e818015610333578184f35b8184fd5b60405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a206e6f7420696d706c656d656e74656044820152601960fa1b6064820152608401610309565b005b34801561039757600080fd5b506103a0610a12565b6040516103af9392919061385d565b60405180910390f35b3480156103c457600080fd5b506103896103d3366004613998565b610c71565b3480156103e457600080fd5b506103f86103f3366004613a34565b61105d565b6040516103af929190613a4f565b610419610414366004613a34565b61112f565b6040519081526020016103af565b34801561043357600080fd5b50610447610442366004613a34565b61118d565b6040516103af9190613a7b565b34801561046057600080fd5b506104887f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103af565b3480156104ac57600080fd5b506104c06104bb366004613a34565b611276565b6040516103af9190613a8e565b3480156104d957600080fd5b506104ed6104e8366004613a34565b611334565b6040516103af9190613add565b34801561050657600080fd5b50610419610515366004613a34565b6113e4565b34801561052657600080fd5b5061054e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516103af9190613b28565b34801561056757600080fd5b5061057b610576366004613a34565b6113f9565b60405160ff90911681526020016103af565b34801561059957600080fd5b506105a2611411565b6040516103af9190613b36565b3480156105bb57600080fd5b50610389611441565b3480156105d057600080fd5b50610447611455565b3480156105e557600080fd5b50610389611480565b3480156105fa57600080fd5b50610488611488565b34801561060f57600080fd5b5061038961061e366004613b59565b61150c565b34801561062f57600080fd5b5061038961063e366004613ba4565b6117c7565b34801561064f57600080fd5b5061066361065e366004613a34565b611a04565b6040516103af929190613be5565b34801561067d57600080fd5b506000546001600160a01b0316610488565b34801561069b57600080fd5b506104196106aa366004613a34565b611abb565b3480156106bb57600080fd5b506104886106ca366004613c0f565b611ad0565b3480156106db57600080fd5b506106ef6106ea366004613a34565b611bb3565b6040516103af9190613c8a565b61041961070a366004613c98565b611bc6565b34801561071b57600080fd5b5061038961072a366004613cd7565b611c5b565b34801561073b57600080fd5b506107637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016103af565b34801561078857600080fd5b50610763610797366004613e21565b805160209091012090565b3480156107ae57600080fd5b506104196107bd366004613ea6565b611ccf565b3480156107ce57600080fd5b506107e26107dd366004613a34565b611d62565b6040516103af9190613f55565b3480156107fb57600080fd5b5061080f61080a366004613a34565b611f43565b6040516103af9190614065565b34801561082857600080fd5b5061083c610837366004613ba4565b612121565b60405190151581526020016103af565b34801561085857600080fd5b506104c0610867366004613a34565b612223565b34801561087857600080fd5b50600080516020614f6183398151915254610419565b34801561089a57600080fd5b506108ae6108a9366004613a34565b61227e565b6040516103af9190614073565b3480156108c757600080fd5b50610488612321565b3480156108dc57600080fd5b506104476108eb366004613a34565b612335565b3480156108fc57600080fd5b5061038961090b366004614114565b6123d0565b34801561091c57600080fd5b5061093061092b366004613ea6565b6123e4565b604080519384526020840192909252908201526060016103af565b34801561095757600080fd5b5061096b610966366004614131565b61249e565b6040516103af9190614166565b34801561098457600080fd5b506103896109933660046141d8565b612555565b3480156109a457600080fd5b506103896109b3366004613998565b612592565b3480156109c457600080fd5b506104886109d3366004613c0f565b6125f3565b6001600160e01b03191660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b600080516020614f6183398151915280546040805160208084028201810190925282815260609384938493830182828015610a9957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610a5b5790505b5050505050925082516001600160401b03811115610ab957610ab9613d2d565b604051908082528060200260200182016040528015610aec57816020015b6060815260200190600190039081610ad75790505b50915082516001600160401b03811115610b0857610b08613d2d565b604051908082528060200260200182016040528015610b31578160200160208202803683370190505b50905060005b8351811015610c6b576000610b64858381518110610b5757610b5761421d565b60200260200101516109d8565b9050806000018054610b7590614233565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190614233565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050848381518110610c0557610c0561421d565b602090810291909101015260068101546001600160a01b031615610c3f57600681015460601b6bffffffffffffffffffffffff1916610c45565b80600501545b838381518110610c5757610c5761421d565b602090810291909101015250600101610b37565b50909192565b610c79612680565b6001600160a01b038316610cdb5760405162461bcd60e51b815260206004820152602360248201527f5769746e6574507269636546656564733a206e6f20736f6c766572206164647260448201526265737360e81b6064820152608401610309565b6000610d1c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000610d29826109d8565b90508060020154600003610df95780610d438789836142b7565b50610d4e87876126ad565b60018201805460ff191660ff92909216919091179055600080516020614f41833981519152600190810154610d829161438c565b60028201556006810180546001600160a01b0319166001600160a01b038716179055600080516020614f418339815191526001908101805491820181556000908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610e35565b60068101546001600160a01b03868116911614610e3557600060058201556006810180546001600160a01b0319166001600160a01b0387161790555b600080866001600160a01b031663e6f8715860e01b858888604051602401610e5f93929190614451565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e9d9190614474565b600060405180830381855af49150503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b606091505b509150915081610f375760048101905080806020019051810190610f0191906144df565b604051602001610f119190614513565b60408051601f198184030181529082905262461bcd60e51b825261030991600401613a7b565b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b179052905160009182913091610f8e91614474565b600060405180830381855afa9150503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b5091509150816110025760048101905080806020019051810190610ff291906144df565b604051602001610f119190614576565b5050816001600160e01b031916336001600160a01b03167ffa02fc3a72fec2326e6703c83ff273b153110906b8bdb19d198b03ea7a3e404f89898960405161104c939291906145c9565b60405180910390a350505050505050565b6000606061106a836109d8565b600601546001600160a01b03169150600061108484612793565b905080516001600160401b0381111561109f5761109f613d2d565b6040519080825280602002602001820160405280156110d257816020015b60608152602001906001900390816110bd5790505b50915060005b8151811015611128576111038282815181106110f6576110f661421d565b6020026020010151612335565b8382815181106111155761111561421d565b60209081029190910101526001016110d8565b5050915091565b600061118782611182600080516020614f418339815191525b546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b61287d565b92915050565b6060600061119a836109d8565b60058101549091506000036111f15760405162461bcd60e51b815260206004820152601d60248201527f5769746e6574507269636546656564733a206e6f2052414420686173680000006044820152606401610309565b6111f9611488565b6001600160a01b0316632ebf5d5c82600501546040518263ffffffff1660e01b815260040161122a91815260200190565b600060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126f91908101906144df565b9392505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d184612dc4565b6040518263ffffffff1660e01b81526004016112ef91815260200190565b600060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118791908101906145f5565b6040805180820190915260008152606060208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a77fc1a4611381846113e4565b6040518263ffffffff1660e01b815260040161139f91815260200190565b600060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614683565b60006113ef826109d8565b6004015492915050565b6000611404826109d8565b6001015460ff1692915050565b604080518082019091526000808252602082015261143c600080516020614f41833981519152611148565b905090565b611449612680565b6114536000612e9a565b565b606061143c7f0000000000000000000000000000000000000000000000000000000000000000612eb3565b611453612f57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c919061470a565b611514612680565b7f0000000000000000000000000000000000000000000000000000000000000000601381111561154657611546613ac7565b61154e611488565b6001600160a01b0316634c729104836040518263ffffffff1660e01b815260040161157b91815260200190565b602060405180830381865afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bc9190614736565b60138111156115cd576115cd613ac7565b146116295760405162461bcd60e51b815260206004820152602660248201527f5769746e6574507269636546656564733a2062616420726573756c742064617460448201526561207479706560d01b6064820152608401610309565b600061166a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000611677826109d8565b9050806002015460000361174b57806116918587836142b7565b5061169c85856126ad565b60018201805460ff191660ff92909216919091179055600080516020614f418339815191526001908101546116d09161438c565b600282015560058101839055600080516020614f6183398151915280546001810182556000919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055611770565b8281600501541461177057600581018390556006810180546001600160a01b03191690555b816001600160e01b031916336001600160a01b03167f2045f236d366b45bfe85554add87377b7266b5c509a8039f567ce9c9c1e302888787876040516117b893929190614751565b60405180910390a35050505050565b6117cf612680565b600061181083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b9050600080516020614f61833981519152600061182c836109d8565b600281015490915060008190036118855760405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b8254600090849061189890600190614775565b815481106118a8576118a861421d565b6000918252602090912060088204015460079091166004026101000a900460e01b905080846118d8600185614775565b815481106118e8576118e861421d565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555081611922826109d8565b600201556001600160e01b0319851660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602052604081209061196982826136ab565b5060018101805460ff191690556000600282018190556003820181905560048201819055600582018190556006820180546001600160a01b031916905560078201819055600890910155506040516001600160e01b031985169033907fe43fb0f08a34bcdce6df0e4f5fc795d0016c6fe3c7ace31aa463c868ad9cd5d2906119f4908a908a90614788565b60405180910390a3505050505050565b60408051808201909152600080825260208201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630aa4112a611a53856113e4565b6040518263ffffffff1660e01b8152600401611a7191815260200190565b606060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906147b2565b91509150915091565b6000611ac6826109d8565b6005015492915050565b6000611ada612680565b604051632956d1c760e21b815273__WitnetPriceFeedsLib___________________9063a55b471c90611b17908890889088908890600401614817565b602060405180830381865af4158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b58919061470a565b9050336001600160a01b03167fc8b3a4be5c8e12bed9e0df82e21ff2e36e5d49cc5daa1c75be478faf0a7415f482836001600160a01b03163f8686604051611ba39493929190614849565b60405180910390a2949350505050565b6000611187611bc1836113e4565b612fd2565b6000611bf2611bd3611411565b611be2368590038501856141d8565b9051905160ff9182169116101590565b611c485760405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a20756e7365637572652075706461746044820152606560f81b6064820152608401610309565b61126f83611182368590038501856141d8565b611c63612680565b611cca8383836001600160a01b0316631eef90526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190614871565b505050565b604051630f7b104360e31b815260048101829052602060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614871565b60606000611d6e611488565b6001600160a01b031663a83e942c611d8585611abb565b6040518263ffffffff1660e01b8152600401611da391815260200190565b600060405180830381865afa158015611dc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de891908101906148ad565b905080516001600160401b03811115611e0357611e03613d2d565b604051908082528060200260200182016040528015611e7557816020015b611e626040805160e0810190915260008082526020820190815260200160008152602001606081526020016060815260200160608152602001606081525090565b815260200190600190039081611e215790505b50915060005b8251811015611f3c57611e8c611488565b6001600160a01b0316639dd48757838381518110611eac57611eac61421d565b60200260200101516040518263ffffffff1660e01b8152600401611ed291815260200190565b600060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f179190810190614a44565b838281518110611f2957611f2961421d565b6020908102919091010152600101611e7b565b5050919050565b611f4b6136e5565b6000611f5683612dc4565b90508015611fce576000611f6984611276565b90506000611f7a8260600151613070565b90506040518060800160405280611f908361308e565b81526020018360200151815260200183604001518152602001611fb287611bb3565b6005811115611fc357611fc3613ac7565b905295945050505050565b6000611fd9846109d8565b600601546001600160a01b0316905080156120d557604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290516000918291309161204391614474565b600060405180830381855afa9150503d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b5091509150816120b757600481019050808060200190518101906120a791906144df565b604051602001610f119190614b4f565b808060200190518101906120cb9190614b98565b9695505050505050565b604051806080016040528060008152602001600081526020016000801b815260200161210086611bb3565b600581111561211157612111613ac7565b9052949350505050565b50919050565b60008061216384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506001600160e01b0319811661221061217c836109d8565b805461218790614233565b80601f01602080910402602001604051908101604052809291908181526020018280546121b390614233565b80156122005780601f106121d557610100808354040283529160200191612200565b820191906000526020600020905b8154815290600101906020018083116121e357829003601f168201915b5050505050805160209091012090565b6001600160e01b03191614949350505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d1846113e4565b61228661370d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166359209b396122be84612dc4565b6040518263ffffffff1660e01b81526004016122dc91815260200190565b600060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614be6565b600061143c6001546001600160a01b031690565b6060612340826109d8565b805461234b90614233565b80601f016020809104026020016040519081016040528092919081815260200182805461237790614233565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b50505050509050919050565b6123d8612680565b6123e18161310a565b50565b6000806000806123f385611f43565b805160208201519192509060028360600151600581111561241657612416613ac7565b146124885760018360600151600581111561243357612433613ac7565b1480612454575060048360600151600581111561245257612452613ac7565b145b80612474575060058360600151600581111561247257612472613ac7565b145b6124805761019061248b565b61019461248b565b60c85b919550935061ffff169150509193909250565b6060816001600160401b038111156124b8576124b8613d2d565b6040519080825280602002602001820160405280156124f157816020015b6124de6136e5565b8152602001906001900390816124d65790505b50905060005b8281101561254e576125298484838181106125145761251461421d565b905060200201602081019061080a9190613a34565b82828151811061253b5761253b61421d565b60209081029190910101526001016124f7565b5092915050565b61255d612680565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600080516020614f4183398151915255565b61259a612680565b6125ec8585856001600160a01b031663bf7a0bd386866040518363ffffffff1660e01b81526004016125cd929190614d2a565b6020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b5050505050565b6040516001628a76f160e01b0319815260009073__WitnetPriceFeedsLib___________________9063ff75890f90612636908890889088908890600401614817565b602060405180830381865af4158015612653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612677919061470a565b95945050505050565b6000546001600160a01b031633146114535760405163118cdaa760e01b8152336004820152602401610309565b60405163e78d44d960e01b815260009073__WitnetPriceFeedsLib___________________9063e78d44d99061270b907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614dba565b602060405180830381865af4925050508015612744575060408051601f3d908101601f1916820190925261274191810190614dd4565b60015b61278c57612750614df1565b806308c379a0036127805750612764614e0d565b8061276f5750612782565b80604051602001610f119190614b4f565b505b3d6000803e3d6000fd5b9050611187565b6001600160e01b0319811660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602090815260409182902060089081015483518281526101208101909452606093909290919082016101008036833701905050915060005b600881101561287557818382815181106128185761281861421d565b60200260200101906001600160e01b03191690816001600160e01b0319168152505082818151811061284c5761284c61421d565b60209081029190910101516001600160e01b0319161561287557602082901b91506001016127fc565b825250919050565b600080612889846109d8565b600581015490915015612d0a5761289f3a611ccf565b9150813410156128ff5760405162461bcd60e51b815260206004820152602560248201527f5769746e6574507269636546656564733a20696e73756666696369656e742072604482015264195dd85c9960da1b6064820152608401610309565b6004810154600061290f82612fd2565b9050600181600581111561292557612925613ac7565b03612aa0576040516247405160e11b81526004810183905260009085906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690628e80a290602401602060405180830381865afa158015612992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b69190614871565b6129c09190614e96565b90506000811315612a95578094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636064d6fd86856040518363ffffffff1660e01b8152600401612a1d91815260200190565b6000604051808303818588803b158015612a3657600080fd5b505af1158015612a4a573d6000803e3d6000fd5b50506040518881526001600160e01b03198b1693503392507f1b90a8aeedda2b8b0d437e329033c6937be332644e1657d02369da92cd14197c915060200160405180910390a3612a9a565b600094505b50612d03565b6002816005811115612ab457612ab4613ac7565b03612b6657600383015415612b5a57600383015460405163045bf42f60e11b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1158015612b30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b5891908101906145f5565b505b60038301829055612bf5565b60405163045bf42f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1925050508015612bee57506040513d6000823e601f3d908101601f19168201604052612beb91908101906145f5565b60015b15612bf557505b6005830154604051631ee15bd160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633dc2b7a2918791612c48918a90600401613be5565b60206040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190614871565b6004840181905591506001600160e01b03198616337fa4c90c11eb5dd52e88b6a7c160bf96d964ad12d852a0b515f9585013d833540a612ceb88602081015190516001600160f81b031960f89190911b166001600160401b039091161790565b60408051918252602082018990520160405180910390a35b5050612d7e565b60068101546001600160a01b031615612d3657612d2f612d2985612793565b8461313c565b9150612d7e565b60405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b3482101561254e57336108fc612d948434614775565b6040518115909202916000818181858888f19350505050158015612dbc573d6000803e3d6000fd5b505092915050565b600080612dd0836113e4565b9050600081118015612e7b57506002604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e689190614eb6565b6005811115612e7957612e79613ac7565b145b15612e865792915050565b612e8f836109d8565b600301549392505050565b600180546001600160a01b03191690556123e1816131f9565b60606000612ec083613249565b6001600160401b03811115612ed757612ed7613d2d565b6040519080825280601f01601f191660200182016040528015612f01576020820181803683370190505b50905060005b815181101561254e57838160208110612f2257612f2261421d565b1a60f81b828281518110612f3857612f3861421d565b60200101906001600160f81b031916908160001a905350600101612f07565b3380612f61612321565b6001600160a01b031614612fc95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610309565b6123e181612e9a565b6000811561306357604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa15801561303f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614eb6565b506002919050565b919050565b61307861370d565b600061308383613282565b905061126f816132a7565b60008180600001516130fd5760405162461bcd60e51b815260206004820152603260248201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260448201527137b69032b93937b932b2103932b9bab63a1760711b6064820152608401610309565b61126f83602001516132db565b613112612680565b6001600160a01b038116612fc957604051631e4fbdf760e01b815260006004820152602401610309565b60008083513461314c9190614ed1565b905060005b8451811015612dbc57306001600160a01b031663abc86c6e8387848151811061317c5761317c61421d565b6020026020010151876040518463ffffffff1660e01b81526004016131a2929190614ef3565b60206040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e59190614871565b6131ef908461438c565b9250600101613151565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b602081101561306b578181602081106132675761326761421d565b1a60f81b6001600160f81b0319161561306b5760010161324c565b61328a613725565b604080518082019091528281526000602082015261126f8161333e565b6132af61370d565b5060a0810151604080518082019091526001600160401b03909116602714158152602081019190915290565b60008160008060ff16826040015160ff161461331b57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610309565b61332d8460000151856060015161345e565b6001600160401b0316949350505050565b613346613725565b815151829060000361336b576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b80156133ee5761338b8961351f565b95508161339781614f27565b6007600589901c169650601f8816955092505060051985016133e65760208901516133c28a8661345e565b9350808a602001516133d49190614775565b6133de908461438c565b92505061337c565b50600061337c565b600760ff861611156134185760405163bd2ac87960e01b815260ff86166004820152602401610309565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613476575060ff8116611187565b8160ff166018036134945761348a8361351f565b60ff169050611187565b8160ff166019036134b3576134a883613581565b61ffff169050611187565b8160ff16601a036134d4576134c7836135ed565b63ffffffff169050611187565b8160ff16601b036134e85761278c8361364c565b8160ff16601f0361350157506001600160401b03611187565b604051636d785b1360e01b815260ff83166004820152602401610309565b6000816020015182600001515180821115613557576040516363a056dd60e01b81526004810183905260248101829052604401610309565b835160208501805180830160010151955090819061357482614f27565b8152505050505050919050565b600081602001516002613594919061438c565b825151808211156135c2576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516002818401810151965090916135e0828461438c565b9052509395945050505050565b600081602001516004613600919061438c565b8251518082111561362e576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516004818401810151965090916135e0828461438c565b60008160200151600861365f919061438c565b8251518082111561368d576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516008818401810151965090916135e0828461438c565b5080546136b790614233565b6000825580601f106136c7575050565b601f0160209004906000526020600020908101906123e1919061376c565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806000151581526020016137085b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613781576000815560010161376d565b5090565b6001600160c01b03198135818116916008851015612dbc5760089490940360031b84901b1690921692915050565b60005b838110156137ce5781810151838201526020016137b6565b50506000910152565b600081518084526137ef8160208601602086016137b3565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561385057601f1986840301895261383e8383516137d7565b98840198925090830190600101613822565b5090979650505050505050565b606080825284519082018190526000906020906080840190828801845b828110156138a05781516001600160e01b0319168452928401929084019060010161387a565b505050838103828501526138b48187613803565b8481036040860152855180825283870192509083019060005b818110156138e9578351835292840192918401916001016138cd565b509098975050505050505050565b60008083601f84011261390957600080fd5b5081356001600160401b0381111561392057600080fd5b60208301915083602082850101111561393857600080fd5b9250929050565b6001600160a01b03811681146123e157600080fd5b60008083601f84011261396657600080fd5b5081356001600160401b0381111561397d57600080fd5b6020830191508360208260051b850101111561393857600080fd5b6000806000806000606086880312156139b057600080fd5b85356001600160401b03808211156139c757600080fd5b6139d389838a016138f7565b9097509550602088013591506139e88261393f565b909350604087013590808211156139fe57600080fd5b50613a0b88828901613954565b969995985093965092949392505050565b80356001600160e01b03198116811461306b57600080fd5b600060208284031215613a4657600080fd5b61126f82613a1c565b6001600160a01b0383168152604060208201819052600090613a7390830184613803565b949350505050565b60208152600061126f60208301846137d7565b6020815281516020820152602082015160408201526040820151606082015260006060830151608080840152613a7360a08401826137d7565b634e487b7160e01b600052602160045260246000fd5b602081526000825160ff8110613af557613af5613ac7565b806020840152506020830151604080840152613a7360608401826137d7565b60148110613b2457613b24613ac7565b9052565b602081016111878284613b14565b815160ff1681526020808301516001600160401b03169082015260408101611187565b600080600060408486031215613b6e57600080fd5b83356001600160401b03811115613b8457600080fd5b613b90868287016138f7565b909790965060209590950135949350505050565b60008060208385031215613bb757600080fd5b82356001600160401b03811115613bcd57600080fd5b613bd9858286016138f7565b90969095509350505050565b8281526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b60008060008060408587031215613c2557600080fd5b84356001600160401b0380821115613c3c57600080fd5b613c48888389016138f7565b90965094506020870135915080821115613c6157600080fd5b50613c6e878288016138f7565b95989497509550505050565b60068110613b2457613b24613ac7565b602081016111878284613c7a565b6000808284036060811215613cac57600080fd5b613cb584613a1c565b92506040601f1982011215613cc957600080fd5b506020830190509250929050565b600080600060408486031215613cec57600080fd5b83356001600160401b03811115613d0257600080fd5b613d0e868287016138f7565b9094509250506020840135613d228161393f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604081018181106001600160401b0382111715613d6257613d62613d2d565b60405250565b608081018181106001600160401b0382111715613d6257613d62613d2d565b60c081018181106001600160401b0382111715613d6257613d62613d2d565b601f8201601f191681016001600160401b0381118282101715613dcb57613dcb613d2d565b6040525050565b60405160e081016001600160401b0381118282101715613df457613df4613d2d565b60405290565b60006001600160401b03821115613e1357613e13613d2d565b50601f01601f191660200190565b600060208284031215613e3357600080fd5b81356001600160401b03811115613e4957600080fd5b8201601f81018413613e5a57600080fd5b8035613e6581613dfa565b604051613e728282613da6565b828152866020848601011115613e8757600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208284031215613eb857600080fd5b5035919050565b60058110613b2457613b24613ac7565b600082825180855260208086019550808260051b8401018186016000805b85811015613f4757868403601f19018a5282518460408101845b6002811015613f32578782038352613f208285516137d7565b93890193928901929150600101613f07565b509b87019b9550505091840191600101613eed565b509198975050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156138e957603f19898403018552815160e060ff825116855288820151613faa8a870182613ebf565b5087820151613fbb89870182613b14565b506060808301518282880152613fd3838801826137d7565b9250505060808083015186830382880152613fee83826137d7565b9250505060a080830151868303828801526140098382613ecf565b9250505060c0808301519250858203818701525061402781836137d7565b968901969450505090860190600101613f7e565b8051825260208101516020830152604081015160408301526060810151611cca6060840182613c7a565b60808101611187828461403b565b6020815281511515602082015260006020830151604080840152805160c06060850152805160406101208601526140ae6101608601826137d7565b6020928301516101408701529183015160ff166080860152506040820151906140dc60a086018360ff169052565b606083015160ff1660c086015260808301516001600160401b0380821660e088015260a0909401519384166101008701529150612677565b60006020828403121561412657600080fd5b813561126f8161393f565b6000806020838503121561414457600080fd5b82356001600160401b0381111561415a57600080fd5b613bd985828601613954565b6020808252825182820181905260009190848201906040850190845b818110156141a85761419583855161403b565b9284019260809290920191600101614182565b50909695505050505050565b60ff811681146123e157600080fd5b6001600160401b03811681146123e157600080fd5b6000604082840312156141ea57600080fd5b6040516141f681613d43565b8235614201816141b4565b81526020830135614211816141c3565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061424757607f821691505b60208210810361211b57634e487b7160e01b600052602260045260246000fd5b601f821115611cca576000816000526020600020601f850160051c810160208610156142905750805b601f850160051c820191505b818110156142af5782815560010161429c565b505050505050565b6001600160401b038311156142ce576142ce613d2d565b6142e2836142dc8354614233565b83614267565b6000601f84116001811461431657600085156142fe5750838201355b600019600387901b1c1916600186901b1783556125ec565b600083815260209020601f19861690835b828110156143475786850135825560209485019460019092019101614327565b50868210156143645760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561118757611187614376565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b8781101561385057848303601f19018952813536889003601e1901811261440857600080fd5b870184810190356001600160401b0381111561442357600080fd5b80360382131561443257600080fd5b61443d85828461439f565b9a86019a94505050908301906001016143e2565b63ffffffff60e01b841681526040602082015260006126776040830184866143c8565b600082516144868184602087016137b3565b9190910192915050565b600082601f8301126144a157600080fd5b81516144ac81613dfa565b6040516144b98282613da6565b8281528560208487010111156144ce57600080fd5b6126778360208301602088016137b3565b6000602082840312156144f157600080fd5b81516001600160401b0381111561450757600080fd5b613a7384828501614490565b7f5769746e657450726963654665656455706772616461626c653a20736f6c7665815274039103b30b634b230ba34b7b7103330b4b632b21d1605d1b6020820152600082516145698160358501602087016137b3565b9190910160350192915050565b7f5769746e6574507269636546656564733a20736d6f6b652d746573742066616981526403632b21d160dd1b6020820152600082516145bc8160258501602087016137b3565b9190910160250192915050565b6040815260006145dd60408301858761439f565b905060018060a01b0383166020830152949350505050565b60006020828403121561460757600080fd5b81516001600160401b038082111561461e57600080fd5b908301906080828603121561463257600080fd5b60405161463e81613d68565b82518152602083015160208201526040830151604082015260608301518281111561466857600080fd5b61467487828601614490565b60608301525095945050505050565b60006020828403121561469557600080fd5b81516001600160401b03808211156146ac57600080fd5b90830190604082860312156146c057600080fd5b6040516146cc81613d43565b825160ff81106146db57600080fd5b81526020830151828111156146ef57600080fd5b6146fb87828601614490565b60208301525095945050505050565b60006020828403121561471c57600080fd5b815161126f8161393f565b80516014811061306b57600080fd5b60006020828403121561474857600080fd5b61126f82614727565b60408152600061476560408301858761439f565b9050826020830152949350505050565b8181038181111561118757611187614376565b602081526000613a7360208301848661439f565b805161306b816141b4565b805161306b816141c3565b60008082840360608112156147c657600080fd5b835192506040601f19820112156147dc57600080fd5b506040516147e981613d43565b60208401516147f7816141b4565b81526040840151614807816141c3565b6020820152919491935090915050565b60408152600061482b60408301868861439f565b828103602084015261483e81858761439f565b979650505050505050565b60018060a01b03851681528360208201526060604082015260006120cb60608301848661439f565b60006020828403121561488357600080fd5b5051919050565b60006001600160401b038211156148a3576148a3613d2d565b5060051b60200190565b600060208083850312156148c057600080fd5b82516001600160401b038111156148d657600080fd5b8301601f810185136148e757600080fd5b80516148f28161488a565b6040516148ff8282613da6565b82815260059290921b830184019184810191508783111561491f57600080fd5b928401925b8284101561483e57835182529284019290840190614924565b80516005811061306b57600080fd5b600082601f83011261495d57600080fd5b8151602061496a8261488a565b6040516149778282613da6565b83815260059390931b850182019282810191508684111561499757600080fd5b8286015b84811015614a395780516001600160401b03808211156149bb5760008081fd5b818901915089603f8301126149d05760008081fd5b6040516149dc81613d43565b80606084018c8111156149ef5760008081fd5b8885015b81811015614a2757805185811115614a0b5760008081fd5b614a198f8c838a0101614490565b8452509189019189016149f3565b5050508552505091830191830161499b565b509695505050505050565b600060208284031215614a5657600080fd5b81516001600160401b0380821115614a6d57600080fd5b9083019060e08286031215614a8157600080fd5b614a89613dd2565b614a928361479c565b8152614aa06020840161493d565b6020820152614ab160408401614727565b6040820152606083015182811115614ac857600080fd5b614ad487828601614490565b606083015250608083015182811115614aec57600080fd5b614af887828601614490565b60808301525060a083015182811115614b1057600080fd5b614b1c8782860161494c565b60a08301525060c083015182811115614b3457600080fd5b614b4087828601614490565b60c08301525095945050505050565b7102bb4ba3732ba283934b1b2a332b2b2399d160751b815260008251614b7c8160128501602087016137b3565b9190910160120192915050565b80516006811061306b57600080fd5b600060808284031215614baa57600080fd5b604051614bb681613d68565b825181526020830151602082015260408301516040820152614bda60608401614b89565b60608201529392505050565b60006020808385031215614bf957600080fd5b82516001600160401b0380821115614c1057600080fd5b81850191506040808388031215614c2657600080fd5b8051614c3181613d43565b83518015158114614c4157600080fd5b81528385015183811115614c5457600080fd5b939093019260c08489031215614c6957600080fd5b8151614c7481613d87565b845184811115614c8357600080fd5b8501808a03841315614c9457600080fd5b8351614c9f81613d43565b815186811115614cae57600080fd5b614cba8c828501614490565b82525090870151878201528152614cd285870161479c565b86820152614ce183860161479c565b83820152614cf16060860161479c565b6060820152614d02608086016147a7565b6080820152614d1360a086016147a7565b60a082015294810194909452509195945050505050565b6020808252818101839052600090600560408085019086831b86010187855b888110156138e957878303603f190184528135368b9003601e19018112614d6f57600080fd5b8a0186810190356001600160401b03811115614d8a57600080fd5b80871b3603821315614d9b57600080fd5b614da68582846143c8565b958801959450505090850190600101614d49565b83815260406020820152600061267760408301848661439f565b600060208284031215614de657600080fd5b815161126f816141b4565b600060033d1115614e0a5760046000803e5060005160e01c5b90565b600060443d1015614e1b5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614e4a57505050505090565b8285019150815181811115614e625750505050505090565b843d8701016020828501011115614e7c5750505050505090565b614e8b60208286010187613da6565b509095945050505050565b818103600083128015838313168383128216171561254e5761254e614376565b600060208284031215614ec857600080fd5b61126f82614b89565b600082614eee57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b0319831681526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b600060018201614f3957614f39614376565b506001019056fee36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ffe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200a264697066735822122092953fe9bee6aaf493fbaa38c1838b59729f5a6240a6cfbebcbe41ab27174ec064736f6c63430008160033", + "deployedBytecode": "0x6080604052600436106102515760003560e01c8063a55b471c11610139578063d3471e34116100b6578063f2fde38b1161007a578063f2fde38b146108f0578063f78eea8314610910578063f9f34bb61461094b578063fae91a5114610978578063ff24fb4f14610998578063ff75890f146109b857610251565b8063d3471e341461084c578063d6a3614f1461086c578063e13c11c41461088e578063e30c3978146108bb578063ef1dff2b146108d057610251565b8063b411ee94116100fd578063b411ee941461077c578063c064d372146107a2578063c2f2a2ed146107c2578063c3d98ea8146107ef578063c5010d171461081c57610251565b8063a55b471c146106af578063a80c5bc0146106cf578063abc86c6e146106fc578063ac82c6081461070f578063adb7c3f71461072f57610251565b80636ab221f8116101d25780637b103999116101965780637b103999146105ee57806384292f071461060357806386ac03e01461062357806389a87b16146106435780638da5cb5b14610671578063909375801461068f57610251565b80636ab221f81461055b5780636d1178e51461058d578063715018a6146105af57806375dadb32146105c457806379ba5097146105d957610251565b806346d1d21a1161021957806346d1d21a1461045457806348765643146104a057806349492ef1146104cd5780635be93984146104fa5780636175ff001461051a57610251565b80630306732e1461038b57806303f3813d146103b8578063384ac938146103d85780633e088e121461040657806340eb7a0714610427575b34801561025d57600080fd5b506000356001600160e01b03191663e0d20f7360e01b14801561027f57503330145b156103375760006102a660206102953684613785565b6001600160c01b031916901b6109d8565b600601546001600160a01b03169050806103125760405162461bcd60e51b815260206004820152602260248201527f5769746e6574507269636546656564733a20756e736574746c656420736f6c7660448201526132b960f11b60648201526084015b60405180910390fd5b60405136600082376000803683855af43d806000843e818015610333578184f35b8184fd5b60405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a206e6f7420696d706c656d656e74656044820152601960fa1b6064820152608401610309565b005b34801561039757600080fd5b506103a0610a12565b6040516103af9392919061385d565b60405180910390f35b3480156103c457600080fd5b506103896103d3366004613998565b610c71565b3480156103e457600080fd5b506103f86103f3366004613a34565b61105d565b6040516103af929190613a4f565b610419610414366004613a34565b61112f565b6040519081526020016103af565b34801561043357600080fd5b50610447610442366004613a34565b61118d565b6040516103af9190613a7b565b34801561046057600080fd5b506104887f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103af565b3480156104ac57600080fd5b506104c06104bb366004613a34565b611276565b6040516103af9190613a8e565b3480156104d957600080fd5b506104ed6104e8366004613a34565b611334565b6040516103af9190613add565b34801561050657600080fd5b50610419610515366004613a34565b6113e4565b34801561052657600080fd5b5061054e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516103af9190613b28565b34801561056757600080fd5b5061057b610576366004613a34565b6113f9565b60405160ff90911681526020016103af565b34801561059957600080fd5b506105a2611411565b6040516103af9190613b36565b3480156105bb57600080fd5b50610389611441565b3480156105d057600080fd5b50610447611455565b3480156105e557600080fd5b50610389611480565b3480156105fa57600080fd5b50610488611488565b34801561060f57600080fd5b5061038961061e366004613b59565b61150c565b34801561062f57600080fd5b5061038961063e366004613ba4565b6117c7565b34801561064f57600080fd5b5061066361065e366004613a34565b611a04565b6040516103af929190613be5565b34801561067d57600080fd5b506000546001600160a01b0316610488565b34801561069b57600080fd5b506104196106aa366004613a34565b611abb565b3480156106bb57600080fd5b506104886106ca366004613c0f565b611ad0565b3480156106db57600080fd5b506106ef6106ea366004613a34565b611bb3565b6040516103af9190613c8a565b61041961070a366004613c98565b611bc6565b34801561071b57600080fd5b5061038961072a366004613cd7565b611c5b565b34801561073b57600080fd5b506107637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016103af565b34801561078857600080fd5b50610763610797366004613e21565b805160209091012090565b3480156107ae57600080fd5b506104196107bd366004613ea6565b611ccf565b3480156107ce57600080fd5b506107e26107dd366004613a34565b611d62565b6040516103af9190613f55565b3480156107fb57600080fd5b5061080f61080a366004613a34565b611f43565b6040516103af9190614065565b34801561082857600080fd5b5061083c610837366004613ba4565b612121565b60405190151581526020016103af565b34801561085857600080fd5b506104c0610867366004613a34565b612223565b34801561087857600080fd5b50600080516020614f6183398151915254610419565b34801561089a57600080fd5b506108ae6108a9366004613a34565b61227e565b6040516103af9190614073565b3480156108c757600080fd5b50610488612321565b3480156108dc57600080fd5b506104476108eb366004613a34565b612335565b3480156108fc57600080fd5b5061038961090b366004614114565b6123d0565b34801561091c57600080fd5b5061093061092b366004613ea6565b6123e4565b604080519384526020840192909252908201526060016103af565b34801561095757600080fd5b5061096b610966366004614131565b61249e565b6040516103af9190614166565b34801561098457600080fd5b506103896109933660046141d8565b612555565b3480156109a457600080fd5b506103896109b3366004613998565b612592565b3480156109c457600080fd5b506104886109d3366004613c0f565b6125f3565b6001600160e01b03191660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b600080516020614f6183398151915280546040805160208084028201810190925282815260609384938493830182828015610a9957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610a5b5790505b5050505050925082516001600160401b03811115610ab957610ab9613d2d565b604051908082528060200260200182016040528015610aec57816020015b6060815260200190600190039081610ad75790505b50915082516001600160401b03811115610b0857610b08613d2d565b604051908082528060200260200182016040528015610b31578160200160208202803683370190505b50905060005b8351811015610c6b576000610b64858381518110610b5757610b5761421d565b60200260200101516109d8565b9050806000018054610b7590614233565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190614233565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050848381518110610c0557610c0561421d565b602090810291909101015260068101546001600160a01b031615610c3f57600681015460601b6bffffffffffffffffffffffff1916610c45565b80600501545b838381518110610c5757610c5761421d565b602090810291909101015250600101610b37565b50909192565b610c79612680565b6001600160a01b038316610cdb5760405162461bcd60e51b815260206004820152602360248201527f5769746e6574507269636546656564733a206e6f20736f6c766572206164647260448201526265737360e81b6064820152608401610309565b6000610d1c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000610d29826109d8565b90508060020154600003610df95780610d438789836142b7565b50610d4e87876126ad565b60018201805460ff191660ff92909216919091179055600080516020614f41833981519152600190810154610d829161438c565b60028201556006810180546001600160a01b0319166001600160a01b038716179055600080516020614f418339815191526001908101805491820181556000908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610e35565b60068101546001600160a01b03868116911614610e3557600060058201556006810180546001600160a01b0319166001600160a01b0387161790555b600080866001600160a01b031663e6f8715860e01b858888604051602401610e5f93929190614451565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e9d9190614474565b600060405180830381855af49150503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b606091505b509150915081610f375760048101905080806020019051810190610f0191906144df565b604051602001610f119190614513565b60408051601f198184030181529082905262461bcd60e51b825261030991600401613a7b565b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b179052905160009182913091610f8e91614474565b600060405180830381855afa9150503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b5091509150816110025760048101905080806020019051810190610ff291906144df565b604051602001610f119190614576565b5050816001600160e01b031916336001600160a01b03167ffa02fc3a72fec2326e6703c83ff273b153110906b8bdb19d198b03ea7a3e404f89898960405161104c939291906145c9565b60405180910390a350505050505050565b6000606061106a836109d8565b600601546001600160a01b03169150600061108484612793565b905080516001600160401b0381111561109f5761109f613d2d565b6040519080825280602002602001820160405280156110d257816020015b60608152602001906001900390816110bd5790505b50915060005b8151811015611128576111038282815181106110f6576110f661421d565b6020026020010151612335565b8382815181106111155761111561421d565b60209081029190910101526001016110d8565b5050915091565b600061118782611182600080516020614f418339815191525b546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b61287d565b92915050565b6060600061119a836109d8565b60058101549091506000036111f15760405162461bcd60e51b815260206004820152601d60248201527f5769746e6574507269636546656564733a206e6f2052414420686173680000006044820152606401610309565b6111f9611488565b6001600160a01b0316632ebf5d5c82600501546040518263ffffffff1660e01b815260040161122a91815260200190565b600060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126f91908101906144df565b9392505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d184612dc4565b6040518263ffffffff1660e01b81526004016112ef91815260200190565b600060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118791908101906145f5565b6040805180820190915260008152606060208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a77fc1a4611381846113e4565b6040518263ffffffff1660e01b815260040161139f91815260200190565b600060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614683565b60006113ef826109d8565b6004015492915050565b6000611404826109d8565b6001015460ff1692915050565b604080518082019091526000808252602082015261143c600080516020614f41833981519152611148565b905090565b611449612680565b6114536000612e9a565b565b606061143c7f0000000000000000000000000000000000000000000000000000000000000000612eb3565b611453612f57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c919061470a565b611514612680565b7f0000000000000000000000000000000000000000000000000000000000000000601381111561154657611546613ac7565b61154e611488565b6001600160a01b0316634c729104836040518263ffffffff1660e01b815260040161157b91815260200190565b602060405180830381865afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bc9190614736565b60138111156115cd576115cd613ac7565b146116295760405162461bcd60e51b815260206004820152602660248201527f5769746e6574507269636546656564733a2062616420726573756c742064617460448201526561207479706560d01b6064820152608401610309565b600061166a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000611677826109d8565b9050806002015460000361174b57806116918587836142b7565b5061169c85856126ad565b60018201805460ff191660ff92909216919091179055600080516020614f418339815191526001908101546116d09161438c565b600282015560058101839055600080516020614f6183398151915280546001810182556000919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055611770565b8281600501541461177057600581018390556006810180546001600160a01b03191690555b816001600160e01b031916336001600160a01b03167f2045f236d366b45bfe85554add87377b7266b5c509a8039f567ce9c9c1e302888787876040516117b893929190614751565b60405180910390a35050505050565b6117cf612680565b600061181083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b9050600080516020614f61833981519152600061182c836109d8565b600281015490915060008190036118855760405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b8254600090849061189890600190614775565b815481106118a8576118a861421d565b6000918252602090912060088204015460079091166004026101000a900460e01b905080846118d8600185614775565b815481106118e8576118e861421d565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555081611922826109d8565b600201556001600160e01b0319851660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602052604081209061196982826136ab565b5060018101805460ff191690556000600282018190556003820181905560048201819055600582018190556006820180546001600160a01b031916905560078201819055600890910155506040516001600160e01b031985169033907fe43fb0f08a34bcdce6df0e4f5fc795d0016c6fe3c7ace31aa463c868ad9cd5d2906119f4908a908a90614788565b60405180910390a3505050505050565b60408051808201909152600080825260208201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630aa4112a611a53856113e4565b6040518263ffffffff1660e01b8152600401611a7191815260200190565b606060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906147b2565b91509150915091565b6000611ac6826109d8565b6005015492915050565b6000611ada612680565b604051632956d1c760e21b815273__WitnetPriceFeedsLib___________________9063a55b471c90611b17908890889088908890600401614817565b602060405180830381865af4158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b58919061470a565b9050336001600160a01b03167fc8b3a4be5c8e12bed9e0df82e21ff2e36e5d49cc5daa1c75be478faf0a7415f482836001600160a01b03163f8686604051611ba39493929190614849565b60405180910390a2949350505050565b6000611187611bc1836113e4565b612fd2565b6000611bf2611bd3611411565b611be2368590038501856141d8565b9051905160ff9182169116101590565b611c485760405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a20756e7365637572652075706461746044820152606560f81b6064820152608401610309565b61126f83611182368590038501856141d8565b611c63612680565b611cca8383836001600160a01b0316631eef90526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190614871565b505050565b604051630f7b104360e31b815260048101829052602060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614871565b60606000611d6e611488565b6001600160a01b031663a83e942c611d8585611abb565b6040518263ffffffff1660e01b8152600401611da391815260200190565b600060405180830381865afa158015611dc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de891908101906148ad565b905080516001600160401b03811115611e0357611e03613d2d565b604051908082528060200260200182016040528015611e7557816020015b611e626040805160e0810190915260008082526020820190815260200160008152602001606081526020016060815260200160608152602001606081525090565b815260200190600190039081611e215790505b50915060005b8251811015611f3c57611e8c611488565b6001600160a01b0316639dd48757838381518110611eac57611eac61421d565b60200260200101516040518263ffffffff1660e01b8152600401611ed291815260200190565b600060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f179190810190614a44565b838281518110611f2957611f2961421d565b6020908102919091010152600101611e7b565b5050919050565b611f4b6136e5565b6000611f5683612dc4565b90508015611fce576000611f6984611276565b90506000611f7a8260600151613070565b90506040518060800160405280611f908361308e565b81526020018360200151815260200183604001518152602001611fb287611bb3565b6005811115611fc357611fc3613ac7565b905295945050505050565b6000611fd9846109d8565b600601546001600160a01b0316905080156120d557604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290516000918291309161204391614474565b600060405180830381855afa9150503d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b5091509150816120b757600481019050808060200190518101906120a791906144df565b604051602001610f119190614b4f565b808060200190518101906120cb9190614b98565b9695505050505050565b604051806080016040528060008152602001600081526020016000801b815260200161210086611bb3565b600581111561211157612111613ac7565b9052949350505050565b50919050565b60008061216384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506001600160e01b0319811661221061217c836109d8565b805461218790614233565b80601f01602080910402602001604051908101604052809291908181526020018280546121b390614233565b80156122005780601f106121d557610100808354040283529160200191612200565b820191906000526020600020905b8154815290600101906020018083116121e357829003601f168201915b5050505050805160209091012090565b6001600160e01b03191614949350505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d1846113e4565b61228661370d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166359209b396122be84612dc4565b6040518263ffffffff1660e01b81526004016122dc91815260200190565b600060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614be6565b600061143c6001546001600160a01b031690565b6060612340826109d8565b805461234b90614233565b80601f016020809104026020016040519081016040528092919081815260200182805461237790614233565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b50505050509050919050565b6123d8612680565b6123e18161310a565b50565b6000806000806123f385611f43565b805160208201519192509060028360600151600581111561241657612416613ac7565b146124885760018360600151600581111561243357612433613ac7565b1480612454575060048360600151600581111561245257612452613ac7565b145b80612474575060058360600151600581111561247257612472613ac7565b145b6124805761019061248b565b61019461248b565b60c85b919550935061ffff169150509193909250565b6060816001600160401b038111156124b8576124b8613d2d565b6040519080825280602002602001820160405280156124f157816020015b6124de6136e5565b8152602001906001900390816124d65790505b50905060005b8281101561254e576125298484838181106125145761251461421d565b905060200201602081019061080a9190613a34565b82828151811061253b5761253b61421d565b60209081029190910101526001016124f7565b5092915050565b61255d612680565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600080516020614f4183398151915255565b61259a612680565b6125ec8585856001600160a01b031663bf7a0bd386866040518363ffffffff1660e01b81526004016125cd929190614d2a565b6020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b5050505050565b6040516001628a76f160e01b0319815260009073__WitnetPriceFeedsLib___________________9063ff75890f90612636908890889088908890600401614817565b602060405180830381865af4158015612653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612677919061470a565b95945050505050565b6000546001600160a01b031633146114535760405163118cdaa760e01b8152336004820152602401610309565b60405163e78d44d960e01b815260009073__WitnetPriceFeedsLib___________________9063e78d44d99061270b907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614dba565b602060405180830381865af4925050508015612744575060408051601f3d908101601f1916820190925261274191810190614dd4565b60015b61278c57612750614df1565b806308c379a0036127805750612764614e0d565b8061276f5750612782565b80604051602001610f119190614b4f565b505b3d6000803e3d6000fd5b9050611187565b6001600160e01b0319811660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602090815260409182902060089081015483518281526101208101909452606093909290919082016101008036833701905050915060005b600881101561287557818382815181106128185761281861421d565b60200260200101906001600160e01b03191690816001600160e01b0319168152505082818151811061284c5761284c61421d565b60209081029190910101516001600160e01b0319161561287557602082901b91506001016127fc565b825250919050565b600080612889846109d8565b600581015490915015612d0a5761289f3a611ccf565b9150813410156128ff5760405162461bcd60e51b815260206004820152602560248201527f5769746e6574507269636546656564733a20696e73756666696369656e742072604482015264195dd85c9960da1b6064820152608401610309565b6004810154600061290f82612fd2565b9050600181600581111561292557612925613ac7565b03612aa0576040516247405160e11b81526004810183905260009085906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690628e80a290602401602060405180830381865afa158015612992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b69190614871565b6129c09190614e96565b90506000811315612a95578094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636064d6fd86856040518363ffffffff1660e01b8152600401612a1d91815260200190565b6000604051808303818588803b158015612a3657600080fd5b505af1158015612a4a573d6000803e3d6000fd5b50506040518881526001600160e01b03198b1693503392507f1b90a8aeedda2b8b0d437e329033c6937be332644e1657d02369da92cd14197c915060200160405180910390a3612a9a565b600094505b50612d03565b6002816005811115612ab457612ab4613ac7565b03612b6657600383015415612b5a57600383015460405163045bf42f60e11b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1158015612b30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b5891908101906145f5565b505b60038301829055612bf5565b60405163045bf42f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1925050508015612bee57506040513d6000823e601f3d908101601f19168201604052612beb91908101906145f5565b60015b15612bf557505b6005830154604051631ee15bd160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633dc2b7a2918791612c48918a90600401613be5565b60206040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190614871565b6004840181905591506001600160e01b03198616337fa4c90c11eb5dd52e88b6a7c160bf96d964ad12d852a0b515f9585013d833540a612ceb88602081015190516001600160f81b031960f89190911b166001600160401b039091161790565b60408051918252602082018990520160405180910390a35b5050612d7e565b60068101546001600160a01b031615612d3657612d2f612d2985612793565b8461313c565b9150612d7e565b60405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b3482101561254e57336108fc612d948434614775565b6040518115909202916000818181858888f19350505050158015612dbc573d6000803e3d6000fd5b505092915050565b600080612dd0836113e4565b9050600081118015612e7b57506002604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e689190614eb6565b6005811115612e7957612e79613ac7565b145b15612e865792915050565b612e8f836109d8565b600301549392505050565b600180546001600160a01b03191690556123e1816131f9565b60606000612ec083613249565b6001600160401b03811115612ed757612ed7613d2d565b6040519080825280601f01601f191660200182016040528015612f01576020820181803683370190505b50905060005b815181101561254e57838160208110612f2257612f2261421d565b1a60f81b828281518110612f3857612f3861421d565b60200101906001600160f81b031916908160001a905350600101612f07565b3380612f61612321565b6001600160a01b031614612fc95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610309565b6123e181612e9a565b6000811561306357604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa15801561303f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614eb6565b506002919050565b919050565b61307861370d565b600061308383613282565b905061126f816132a7565b60008180600001516130fd5760405162461bcd60e51b815260206004820152603260248201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260448201527137b69032b93937b932b2103932b9bab63a1760711b6064820152608401610309565b61126f83602001516132db565b613112612680565b6001600160a01b038116612fc957604051631e4fbdf760e01b815260006004820152602401610309565b60008083513461314c9190614ed1565b905060005b8451811015612dbc57306001600160a01b031663abc86c6e8387848151811061317c5761317c61421d565b6020026020010151876040518463ffffffff1660e01b81526004016131a2929190614ef3565b60206040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e59190614871565b6131ef908461438c565b9250600101613151565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b602081101561306b578181602081106132675761326761421d565b1a60f81b6001600160f81b0319161561306b5760010161324c565b61328a613725565b604080518082019091528281526000602082015261126f8161333e565b6132af61370d565b5060a0810151604080518082019091526001600160401b03909116602714158152602081019190915290565b60008160008060ff16826040015160ff161461331b57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610309565b61332d8460000151856060015161345e565b6001600160401b0316949350505050565b613346613725565b815151829060000361336b576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b80156133ee5761338b8961351f565b95508161339781614f27565b6007600589901c169650601f8816955092505060051985016133e65760208901516133c28a8661345e565b9350808a602001516133d49190614775565b6133de908461438c565b92505061337c565b50600061337c565b600760ff861611156134185760405163bd2ac87960e01b815260ff86166004820152602401610309565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613476575060ff8116611187565b8160ff166018036134945761348a8361351f565b60ff169050611187565b8160ff166019036134b3576134a883613581565b61ffff169050611187565b8160ff16601a036134d4576134c7836135ed565b63ffffffff169050611187565b8160ff16601b036134e85761278c8361364c565b8160ff16601f0361350157506001600160401b03611187565b604051636d785b1360e01b815260ff83166004820152602401610309565b6000816020015182600001515180821115613557576040516363a056dd60e01b81526004810183905260248101829052604401610309565b835160208501805180830160010151955090819061357482614f27565b8152505050505050919050565b600081602001516002613594919061438c565b825151808211156135c2576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516002818401810151965090916135e0828461438c565b9052509395945050505050565b600081602001516004613600919061438c565b8251518082111561362e576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516004818401810151965090916135e0828461438c565b60008160200151600861365f919061438c565b8251518082111561368d576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516008818401810151965090916135e0828461438c565b5080546136b790614233565b6000825580601f106136c7575050565b601f0160209004906000526020600020908101906123e1919061376c565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806000151581526020016137085b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613781576000815560010161376d565b5090565b6001600160c01b03198135818116916008851015612dbc5760089490940360031b84901b1690921692915050565b60005b838110156137ce5781810151838201526020016137b6565b50506000910152565b600081518084526137ef8160208601602086016137b3565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561385057601f1986840301895261383e8383516137d7565b98840198925090830190600101613822565b5090979650505050505050565b606080825284519082018190526000906020906080840190828801845b828110156138a05781516001600160e01b0319168452928401929084019060010161387a565b505050838103828501526138b48187613803565b8481036040860152855180825283870192509083019060005b818110156138e9578351835292840192918401916001016138cd565b509098975050505050505050565b60008083601f84011261390957600080fd5b5081356001600160401b0381111561392057600080fd5b60208301915083602082850101111561393857600080fd5b9250929050565b6001600160a01b03811681146123e157600080fd5b60008083601f84011261396657600080fd5b5081356001600160401b0381111561397d57600080fd5b6020830191508360208260051b850101111561393857600080fd5b6000806000806000606086880312156139b057600080fd5b85356001600160401b03808211156139c757600080fd5b6139d389838a016138f7565b9097509550602088013591506139e88261393f565b909350604087013590808211156139fe57600080fd5b50613a0b88828901613954565b969995985093965092949392505050565b80356001600160e01b03198116811461306b57600080fd5b600060208284031215613a4657600080fd5b61126f82613a1c565b6001600160a01b0383168152604060208201819052600090613a7390830184613803565b949350505050565b60208152600061126f60208301846137d7565b6020815281516020820152602082015160408201526040820151606082015260006060830151608080840152613a7360a08401826137d7565b634e487b7160e01b600052602160045260246000fd5b602081526000825160ff8110613af557613af5613ac7565b806020840152506020830151604080840152613a7360608401826137d7565b60148110613b2457613b24613ac7565b9052565b602081016111878284613b14565b815160ff1681526020808301516001600160401b03169082015260408101611187565b600080600060408486031215613b6e57600080fd5b83356001600160401b03811115613b8457600080fd5b613b90868287016138f7565b909790965060209590950135949350505050565b60008060208385031215613bb757600080fd5b82356001600160401b03811115613bcd57600080fd5b613bd9858286016138f7565b90969095509350505050565b8281526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b60008060008060408587031215613c2557600080fd5b84356001600160401b0380821115613c3c57600080fd5b613c48888389016138f7565b90965094506020870135915080821115613c6157600080fd5b50613c6e878288016138f7565b95989497509550505050565b60068110613b2457613b24613ac7565b602081016111878284613c7a565b6000808284036060811215613cac57600080fd5b613cb584613a1c565b92506040601f1982011215613cc957600080fd5b506020830190509250929050565b600080600060408486031215613cec57600080fd5b83356001600160401b03811115613d0257600080fd5b613d0e868287016138f7565b9094509250506020840135613d228161393f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604081018181106001600160401b0382111715613d6257613d62613d2d565b60405250565b608081018181106001600160401b0382111715613d6257613d62613d2d565b60c081018181106001600160401b0382111715613d6257613d62613d2d565b601f8201601f191681016001600160401b0381118282101715613dcb57613dcb613d2d565b6040525050565b60405160e081016001600160401b0381118282101715613df457613df4613d2d565b60405290565b60006001600160401b03821115613e1357613e13613d2d565b50601f01601f191660200190565b600060208284031215613e3357600080fd5b81356001600160401b03811115613e4957600080fd5b8201601f81018413613e5a57600080fd5b8035613e6581613dfa565b604051613e728282613da6565b828152866020848601011115613e8757600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208284031215613eb857600080fd5b5035919050565b60058110613b2457613b24613ac7565b600082825180855260208086019550808260051b8401018186016000805b85811015613f4757868403601f19018a5282518460408101845b6002811015613f32578782038352613f208285516137d7565b93890193928901929150600101613f07565b509b87019b9550505091840191600101613eed565b509198975050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156138e957603f19898403018552815160e060ff825116855288820151613faa8a870182613ebf565b5087820151613fbb89870182613b14565b506060808301518282880152613fd3838801826137d7565b9250505060808083015186830382880152613fee83826137d7565b9250505060a080830151868303828801526140098382613ecf565b9250505060c0808301519250858203818701525061402781836137d7565b968901969450505090860190600101613f7e565b8051825260208101516020830152604081015160408301526060810151611cca6060840182613c7a565b60808101611187828461403b565b6020815281511515602082015260006020830151604080840152805160c06060850152805160406101208601526140ae6101608601826137d7565b6020928301516101408701529183015160ff166080860152506040820151906140dc60a086018360ff169052565b606083015160ff1660c086015260808301516001600160401b0380821660e088015260a0909401519384166101008701529150612677565b60006020828403121561412657600080fd5b813561126f8161393f565b6000806020838503121561414457600080fd5b82356001600160401b0381111561415a57600080fd5b613bd985828601613954565b6020808252825182820181905260009190848201906040850190845b818110156141a85761419583855161403b565b9284019260809290920191600101614182565b50909695505050505050565b60ff811681146123e157600080fd5b6001600160401b03811681146123e157600080fd5b6000604082840312156141ea57600080fd5b6040516141f681613d43565b8235614201816141b4565b81526020830135614211816141c3565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061424757607f821691505b60208210810361211b57634e487b7160e01b600052602260045260246000fd5b601f821115611cca576000816000526020600020601f850160051c810160208610156142905750805b601f850160051c820191505b818110156142af5782815560010161429c565b505050505050565b6001600160401b038311156142ce576142ce613d2d565b6142e2836142dc8354614233565b83614267565b6000601f84116001811461431657600085156142fe5750838201355b600019600387901b1c1916600186901b1783556125ec565b600083815260209020601f19861690835b828110156143475786850135825560209485019460019092019101614327565b50868210156143645760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561118757611187614376565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b8781101561385057848303601f19018952813536889003601e1901811261440857600080fd5b870184810190356001600160401b0381111561442357600080fd5b80360382131561443257600080fd5b61443d85828461439f565b9a86019a94505050908301906001016143e2565b63ffffffff60e01b841681526040602082015260006126776040830184866143c8565b600082516144868184602087016137b3565b9190910192915050565b600082601f8301126144a157600080fd5b81516144ac81613dfa565b6040516144b98282613da6565b8281528560208487010111156144ce57600080fd5b6126778360208301602088016137b3565b6000602082840312156144f157600080fd5b81516001600160401b0381111561450757600080fd5b613a7384828501614490565b7f5769746e657450726963654665656455706772616461626c653a20736f6c7665815274039103b30b634b230ba34b7b7103330b4b632b21d1605d1b6020820152600082516145698160358501602087016137b3565b9190910160350192915050565b7f5769746e6574507269636546656564733a20736d6f6b652d746573742066616981526403632b21d160dd1b6020820152600082516145bc8160258501602087016137b3565b9190910160250192915050565b6040815260006145dd60408301858761439f565b905060018060a01b0383166020830152949350505050565b60006020828403121561460757600080fd5b81516001600160401b038082111561461e57600080fd5b908301906080828603121561463257600080fd5b60405161463e81613d68565b82518152602083015160208201526040830151604082015260608301518281111561466857600080fd5b61467487828601614490565b60608301525095945050505050565b60006020828403121561469557600080fd5b81516001600160401b03808211156146ac57600080fd5b90830190604082860312156146c057600080fd5b6040516146cc81613d43565b825160ff81106146db57600080fd5b81526020830151828111156146ef57600080fd5b6146fb87828601614490565b60208301525095945050505050565b60006020828403121561471c57600080fd5b815161126f8161393f565b80516014811061306b57600080fd5b60006020828403121561474857600080fd5b61126f82614727565b60408152600061476560408301858761439f565b9050826020830152949350505050565b8181038181111561118757611187614376565b602081526000613a7360208301848661439f565b805161306b816141b4565b805161306b816141c3565b60008082840360608112156147c657600080fd5b835192506040601f19820112156147dc57600080fd5b506040516147e981613d43565b60208401516147f7816141b4565b81526040840151614807816141c3565b6020820152919491935090915050565b60408152600061482b60408301868861439f565b828103602084015261483e81858761439f565b979650505050505050565b60018060a01b03851681528360208201526060604082015260006120cb60608301848661439f565b60006020828403121561488357600080fd5b5051919050565b60006001600160401b038211156148a3576148a3613d2d565b5060051b60200190565b600060208083850312156148c057600080fd5b82516001600160401b038111156148d657600080fd5b8301601f810185136148e757600080fd5b80516148f28161488a565b6040516148ff8282613da6565b82815260059290921b830184019184810191508783111561491f57600080fd5b928401925b8284101561483e57835182529284019290840190614924565b80516005811061306b57600080fd5b600082601f83011261495d57600080fd5b8151602061496a8261488a565b6040516149778282613da6565b83815260059390931b850182019282810191508684111561499757600080fd5b8286015b84811015614a395780516001600160401b03808211156149bb5760008081fd5b818901915089603f8301126149d05760008081fd5b6040516149dc81613d43565b80606084018c8111156149ef5760008081fd5b8885015b81811015614a2757805185811115614a0b5760008081fd5b614a198f8c838a0101614490565b8452509189019189016149f3565b5050508552505091830191830161499b565b509695505050505050565b600060208284031215614a5657600080fd5b81516001600160401b0380821115614a6d57600080fd5b9083019060e08286031215614a8157600080fd5b614a89613dd2565b614a928361479c565b8152614aa06020840161493d565b6020820152614ab160408401614727565b6040820152606083015182811115614ac857600080fd5b614ad487828601614490565b606083015250608083015182811115614aec57600080fd5b614af887828601614490565b60808301525060a083015182811115614b1057600080fd5b614b1c8782860161494c565b60a08301525060c083015182811115614b3457600080fd5b614b4087828601614490565b60c08301525095945050505050565b7102bb4ba3732ba283934b1b2a332b2b2399d160751b815260008251614b7c8160128501602087016137b3565b9190910160120192915050565b80516006811061306b57600080fd5b600060808284031215614baa57600080fd5b604051614bb681613d68565b825181526020830151602082015260408301516040820152614bda60608401614b89565b60608201529392505050565b60006020808385031215614bf957600080fd5b82516001600160401b0380821115614c1057600080fd5b81850191506040808388031215614c2657600080fd5b8051614c3181613d43565b83518015158114614c4157600080fd5b81528385015183811115614c5457600080fd5b939093019260c08489031215614c6957600080fd5b8151614c7481613d87565b845184811115614c8357600080fd5b8501808a03841315614c9457600080fd5b8351614c9f81613d43565b815186811115614cae57600080fd5b614cba8c828501614490565b82525090870151878201528152614cd285870161479c565b86820152614ce183860161479c565b83820152614cf16060860161479c565b6060820152614d02608086016147a7565b6080820152614d1360a086016147a7565b60a082015294810194909452509195945050505050565b6020808252818101839052600090600560408085019086831b86010187855b888110156138e957878303603f190184528135368b9003601e19018112614d6f57600080fd5b8a0186810190356001600160401b03811115614d8a57600080fd5b80871b3603821315614d9b57600080fd5b614da68582846143c8565b958801959450505090850190600101614d49565b83815260406020820152600061267760408301848661439f565b600060208284031215614de657600080fd5b815161126f816141b4565b600060033d1115614e0a5760046000803e5060005160e01c5b90565b600060443d1015614e1b5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614e4a57505050505090565b8285019150815181811115614e625750505050505090565b843d8701016020828501011115614e7c5750505050505090565b614e8b60208286010187613da6565b509095945050505050565b818103600083128015838313168383128216171561254e5761254e614376565b600060208284031215614ec857600080fd5b61126f82614b89565b600082614eee57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b0319831681526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b600060018201614f3957614f39614376565b506001019056fee36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ffe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200a264697066735822122092953fe9bee6aaf493fbaa38c1838b59729f5a6240a6cfbebcbe41ab27174ec064736f6c63430008160033" +} \ No newline at end of file diff --git a/artifacts/WitnetRandomness.json b/artifacts/WitnetRandomness.json new file mode 100644 index 000000000..bd34d767a --- /dev/null +++ b/artifacts/WitnetRandomness.json @@ -0,0 +1,790 @@ +{ + "contractName": "WitnetRandomness", + "sourceName": "contracts/apps/WitnetRandomness.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + }, + { + "internalType": "contract WitnetRequestBoard", + "name": "_wrb", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "range", + "type": "uint256" + } + ], + "name": "IndexOutOfBounds", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidInitialization", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + } + ], + "name": "InvalidLengthEncoding", + "type": "error" + }, + { + "inputs": [], + "name": "NotInitializing", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "name": "OwnableInvalidOwner", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "OwnableUnauthorizedAccount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "read", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expected", + "type": "uint256" + } + ], + "name": "UnexpectedMajorType", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "by", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "self", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "clone", + "type": "address" + } + ], + "name": "Cloned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "version", + "type": "uint64" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "prevBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "witnetQueryId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "witnetRequestHash", + "type": "bytes32" + } + ], + "name": "Randomized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "witReward", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmReward", + "type": "uint256" + } + ], + "name": "WitnetQuery", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + } + ], + "name": "WitnetQueryReported", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmReward", + "type": "uint256" + } + ], + "name": "WitnetQueryRewardUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmCallbackGas", + "type": "uint256" + } + ], + "name": "WitnetResponseDelivered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "resultCborBytes", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmCallbackGas", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "evmCallbackRevertReason", + "type": "string" + } + ], + "name": "WitnetResponseDeliveryFailed", + "type": "event" + }, + { + "inputs": [], + "name": "cloned", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestRandomizeBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "self", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnetRandomnessRequest", + "outputs": [ + { + "internalType": "contract WitnetRequest", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clone", + "outputs": [ + { + "internalType": "contract WitnetRandomness", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "_salt", + "type": "bytes32" + } + ], + "name": "cloneDeterministic", + "outputs": [ + { + "internalType": "contract WitnetRandomness", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_initData", + "type": "bytes" + } + ], + "name": "initializeClone", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "sla", + "type": "tuple" + } + ], + "name": "settleWitnetRandomnessSLA", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_gasPrice", + "type": "uint256" + } + ], + "name": "estimateRandomizeFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomizeData", + "outputs": [ + { + "internalType": "uint256", + "name": "_id", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_prevBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_nextBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessAfter", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessNextBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "getRandomnessPrevBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "isRandomized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_range", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "random", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "_range", + "type": "uint32" + }, + { + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "_seed", + "type": "bytes32" + } + ], + "name": "random", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "randomize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_block", + "type": "uint256" + } + ], + "name": "upgradeRandomizeFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnetRandomnessSLA", + "outputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x61012060405230608052633702412560e11b60c0523480156200002157600080fd5b50604051620031c9380380620031c98339810160408190526200004491620007ff565b80826001600160a01b0381166200007657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000818162000719565b50636461cc6360e01b6001600160e01b031916816001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f991906200083e565b6001600160e01b03191614620001665760405162461bcd60e51b815260206004820152602b60248201527f5573696e675769746e65743a20756e636f6d706c69616e74205769746e65745260448201526a195c5d595cdd109bd85c9960aa1b60648201526084016200006d565b6001600160a01b0390811660a052604080518082018252600a808252633b9aca00602092830152633b9aca00600560f91b016002556003805461ffff19169091179055815163adb7c3f760e01b81529151636461cc6360e01b9385169263adb7c3f79260048083019391928290030181865afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021191906200083e565b6001600160e01b031916146200022b576200022b62000871565b60006200023762000737565b6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000887565b90506000620002a962000737565b6001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d919062000887565b60408051600180825281830190925291925060009190602080830190803683375050604080516000808252602082019092529293506001600160a01b03851692639eb3ab1f92506002916200037b565b62000367620007c1565b8152602001906001900390816200035d5790505b506040518363ffffffff1660e01b81526004016200039b9291906200091b565b6020604051808303816000875af1158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000a07565b81600081518110620003f757620003f762000a21565b60200260200101818152505060606000836001600160a01b0316637f412e2360405180604001604052806002600b811115620004375762000437620008bd565b8152602001858152506040518263ffffffff1660e01b81526004016200045e919062000a37565b6020604051808303816000875af11580156200047e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a4919062000a07565b90506000846001600160a01b0316637f412e236040518060400160405280600b80811115620004d757620004d7620008bd565b8152602001868152506040518263ffffffff1660e01b8152600401620004fe919062000a37565b6020604051808303816000875af11580156200051e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000544919062000a07565b90506000866001600160a01b031663db7c58b086858560206040518563ffffffff1660e01b81526004016200057d949392919062000ae8565b6020604051808303816000875af11580156200059d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c3919062000887565b9050806001600160a01b0316637d18db5186516001600160401b03811115620005f057620005f0620008a7565b6040519080825280602002602001820160405280156200062557816020015b60608152602001906001900390816200060f5790505b506040518263ffffffff1660e01b815260040162000644919062000b47565b6020604051808303816000875af115801562000664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068a919062000887565b6001600160a01b031660e081905260408051630f77c82960e11b81529051631eef9052916004808201926020929091908290030181865afa158015620006d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fa919062000a07565b61010052506200070f93505062000748915050565b5050505062000bf3565b600180546001600160a01b0319169055620007348162000771565b50565b60006200074360a05190565b905090565b60408051808201909152600a8152633b9aca00602090910152633b9aca00600560f91b01600555565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405180604001604052806002905b6060815260200190600190039081620007d05790505090565b6001600160a01b03811681146200073457600080fd5b600080604083850312156200081357600080fd5b82516200082081620007e9565b60208401519092506200083381620007e9565b809150509250929050565b6000602082840312156200085157600080fd5b81516001600160e01b0319811681146200086a57600080fd5b9392505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200089a57600080fd5b81516200086a81620007e9565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845260005b81811015620008fb57602081850181015186830182015201620008dd565b506000602082860101526020601f19601f83011685010191505092915050565b600060058410620009305762000930620008bd565b838252602060a08184015260008060a0850152604060c06040860152600060c086015260e0850160e0606087015280875180835261010092508288019150828160051b890101925085890160005b82811015620009dd5789850360ff19018452815185878101895b6002811015620009c7578882038352620009b4828551620008d3565b938c0193928c0192915060010162000998565b509650505092870192908701906001016200097e565b50505050858103608087015260018152600160ff1b60208201526040810198975050505050505050565b60006020828403121562000a1a57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020808352606083018451600c811062000a575762000a57620008bd565b828501528482015160408086018190528151928390526080600584901b8701810193928501929087019060005b8181101562000ada57888603607f1901835284518051600a811062000aad5762000aad620008bd565b875287015187870185905262000ac685880182620008d3565b965050938601939186019160010162000a84565b509398975050505050505050565b6080808252855190820181905260009060209060a0840190828901845b8281101562000b235781518452928401929084019060010162000b05565b50505060208401969096525050604081019290925261ffff16606090910152919050565b600060208083018184528085518083526040860191506005925060408160051b8701018488016000805b8481101562000be457898403603f19018652825180518086529089019089860190808a1b87018b01855b8281101562000bcd57601f1989830301845262000bba828651620008d3565b948d0194938d0193915060010162000b9b565b50988b019896505050928801925060010162000b71565b50919998505050505050505050565b60805160a05160c05160e0516101005161253662000c93600039600081816109150152610a3601526000818161026d0152610653015260006104830152600081816102be015281816108e501528181610aaa01528181610b8b01528181610ca901528181610ecf0152610f7701526000818161031b015281816103cc0152818161081001528181611155015281816113d001526116cd01526125366000f3fe60806040526004361061019c5760003560e01c80639938fd0c116100ec578063daaa360c1161008a578063e7d4a01611610064578063e7d4a01614610565578063ec3757ba14610585578063f2fde38b146105a5578063fb476cad146105c557600080fd5b8063daaa360c1461051d578063e30c39781461053d578063e35329f81461055257600080fd5b8063a3252f68116100c6578063a3252f68146103fc578063a60ee26814610451578063adb7c3f714610471578063d08fccc7146104be57600080fd5b80639938fd0c146103875780639bc86fec1461039d578063a04daef0146103bd57600080fd5b806346d1d21a116101595780637104ddb2116101335780637104ddb21461030c578063715018a61461033f57806379ba5097146103545780638da5cb5b1461036957600080fd5b806346d1d21a146102af57806355a7b9c9146102e2578063699b328a1461030457600080fd5b806309ed4607146101a1578063158ef93e146101d357806324cbbfc1146101f857806336b651bb1461022d5780633b13e76e1461025b57806340b41daa1461028f575b600080fd5b3480156101ad57600080fd5b506101b66105e5565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101df57600080fd5b506101e8610651565b60405190151581526020016101ca565b34801561020457600080fd5b50610218610213366004611df8565b610680565b60405163ffffffff90911681526020016101ca565b34801561023957600080fd5b5061024d610248366004611e2b565b6106d0565b6040519081526020016101ca565b34801561026757600080fd5b506101b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561029b57600080fd5b5061024d6102aa366004611e2b565b610710565b3480156102bb57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b3480156102ee57600080fd5b506103026102fd366004611efb565b61074f565b005b61024d6108d5565b34801561031857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b34801561034b57600080fd5b50610302610a7d565b34801561036057600080fd5b50610302610a91565b34801561037557600080fd5b506000546001600160a01b03166101b6565b34801561039357600080fd5b5061024d60045481565b3480156103a957600080fd5b506101e86103b8366004611e2b565b610a99565b3480156103c957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156101e8565b34801561040857600080fd5b50610436610417366004611e2b565b6000908152600660205260409020600281015481546001909201549092565b604080519384526020840192909252908201526060016101ca565b34801561045d57600080fd5b5061024d61046c366004611e2b565b610b6b565b34801561047d57600080fd5b506104a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016101ca565b3480156104ca57600080fd5b506040805180820182526000808252602091820181905260055483518085018552828152830191909152825180840190935260f881901c83526001600160401b0316908201526040516101ca9190611f7a565b34801561052957600080fd5b506101b6610538366004611e2b565b610bfe565b34801561054957600080fd5b506101b6610c61565b61024d610560366004611e2b565b610c75565b34801561057157600080fd5b50610218610580366004611df8565b610d1d565b34801561059157600080fd5b5061024d6105a0366004611f9d565b610d9e565b3480156105b157600080fd5b506103026105c0366004611faf565b610e14565b3480156105d157600080fd5b5061024d6105e0366004611e2b565b610e28565b60006105ef610651565b61063c5760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b60448201526064015b60405180910390fd5b61064c6106476110de565b6111b7565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316151590565b60006106c684843361069186610e28565b604080516001600160a01b03909316602084015282015260600160405160208183030381529060405280519060200120610d1d565b90505b9392505050565b60008082116106e1576106e1611fd8565b60045480831161070a57600081815260066020526040902054610705908490611221565b6106c9565b92915050565b6000818152600660205260408120600201548103610739576107348260045461124a565b61070a565b5060009081526006602052604090206001015490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107945750825b90506000826001600160401b031660011480156107b05750303b155b9050811580156107be575080155b156107dc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561080657845460ff60401b1916600160401b1785555b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087e5760405162461bcd60e51b815260206004820152601d60248201527f436c6f6e61626c653a206e6f7420612064656c65676174652063616c6c0000006044820152606401610633565b61088786611286565b83156108cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000436004541015610a745760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633dc2b7a2347f00000000000000000000000000000000000000000000000000000000000000006109736005546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b6040518463ffffffff1660e01b8152600401610990929190611fee565b60206040518083038185885af11580156109ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109d39190612018565b4360008181526006602052604080822060028101859055600480548083558085529383902060010185905593909355519293509091819033907faf291bb4e1767569c77502edb6ad1009e856f57c09f214886c6becc9836c20c090610a649087907f000000000000000000000000000000000000000000000000000000000000000090918252602082015260400190565b60405180910390a3505050503490565b61064c43610c75565b610a85611297565b610a8f60006112c4565b565b610a8f6112dd565b6000818152600660205260408120817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636f07abcc83600201546040518263ffffffff1660e01b8152600401610afa91815260200190565b602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612031565b90508160020154600014158015610b6357506004816004811115610b6157610b61612052565b145b949350505050565b604051630f7b104360e31b815260048101829052602360248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612018565b6000610c08610651565b610c505760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b6044820152606401610633565b61070a61064783611358565b919050565b600061064c6001546001600160a01b031690565b6000818152600660205260408120600281015415610d15576002810154604051636064d6fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636064d6fd913491610ce29160040190815260200190565b6000604051808303818588803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b50505050505b503492915050565b600080610d2985611434565b610d349060ff61207e565b905060006001610d4583600261217b565b610d4f919061218a565b604080516020810187905290810187905260600160408051601f19818403018152919052805160209091012016905060ff8216610d9263ffffffff88168361219d565b901c9695505050505050565b6000610da8611297565b610db1826115c3565b610dfd5760405162461bcd60e51b815260206004820152601d60248201527f5769746e657452616e646f6d6e6573733a20696e76616c696420534c410000006044820152606401610633565b61070a610e0f368490038401846121d8565b61161c565b610e1c611297565b610e2581611647565b50565b6000818152600660205260408120600201548103610e4c57610e4982610710565b91505b60008281526006602052604081206002015490819003610eae5760405162461bcd60e51b815260206004820181905260248201527f5769746e657452616e646f6d6e6573733a206e6f742072616e646f6d697a65646044820152606401610633565b604051634cddf61560e01b8152600481018290526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634cddf61590602401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190612219565b90506002816005811115610f5057610f50612052565b03610feb576040516359209b3960e01b815260048101839052610b63906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906359209b3990602401600060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe69190810190612274565b611679565b6003816005811115610fff57610fff612052565b0361108357600084815260066020526040812060010154908190036110715760405162461bcd60e51b815260206004820152602260248201527f5769746e657452616e646f6d6e6573733a206661756c74792072616e646f6d696044820152617a6560f01b6064820152608401610633565b61107a81610e28565b95945050505050565b60405162461bcd60e51b815260206004820152602360248201527f5769746e657452616e646f6d6e6573733a2070656e64696e672072616e646f6d604482015262697a6560e81b6064820152608401610633565b5050919050565b6000806110e96116ae565b90506037816000f091506001600160a01b0382166111495760405162461bcd60e51b815260206004820152601760248201527f436c6f6e61626c653a20435245415445206661696c65640000000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a45090565b6040516355a7b9c960e01b815260206004820152600060248201819052906001600160a01b038316906355a7b9c990604401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5093949350505050565b600081831161124457600082815260066020526040902054610705908490611221565b50919050565b60008183101561126e5760008281526006602052604090205461070590849061124a565b50600090815260066020526040902060010154919050565b61128f336112c4565b610e2561170f565b6000546001600160a01b03163314610a8f5760405163118cdaa760e01b8152336004820152602401610633565b600180546001600160a01b0319169055610e2581611730565b33806112e7610c61565b6001600160a01b03161461134f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610633565b610e25816112c4565b6000806113636116ae565b9050826037826000f591506001600160a01b0382166113c45760405162461bcd60e51b815260206004820152601860248201527f436c6f6e61626c653a2043524541544532206661696c656400000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a450919050565b60408051610400810182526000808252600960208301526001928201839052600a6060830152600d6080830152601560a0830152600260c08301819052601d60e0840152600b610100840152600e610120840152601061014084018190526012610160850152601661018085015260196101a085015260036101c0850152601e6101e085015260086102008501819052600c6102208601526014610240860152601c610260860152600f61028086015260116102a086015260186102c086015260076102e08601526013610300860152601b610320860181905260176103408701526006610360870152601a61038087015260056103a087015260046103c08701819052601f6103e08801529688901c637fffffff1680891763ffffffff998a1690911790941c939093179586901c630fffffff1680871796881617901c949094179384901c61ffff168085179592948493611599926307c4acdd929091161761219d565b63ffffffff16901c63ffffffff16602081106115b7576115b76123e7565b60200201519392505050565b6000806115d660408401602085016123fd565b6001600160401b03161180156115fb575060006115f6602084018461241a565b60ff16115b801561070a5750607f611611602084018461241a565b60ff16111592915050565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600581905590565b61164f611297565b6001600160a01b03811661134f57604051631e4fbdf760e01b815260006004820152602401610633565b600081806000015161169d5760405162461bcd60e51b815260040161063390612437565b6106c96116a984611780565b6117b1565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81527f000000000000000000000000000000000000000000000000000000000000000060601b60148201526e5af43d82803e903d91602b57fd5bf360881b602882015290565b60408051808201909152600a8152633b9aca006020820152610e259061161c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608180600001516117a45760405162461bcd60e51b815260040161063390612437565b6106c983602001516117be565b600061070a826020611908565b60608160028060ff16826040015160ff16146117fe57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610633565b61181084600001518560600151611980565b6001600160401b03166080850181905263fffffffe19016118e757600061183f85600001518660400151611a48565b905063ffffffff80821610156118e15784516118649063ffffffff80841690611af516565b6040516020016118749190612489565b604051602081830303815290604052935061189785600001518660400151611a48565b905063ffffffff80821610156118e157845184906118be9063ffffffff80851690611af516565b6040516020016118cf9291906124a5565b60405160208183030381529060405293505b506110d7565b608084015184516119019163ffffffff90811690611af516565b92506110d7565b600060208260ff16111561191e5761191e611fd8565b60008260ff16845111611932578351611937565b8260ff165b905060005b81811015611978578060080285828151811061195a5761195a6123e7565b01602001516001600160f81b031916901c929092179160010161193c565b505092915050565b600060188260ff161015611998575060ff811661070a565b8160ff166018036119b6576119ac83611bb5565b60ff16905061070a565b8160ff166019036119d5576119ca83611c17565b61ffff16905061070a565b8160ff16601a036119f6576119e983611c83565b63ffffffff16905061070a565b8160ff16601b03611a1157611a0a83611ce2565b905061070a565b8160ff16601f03611a2a57506001600160401b0361070a565b604051636d785b1360e01b815260ff83166004820152602401610633565b600080611a5484611bb5565b90508060ff1660ff03611a71576001600160401b0391505061070a565b611a7e8482601f16611980565b91506001600160401b0380831610611ab457604051636d785b1360e01b81526001600160401b0383166004820152602401610633565b60ff83166007600583901c1614611aee5760405161800560e51b81526007600583901c16600482015260ff84166024820152604401610633565b5092915050565b6060818360200151611b0791906124d4565b83515180821115611b35576040516363a056dd60e01b81526004810183905260248101829052604401610633565b836001600160401b03811115611b4d57611b4d611e44565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5092508315611978578451602080870151908183018101908601611b9c81838a611d41565b611ba889896001611d88565b5050505050505092915050565b6000816020015182600001515180821115611bed576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051808301600101519550908190611c0a826124e7565b8152505050505050919050565b600081602001516002611c2a91906124d4565b82515180821115611c58576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600281840181015196509091611c7682846124d4565b9052509395945050505050565b600081602001516004611c9691906124d4565b82515180821115611cc4576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600481840181015196509091611c7682846124d4565b600081602001516008611cf591906124d4565b82515180821115611d23576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600881840181015196509091611c7682846124d4565b5b60208110611d61578151835260209283019290910190601f1901611d42565b8015611d83578151835160208390036101000a60001901801990921691161783525b505050565b60008284600001515180821115611dbc576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8315611dd4576020860151611dd190866124d4565b94505b5050505060209190910181905290565b803563ffffffff81168114610c5c57600080fd5b600080600060608486031215611e0d57600080fd5b611e1684611de4565b95602085013595506040909401359392505050565b600060208284031215611e3d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611e7c57611e7c611e44565b60405290565b60405160c081016001600160401b0381118282101715611e7c57611e7c611e44565b604051601f8201601f191681016001600160401b0381118282101715611ecc57611ecc611e44565b604052919050565b60006001600160401b03821115611eed57611eed611e44565b50601f01601f191660200190565b600060208284031215611f0d57600080fd5b81356001600160401b03811115611f2357600080fd5b8201601f81018413611f3457600080fd5b8035611f47611f4282611ed4565b611ea4565b818152856020838501011115611f5c57600080fd5b81602084016020830137600091810160200191909152949350505050565b815160ff1681526020808301516001600160401b0316908201526040810161070a565b60006040828403121561124457600080fd5b600060208284031215611fc157600080fd5b81356001600160a01b03811681146106c957600080fd5b634e487b7160e01b600052600160045260246000fd5b828152606081016106c96020830184805160ff1682526020908101516001600160401b0316910152565b60006020828403121561202a57600080fd5b5051919050565b60006020828403121561204357600080fd5b8151600581106106c957600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561070a5761070a612068565b600181815b808511156120d25781600019048211156120b8576120b8612068565b808516156120c557918102915b93841c939080029061209c565b509250929050565b6000826120e95750600161070a565b816120f65750600061070a565b816001811461210c576002811461211657612132565b600191505061070a565b60ff84111561212757612127612068565b50506001821b61070a565b5060208310610133831016604e8410600b8410161715612155575081810a61070a565b61215f8383612097565b806000190482111561217357612173612068565b029392505050565b60006106c960ff8416836120da565b8181038181111561070a5761070a612068565b808202811582820484141761070a5761070a612068565b60ff81168114610e2557600080fd5b6001600160401b0381168114610e2557600080fd5b6000604082840312156121ea57600080fd5b6121f2611e5a565b82356121fd816121b4565b8152602083013561220d816121c3565b60208201529392505050565b60006020828403121561222b57600080fd5b8151600681106106c957600080fd5b60005b8381101561225557818101518382015260200161223d565b50506000910152565b8051610c5c816121b4565b8051610c5c816121c3565b6000602080838503121561228757600080fd5b82516001600160401b038082111561229e57600080fd5b90840190604082870312156122b257600080fd5b6122ba611e5a565b825180151581146122ca57600080fd5b815282840151828111156122dd57600080fd5b929092019160c083880312156122f257600080fd5b6122fa611e82565b83518381111561230957600080fd5b84016040818a03121561231b57600080fd5b612323611e5a565b81518581111561233257600080fd5b82019450601f85018a1361234557600080fd5b8451612353611f4282611ed4565b8181528b8983890101111561236757600080fd5b612376828a83018b8a0161223a565b8252509086015186820152815261238e84860161225e565b8582015261239e6040850161225e565b60408201526123af6060850161225e565b60608201526123c060808501612269565b60808201526123d160a08501612269565b60a0820152938101939093525090949350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561240f57600080fd5b81356106c9816121c3565b60006020828403121561242c57600080fd5b81356106c9816121b4565b60208082526032908201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260408201527137b69032b93937b932b2103932b9bab63a1760711b606082015260800190565b6000825161249b81846020870161223a565b9190910192915050565b600083516124b781846020880161223a565b8351908301906124cb81836020880161223a565b01949350505050565b8082018082111561070a5761070a612068565b6000600182016124f9576124f9612068565b506001019056fea26469706673582212203fd060fcccd6987b1c348cdf6374dade9f3e1d81be8485902e4eaeabbf37cc6a64736f6c63430008160033", + "deployedBytecode": "0x60806040526004361061019c5760003560e01c80639938fd0c116100ec578063daaa360c1161008a578063e7d4a01611610064578063e7d4a01614610565578063ec3757ba14610585578063f2fde38b146105a5578063fb476cad146105c557600080fd5b8063daaa360c1461051d578063e30c39781461053d578063e35329f81461055257600080fd5b8063a3252f68116100c6578063a3252f68146103fc578063a60ee26814610451578063adb7c3f714610471578063d08fccc7146104be57600080fd5b80639938fd0c146103875780639bc86fec1461039d578063a04daef0146103bd57600080fd5b806346d1d21a116101595780637104ddb2116101335780637104ddb21461030c578063715018a61461033f57806379ba5097146103545780638da5cb5b1461036957600080fd5b806346d1d21a146102af57806355a7b9c9146102e2578063699b328a1461030457600080fd5b806309ed4607146101a1578063158ef93e146101d357806324cbbfc1146101f857806336b651bb1461022d5780633b13e76e1461025b57806340b41daa1461028f575b600080fd5b3480156101ad57600080fd5b506101b66105e5565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101df57600080fd5b506101e8610651565b60405190151581526020016101ca565b34801561020457600080fd5b50610218610213366004611df8565b610680565b60405163ffffffff90911681526020016101ca565b34801561023957600080fd5b5061024d610248366004611e2b565b6106d0565b6040519081526020016101ca565b34801561026757600080fd5b506101b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561029b57600080fd5b5061024d6102aa366004611e2b565b610710565b3480156102bb57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b3480156102ee57600080fd5b506103026102fd366004611efb565b61074f565b005b61024d6108d5565b34801561031857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b34801561034b57600080fd5b50610302610a7d565b34801561036057600080fd5b50610302610a91565b34801561037557600080fd5b506000546001600160a01b03166101b6565b34801561039357600080fd5b5061024d60045481565b3480156103a957600080fd5b506101e86103b8366004611e2b565b610a99565b3480156103c957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156101e8565b34801561040857600080fd5b50610436610417366004611e2b565b6000908152600660205260409020600281015481546001909201549092565b604080519384526020840192909252908201526060016101ca565b34801561045d57600080fd5b5061024d61046c366004611e2b565b610b6b565b34801561047d57600080fd5b506104a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016101ca565b3480156104ca57600080fd5b506040805180820182526000808252602091820181905260055483518085018552828152830191909152825180840190935260f881901c83526001600160401b0316908201526040516101ca9190611f7a565b34801561052957600080fd5b506101b6610538366004611e2b565b610bfe565b34801561054957600080fd5b506101b6610c61565b61024d610560366004611e2b565b610c75565b34801561057157600080fd5b50610218610580366004611df8565b610d1d565b34801561059157600080fd5b5061024d6105a0366004611f9d565b610d9e565b3480156105b157600080fd5b506103026105c0366004611faf565b610e14565b3480156105d157600080fd5b5061024d6105e0366004611e2b565b610e28565b60006105ef610651565b61063c5760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b60448201526064015b60405180910390fd5b61064c6106476110de565b6111b7565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316151590565b60006106c684843361069186610e28565b604080516001600160a01b03909316602084015282015260600160405160208183030381529060405280519060200120610d1d565b90505b9392505050565b60008082116106e1576106e1611fd8565b60045480831161070a57600081815260066020526040902054610705908490611221565b6106c9565b92915050565b6000818152600660205260408120600201548103610739576107348260045461124a565b61070a565b5060009081526006602052604090206001015490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107945750825b90506000826001600160401b031660011480156107b05750303b155b9050811580156107be575080155b156107dc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561080657845460ff60401b1916600160401b1785555b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087e5760405162461bcd60e51b815260206004820152601d60248201527f436c6f6e61626c653a206e6f7420612064656c65676174652063616c6c0000006044820152606401610633565b61088786611286565b83156108cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000436004541015610a745760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633dc2b7a2347f00000000000000000000000000000000000000000000000000000000000000006109736005546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b6040518463ffffffff1660e01b8152600401610990929190611fee565b60206040518083038185885af11580156109ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109d39190612018565b4360008181526006602052604080822060028101859055600480548083558085529383902060010185905593909355519293509091819033907faf291bb4e1767569c77502edb6ad1009e856f57c09f214886c6becc9836c20c090610a649087907f000000000000000000000000000000000000000000000000000000000000000090918252602082015260400190565b60405180910390a3505050503490565b61064c43610c75565b610a85611297565b610a8f60006112c4565b565b610a8f6112dd565b6000818152600660205260408120817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636f07abcc83600201546040518263ffffffff1660e01b8152600401610afa91815260200190565b602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612031565b90508160020154600014158015610b6357506004816004811115610b6157610b61612052565b145b949350505050565b604051630f7b104360e31b815260048101829052602360248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612018565b6000610c08610651565b610c505760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b6044820152606401610633565b61070a61064783611358565b919050565b600061064c6001546001600160a01b031690565b6000818152600660205260408120600281015415610d15576002810154604051636064d6fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636064d6fd913491610ce29160040190815260200190565b6000604051808303818588803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b50505050505b503492915050565b600080610d2985611434565b610d349060ff61207e565b905060006001610d4583600261217b565b610d4f919061218a565b604080516020810187905290810187905260600160408051601f19818403018152919052805160209091012016905060ff8216610d9263ffffffff88168361219d565b901c9695505050505050565b6000610da8611297565b610db1826115c3565b610dfd5760405162461bcd60e51b815260206004820152601d60248201527f5769746e657452616e646f6d6e6573733a20696e76616c696420534c410000006044820152606401610633565b61070a610e0f368490038401846121d8565b61161c565b610e1c611297565b610e2581611647565b50565b6000818152600660205260408120600201548103610e4c57610e4982610710565b91505b60008281526006602052604081206002015490819003610eae5760405162461bcd60e51b815260206004820181905260248201527f5769746e657452616e646f6d6e6573733a206e6f742072616e646f6d697a65646044820152606401610633565b604051634cddf61560e01b8152600481018290526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634cddf61590602401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190612219565b90506002816005811115610f5057610f50612052565b03610feb576040516359209b3960e01b815260048101839052610b63906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906359209b3990602401600060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe69190810190612274565b611679565b6003816005811115610fff57610fff612052565b0361108357600084815260066020526040812060010154908190036110715760405162461bcd60e51b815260206004820152602260248201527f5769746e657452616e646f6d6e6573733a206661756c74792072616e646f6d696044820152617a6560f01b6064820152608401610633565b61107a81610e28565b95945050505050565b60405162461bcd60e51b815260206004820152602360248201527f5769746e657452616e646f6d6e6573733a2070656e64696e672072616e646f6d604482015262697a6560e81b6064820152608401610633565b5050919050565b6000806110e96116ae565b90506037816000f091506001600160a01b0382166111495760405162461bcd60e51b815260206004820152601760248201527f436c6f6e61626c653a20435245415445206661696c65640000000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a45090565b6040516355a7b9c960e01b815260206004820152600060248201819052906001600160a01b038316906355a7b9c990604401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5093949350505050565b600081831161124457600082815260066020526040902054610705908490611221565b50919050565b60008183101561126e5760008281526006602052604090205461070590849061124a565b50600090815260066020526040902060010154919050565b61128f336112c4565b610e2561170f565b6000546001600160a01b03163314610a8f5760405163118cdaa760e01b8152336004820152602401610633565b600180546001600160a01b0319169055610e2581611730565b33806112e7610c61565b6001600160a01b03161461134f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610633565b610e25816112c4565b6000806113636116ae565b9050826037826000f591506001600160a01b0382166113c45760405162461bcd60e51b815260206004820152601860248201527f436c6f6e61626c653a2043524541544532206661696c656400000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a450919050565b60408051610400810182526000808252600960208301526001928201839052600a6060830152600d6080830152601560a0830152600260c08301819052601d60e0840152600b610100840152600e610120840152601061014084018190526012610160850152601661018085015260196101a085015260036101c0850152601e6101e085015260086102008501819052600c6102208601526014610240860152601c610260860152600f61028086015260116102a086015260186102c086015260076102e08601526013610300860152601b610320860181905260176103408701526006610360870152601a61038087015260056103a087015260046103c08701819052601f6103e08801529688901c637fffffff1680891763ffffffff998a1690911790941c939093179586901c630fffffff1680871796881617901c949094179384901c61ffff168085179592948493611599926307c4acdd929091161761219d565b63ffffffff16901c63ffffffff16602081106115b7576115b76123e7565b60200201519392505050565b6000806115d660408401602085016123fd565b6001600160401b03161180156115fb575060006115f6602084018461241a565b60ff16115b801561070a5750607f611611602084018461241a565b60ff16111592915050565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600581905590565b61164f611297565b6001600160a01b03811661134f57604051631e4fbdf760e01b815260006004820152602401610633565b600081806000015161169d5760405162461bcd60e51b815260040161063390612437565b6106c96116a984611780565b6117b1565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81527f000000000000000000000000000000000000000000000000000000000000000060601b60148201526e5af43d82803e903d91602b57fd5bf360881b602882015290565b60408051808201909152600a8152633b9aca006020820152610e259061161c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608180600001516117a45760405162461bcd60e51b815260040161063390612437565b6106c983602001516117be565b600061070a826020611908565b60608160028060ff16826040015160ff16146117fe57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610633565b61181084600001518560600151611980565b6001600160401b03166080850181905263fffffffe19016118e757600061183f85600001518660400151611a48565b905063ffffffff80821610156118e15784516118649063ffffffff80841690611af516565b6040516020016118749190612489565b604051602081830303815290604052935061189785600001518660400151611a48565b905063ffffffff80821610156118e157845184906118be9063ffffffff80851690611af516565b6040516020016118cf9291906124a5565b60405160208183030381529060405293505b506110d7565b608084015184516119019163ffffffff90811690611af516565b92506110d7565b600060208260ff16111561191e5761191e611fd8565b60008260ff16845111611932578351611937565b8260ff165b905060005b81811015611978578060080285828151811061195a5761195a6123e7565b01602001516001600160f81b031916901c929092179160010161193c565b505092915050565b600060188260ff161015611998575060ff811661070a565b8160ff166018036119b6576119ac83611bb5565b60ff16905061070a565b8160ff166019036119d5576119ca83611c17565b61ffff16905061070a565b8160ff16601a036119f6576119e983611c83565b63ffffffff16905061070a565b8160ff16601b03611a1157611a0a83611ce2565b905061070a565b8160ff16601f03611a2a57506001600160401b0361070a565b604051636d785b1360e01b815260ff83166004820152602401610633565b600080611a5484611bb5565b90508060ff1660ff03611a71576001600160401b0391505061070a565b611a7e8482601f16611980565b91506001600160401b0380831610611ab457604051636d785b1360e01b81526001600160401b0383166004820152602401610633565b60ff83166007600583901c1614611aee5760405161800560e51b81526007600583901c16600482015260ff84166024820152604401610633565b5092915050565b6060818360200151611b0791906124d4565b83515180821115611b35576040516363a056dd60e01b81526004810183905260248101829052604401610633565b836001600160401b03811115611b4d57611b4d611e44565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5092508315611978578451602080870151908183018101908601611b9c81838a611d41565b611ba889896001611d88565b5050505050505092915050565b6000816020015182600001515180821115611bed576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051808301600101519550908190611c0a826124e7565b8152505050505050919050565b600081602001516002611c2a91906124d4565b82515180821115611c58576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600281840181015196509091611c7682846124d4565b9052509395945050505050565b600081602001516004611c9691906124d4565b82515180821115611cc4576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600481840181015196509091611c7682846124d4565b600081602001516008611cf591906124d4565b82515180821115611d23576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600881840181015196509091611c7682846124d4565b5b60208110611d61578151835260209283019290910190601f1901611d42565b8015611d83578151835160208390036101000a60001901801990921691161783525b505050565b60008284600001515180821115611dbc576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8315611dd4576020860151611dd190866124d4565b94505b5050505060209190910181905290565b803563ffffffff81168114610c5c57600080fd5b600080600060608486031215611e0d57600080fd5b611e1684611de4565b95602085013595506040909401359392505050565b600060208284031215611e3d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611e7c57611e7c611e44565b60405290565b60405160c081016001600160401b0381118282101715611e7c57611e7c611e44565b604051601f8201601f191681016001600160401b0381118282101715611ecc57611ecc611e44565b604052919050565b60006001600160401b03821115611eed57611eed611e44565b50601f01601f191660200190565b600060208284031215611f0d57600080fd5b81356001600160401b03811115611f2357600080fd5b8201601f81018413611f3457600080fd5b8035611f47611f4282611ed4565b611ea4565b818152856020838501011115611f5c57600080fd5b81602084016020830137600091810160200191909152949350505050565b815160ff1681526020808301516001600160401b0316908201526040810161070a565b60006040828403121561124457600080fd5b600060208284031215611fc157600080fd5b81356001600160a01b03811681146106c957600080fd5b634e487b7160e01b600052600160045260246000fd5b828152606081016106c96020830184805160ff1682526020908101516001600160401b0316910152565b60006020828403121561202a57600080fd5b5051919050565b60006020828403121561204357600080fd5b8151600581106106c957600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561070a5761070a612068565b600181815b808511156120d25781600019048211156120b8576120b8612068565b808516156120c557918102915b93841c939080029061209c565b509250929050565b6000826120e95750600161070a565b816120f65750600061070a565b816001811461210c576002811461211657612132565b600191505061070a565b60ff84111561212757612127612068565b50506001821b61070a565b5060208310610133831016604e8410600b8410161715612155575081810a61070a565b61215f8383612097565b806000190482111561217357612173612068565b029392505050565b60006106c960ff8416836120da565b8181038181111561070a5761070a612068565b808202811582820484141761070a5761070a612068565b60ff81168114610e2557600080fd5b6001600160401b0381168114610e2557600080fd5b6000604082840312156121ea57600080fd5b6121f2611e5a565b82356121fd816121b4565b8152602083013561220d816121c3565b60208201529392505050565b60006020828403121561222b57600080fd5b8151600681106106c957600080fd5b60005b8381101561225557818101518382015260200161223d565b50506000910152565b8051610c5c816121b4565b8051610c5c816121c3565b6000602080838503121561228757600080fd5b82516001600160401b038082111561229e57600080fd5b90840190604082870312156122b257600080fd5b6122ba611e5a565b825180151581146122ca57600080fd5b815282840151828111156122dd57600080fd5b929092019160c083880312156122f257600080fd5b6122fa611e82565b83518381111561230957600080fd5b84016040818a03121561231b57600080fd5b612323611e5a565b81518581111561233257600080fd5b82019450601f85018a1361234557600080fd5b8451612353611f4282611ed4565b8181528b8983890101111561236757600080fd5b612376828a83018b8a0161223a565b8252509086015186820152815261238e84860161225e565b8582015261239e6040850161225e565b60408201526123af6060850161225e565b60608201526123c060808501612269565b60808201526123d160a08501612269565b60a0820152938101939093525090949350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561240f57600080fd5b81356106c9816121c3565b60006020828403121561242c57600080fd5b81356106c9816121b4565b60208082526032908201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260408201527137b69032b93937b932b2103932b9bab63a1760711b606082015260800190565b6000825161249b81846020870161223a565b9190910192915050565b600083516124b781846020880161223a565b8351908301906124cb81836020880161223a565b01949350505050565b8082018082111561070a5761070a612068565b6000600182016124f9576124f9612068565b506001019056fea26469706673582212203fd060fcccd6987b1c348cdf6374dade9f3e1d81be8485902e4eaeabbf37cc6a64736f6c63430008160033" +} \ No newline at end of file diff --git a/migrations/abis/WitnetRequest.json b/artifacts/WitnetRequest.json similarity index 85% rename from migrations/abis/WitnetRequest.json rename to artifacts/WitnetRequest.json index 153fa6057..0713fd52e 100644 --- a/migrations/abis/WitnetRequest.json +++ b/artifacts/WitnetRequest.json @@ -1,4 +1,7 @@ -[ +{ + "contractName": "WitnetRequest", + "sourceName": "contracts/WitnetRequest.sol", + "abi": [ { "anonymous": false, "inputs": [ @@ -61,9 +64,9 @@ "name": "class", "outputs": [ { - "internalType": "bytes4", + "internalType": "string", "name": "", - "type": "bytes4" + "type": "string" } ], "stateMutability": "view", @@ -89,14 +92,14 @@ { "components": [ { - "internalType": "enum WitnetV2.RadonReducerOpcodes", + "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { - "internalType": "enum WitnetV2.RadonFilterOpcodes", + "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, @@ -106,17 +109,12 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonFilter[]", + "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonReducer", + "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } @@ -142,12 +140,12 @@ "type": "uint8" }, { - "internalType": "enum WitnetV2.DataRequestMethods", + "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "uint8" }, { - "internalType": "enum WitnetV2.RadonDataTypes", + "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "uint8" }, @@ -172,7 +170,7 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonRetrieval", + "internalType": "struct Witnet.RadonRetrieval", "name": "", "type": "tuple" } @@ -200,14 +198,14 @@ { "components": [ { - "internalType": "enum WitnetV2.RadonReducerOpcodes", + "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { - "internalType": "enum WitnetV2.RadonFilterOpcodes", + "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, @@ -217,17 +215,12 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonFilter[]", + "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonReducer", + "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } @@ -279,7 +272,7 @@ "name": "resultDataType", "outputs": [ { - "internalType": "enum WitnetV2.RadonDataTypes", + "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "uint8" } @@ -300,6 +293,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "tally", @@ -345,6 +351,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "template", @@ -397,4 +416,5 @@ "stateMutability": "view", "type": "function" } - ] \ No newline at end of file + ] +} \ No newline at end of file diff --git a/artifacts/WitnetRequestBoard.json b/artifacts/WitnetRequestBoard.json new file mode 100644 index 000000000..d47046a6d --- /dev/null +++ b/artifacts/WitnetRequestBoard.json @@ -0,0 +1,815 @@ +{ + "contractName": "WitnetRequestBoard", + "sourceName": "contracts/WitnetRequestBoard.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "witReward", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmReward", + "type": "uint256" + } + ], + "name": "WitnetQuery", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + } + ], + "name": "WitnetQueryReported", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmReward", + "type": "uint256" + } + ], + "name": "WitnetQueryRewardUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmCallbackGas", + "type": "uint256" + } + ], + "name": "WitnetResponseDelivered", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "resultCborBytes", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmGasPrice", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "evmCallbackGas", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "evmCallbackRevertReason", + "type": "string" + } + ], + "name": "WitnetResponseDeliveryFailed", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "uint16", + "name": "resultMaxSize", + "type": "uint16" + } + ], + "name": "estimateBaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "radHash", + "type": "bytes32" + } + ], + "name": "estimateBaseFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "gasPrice", + "type": "uint256" + }, + { + "internalType": "uint96", + "name": "callbackGasLimit", + "type": "uint96" + } + ], + "name": "estimateBaseFeeWithCallback", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "fetchQueryResponse", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "fromFinality", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQuery", + "outputs": [ + { + "components": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "fromCallbackGas", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "SLA", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "RAD", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "reserved1", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "evmReward", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "bytecode", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Request", + "name": "request", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "fromFinality", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Response", + "name": "response", + "type": "tuple" + } + ], + "internalType": "struct WitnetV2.Query", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryBytecode", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryRequest", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryResponse", + "outputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "fromFinality", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "tallyHash", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "cborBytes", + "type": "bytes" + } + ], + "internalType": "struct WitnetV2.Response", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryResult", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "success", + "type": "bool" + }, + { + "components": [ + { + "components": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "cursor", + "type": "uint256" + } + ], + "internalType": "struct WitnetBuffer.Buffer", + "name": "buffer", + "type": "tuple" + }, + { + "internalType": "uint8", + "name": "initialByte", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "majorType", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "additionalInformation", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "len", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "tag", + "type": "uint64" + } + ], + "internalType": "struct WitnetCBOR.CBOR", + "name": "value", + "type": "tuple" + } + ], + "internalType": "struct Witnet.Result", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryResultAuditTrail", + "outputs": [ + { + "internalType": "uint256", + "name": "witnetTimestamp", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "witnetTallyHash", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "witnetEvmFinalityBlock", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryResultError", + "outputs": [ + { + "components": [ + { + "internalType": "enum Witnet.ResultErrorCodes", + "name": "code", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "internalType": "struct Witnet.ResultError", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryResultStatus", + "outputs": [ + { + "internalType": "enum WitnetV2.ResultStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "getQueryStatus", + "outputs": [ + { + "internalType": "enum WitnetV2.QueryStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "queryRAD", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "querySLA", + "type": "tuple" + } + ], + "name": "postRequest", + "outputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "queryUnverifiedBytecode", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "querySLA", + "type": "tuple" + }, + { + "internalType": "uint96", + "name": "queryCallbackGasLimit", + "type": "uint96" + } + ], + "name": "postRequestWithCallback", + "outputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "queryRAD", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "witnessingCommitteeSize", + "type": "uint8" + }, + { + "internalType": "uint64", + "name": "witnessingWitTotalReward", + "type": "uint64" + } + ], + "internalType": "struct WitnetV2.RadonSLA", + "name": "querySLA", + "type": "tuple" + }, + { + "internalType": "uint96", + "name": "queryCallbackGasLimit", + "type": "uint96" + } + ], + "name": "postRequestWithCallback", + "outputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "queryId", + "type": "uint256" + } + ], + "name": "upgradeQueryReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "channel", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "factory", + "outputs": [ + { + "internalType": "contract WitnetRequestFactory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x" +} \ No newline at end of file diff --git a/artifacts/WitnetRequestFactory.json b/artifacts/WitnetRequestFactory.json new file mode 100644 index 000000000..ab4c0c4ad --- /dev/null +++ b/artifacts/WitnetRequestFactory.json @@ -0,0 +1,113 @@ +{ + "contractName": "WitnetRequestFactory", + "sourceName": "contracts/WitnetRequestFactory.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "template", + "type": "address" + }, + { + "indexed": false, + "internalType": "bool", + "name": "parameterized", + "type": "bool" + } + ], + "name": "WitnetRequestTemplateBuilt", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "bytes32[]", + "name": "sourcesIds", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "aggregatorId", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "tallyId", + "type": "bytes32" + }, + { + "internalType": "uint16", + "name": "resultDataMaxSize", + "type": "uint16" + } + ], + "name": "buildRequestTemplate", + "outputs": [ + { + "internalType": "address", + "name": "template", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "class", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "registry", + "outputs": [ + { + "internalType": "contract WitnetBytecodes", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x", + "deployedBytecode": "0x" +} \ No newline at end of file diff --git a/migrations/abis/WitnetRequestTemplate.json b/artifacts/WitnetRequestTemplate.json similarity index 83% rename from migrations/abis/WitnetRequestTemplate.json rename to artifacts/WitnetRequestTemplate.json index 45f545f1a..623bfd380 100644 --- a/migrations/abis/WitnetRequestTemplate.json +++ b/artifacts/WitnetRequestTemplate.json @@ -1,4 +1,7 @@ -[ +{ + "contractName": "WitnetRequestTemplate", + "sourceName": "contracts/WitnetRequestTemplate.sol", + "abi": [ { "anonymous": false, "inputs": [ @@ -29,9 +32,9 @@ "name": "class", "outputs": [ { - "internalType": "bytes4", + "internalType": "string", "name": "", - "type": "bytes4" + "type": "string" } ], "stateMutability": "view", @@ -63,6 +66,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "specs", + "outputs": [ + { + "internalType": "bytes4", + "name": "", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "version", @@ -76,6 +92,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "witnet", + "outputs": [ + { + "internalType": "contract WitnetRequestBoard", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "aggregator", @@ -120,7 +149,7 @@ "name": "resultDataType", "outputs": [ { - "internalType": "enum WitnetV2.RadonDataTypes", + "internalType": "enum Witnet.RadonDataTypes", "name": "", "type": "uint8" } @@ -161,14 +190,14 @@ { "components": [ { - "internalType": "enum WitnetV2.RadonReducerOpcodes", + "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { - "internalType": "enum WitnetV2.RadonFilterOpcodes", + "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, @@ -178,17 +207,12 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonFilter[]", + "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonReducer", + "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } @@ -214,12 +238,12 @@ "type": "uint8" }, { - "internalType": "enum WitnetV2.DataRequestMethods", + "internalType": "enum Witnet.RadonDataRequestMethods", "name": "method", "type": "uint8" }, { - "internalType": "enum WitnetV2.RadonDataTypes", + "internalType": "enum Witnet.RadonDataTypes", "name": "resultDataType", "type": "uint8" }, @@ -244,7 +268,7 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonRetrieval", + "internalType": "struct Witnet.RadonRetrieval", "name": "", "type": "tuple" } @@ -272,14 +296,14 @@ { "components": [ { - "internalType": "enum WitnetV2.RadonReducerOpcodes", + "internalType": "enum Witnet.RadonReducerOpcodes", "name": "opcode", "type": "uint8" }, { "components": [ { - "internalType": "enum WitnetV2.RadonFilterOpcodes", + "internalType": "enum Witnet.RadonFilterOpcodes", "name": "opcode", "type": "uint8" }, @@ -289,17 +313,12 @@ "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonFilter[]", + "internalType": "struct Witnet.RadonFilter[]", "name": "filters", "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" } ], - "internalType": "struct WitnetV2.RadonReducer", + "internalType": "struct Witnet.RadonReducer", "name": "", "type": "tuple" } @@ -345,4 +364,5 @@ "stateMutability": "nonpayable", "type": "function" } - ] \ No newline at end of file + ] +} \ No newline at end of file diff --git a/artifacts/index.js b/artifacts/index.js new file mode 100644 index 000000000..2a546b732 --- /dev/null +++ b/artifacts/index.js @@ -0,0 +1,8 @@ +module.exports = { + WitnetBytecodes: require("../artifacts/WitnetBytecodes.json"), + WitnetPriceFeeds: require("../artifacts/WitnetPriceFeeds.json"), + WitnetRandomness: require("../artifacts/WitnetRandomness.json"), + WitnetRequest: require("../artifacts/WitnetRequest.json"), + WitnetRequestFactory: require("../artifacts/witnetRequestFactory.json"), + WitnetRequestTemplate: require("../artifacts/WitnetRequestTemplate.json"), +}; diff --git a/index.js b/index.js deleted file mode 100644 index ee1c80d51..000000000 --- a/index.js +++ /dev/null @@ -1,6 +0,0 @@ -const addresses = require("./migrations/witnet.addresses.json") -const settings = require("./migrations/witnet.settings") -module.exports = { - addresses, - settings -} \ No newline at end of file diff --git a/migrations/abis/WitnetBytecodes.json b/migrations/abis/WitnetBytecodes.json deleted file mode 100644 index 3641108bd..000000000 --- a/migrations/abis/WitnetBytecodes.json +++ /dev/null @@ -1,954 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonReducer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonRetrieval", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonSLA", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "NewDataProvider", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadonReducerHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadonRetrievalHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewSlaHash", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "slahHash", - "type": "bytes32" - } - ], - "name": "bytecodeOf", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "bytecodeOf", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "hashOf", - "outputs": [ - { - "internalType": "bytes32", - "name": "drQueryHash", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "sources", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "aggregator", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tally", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "resultMaxSize", - "type": "uint16" - }, - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "hashOf", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "hashWeightWitsOf", - "outputs": [ - { - "internalType": "bytes32", - "name": "drQueryHash", - "type": "bytes32" - }, - { - "internalType": "uint32", - "name": "drQueryWeight", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "drQueryWits", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "lookupDataProvider", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "authority", - "type": "string" - } - ], - "name": "lookupDataProviderIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "lookupDataProviderSources", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonReducer", - "outputs": [ - { - "components": [ - { - "internalType": "enum WitnetV2.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum WitnetV2.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestAggregator", - "outputs": [ - { - "components": [ - { - "internalType": "enum WitnetV2.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum WitnetV2.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestResultDataType", - "outputs": [ - { - "internalType": "enum WitnetV2.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestResultMaxSize", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestSources", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestSourcesCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestTally", - "outputs": [ - { - "components": [ - { - "internalType": "enum WitnetV2.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum WitnetV2.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrieval", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum WitnetV2.DataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum WitnetV2.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonRetrieval", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrievalArgsCount", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrievalResultDataType", - "outputs": [ - { - "internalType": "enum WitnetV2.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "lookupRadonSLA", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "lookupRadonSLAReward", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDataProviders", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "enum WitnetV2.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum WitnetV2.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonReducer", - "name": "reducer", - "type": "tuple" - } - ], - "name": "verifyRadonReducer", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "sources", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "aggregator", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tally", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "resultMaxSize", - "type": "uint16" - }, - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "verifyRadonRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum WitnetV2.DataRequestMethods", - "name": "requestMethod", - "type": "uint8" - }, - { - "internalType": "string", - "name": "requestSchema", - "type": "string" - }, - { - "internalType": "string", - "name": "requestAuthority", - "type": "string" - }, - { - "internalType": "string", - "name": "requestPath", - "type": "string" - }, - { - "internalType": "string", - "name": "requestQuery", - "type": "string" - }, - { - "internalType": "string", - "name": "requestBody", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "requestHeaders", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "requestRadonScript", - "type": "bytes" - } - ], - "name": "verifyRadonRetrieval", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum WitnetV2.DataRequestMethods", - "name": "requestMethod", - "type": "uint8" - }, - { - "internalType": "string", - "name": "requestURL", - "type": "string" - }, - { - "internalType": "string", - "name": "requestBody", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "requestHeaders", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "requestRadonScript", - "type": "bytes" - } - ], - "name": "verifyRadonRetrieval", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "sla", - "type": "tuple" - } - ], - "name": "verifyRadonSLA", - "outputs": [ - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/migrations/abis/WitnetPriceFeeds.json b/migrations/abis/WitnetPriceFeeds.json deleted file mode 100644 index 421f539bb..000000000 --- a/migrations/abis/WitnetPriceFeeds.json +++ /dev/null @@ -1,1359 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "contract WitnetRequestBoard", - "name": "_wrb", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "EmptyBuffer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "range", - "type": "uint256" - } - ], - "name": "IndexOutOfBounds", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidLengthEncoding", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "read", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "UnexpectedMajorType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unexpected", - "type": "uint256" - } - ], - "name": "UnsupportedMajorType", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "DeletedFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "SettledFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "solver", - "type": "address" - } - ], - "name": "SettledFeedSolver", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "SettledRadonSLA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "UpdatingFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "UpdatingFeedReward", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "solver", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "codehash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "WitnetPriceSolverDeployed", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "dataType", - "outputs": [ - { - "internalType": "enum WitnetV2.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "prefix", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract IWitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "hash", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupCaption", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "supportedFeeds", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "_ids", - "type": "bytes4[]" - }, - { - "internalType": "string[]", - "name": "_captions", - "type": "string[]" - }, - { - "internalType": "bytes32[]", - "name": "_solvers", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "supportsCaption", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalFeeds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultRadonSLA", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - }, - { - "internalType": "uint256", - "name": "_evmGasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "estimateUpdateBaseFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - }, - { - "internalType": "uint256", - "name": "_evmGasPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "estimateUpdateBaseFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestResponse", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct Witnet.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestResult", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateQueryId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateRequest", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "gasprice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "internalType": "struct Witnet.Request", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResponse", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct Witnet.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResultError", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.ResultErrorCodes", - "name": "code", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "internalType": "struct Witnet.ResultError", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResultStatus", - "outputs": [ - { - "internalType": "enum Witnet.ResultStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupBytecode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupRadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupRetrievals", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum WitnetV2.DataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum WitnetV2.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.RadonRetrieval[]", - "name": "_retrievals", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract IWitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "internalType": "bytes32", - "name": "_slaHash", - "type": "bytes32" - } - ], - "name": "requestUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "_usedFunds", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "requestUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "deleteFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "sla", - "type": "tuple" - } - ], - "name": "settleDefaultRadonSLA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "contract WitnetRequest", - "name": "request", - "type": "address" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "contract WitnetRequestTemplate", - "name": "template", - "type": "address" - }, - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "address", - "name": "solver", - "type": "address" - }, - { - "internalType": "string[]", - "name": "deps", - "type": "string[]" - } - ], - "name": "settleFeedSolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupPriceSolver", - "outputs": [ - { - "internalType": "contract IWitnetPriceSolver", - "name": "_solverAddress", - "type": "address" - }, - { - "internalType": "string[]", - "name": "_solverDeps", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestPrice", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "enum Witnet.ResultStatus", - "name": "status", - "type": "uint8" - } - ], - "internalType": "struct IWitnetPriceSolver.Price", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "feedIds", - "type": "bytes4[]" - } - ], - "name": "latestPrices", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "enum Witnet.ResultStatus", - "name": "status", - "type": "uint8" - } - ], - "internalType": "struct IWitnetPriceSolver.Price[]", - "name": "_prices", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initcode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "deployPriceSolver", - "outputs": [ - { - "internalType": "address", - "name": "_solver", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initcode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "determinePriceSolverAddress", - "outputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "feedId", - "type": "bytes32" - } - ], - "name": "valueFor", - "outputs": [ - { - "internalType": "int256", - "name": "_value", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_status", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/migrations/abis/WitnetRandomness.json b/migrations/abis/WitnetRandomness.json deleted file mode 100644 index 622be3e19..000000000 --- a/migrations/abis/WitnetRandomness.json +++ /dev/null @@ -1,649 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "contract WitnetRequestBoard", - "name": "_wrb", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "range", - "type": "uint256" - } - ], - "name": "IndexOutOfBounds", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidLengthEncoding", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "read", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "UnexpectedMajorType", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "by", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "self", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "clone", - "type": "address" - } - ], - "name": "Cloned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "prevBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "witnetQueryId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "witnetRequestHash", - "type": "bytes32" - } - ], - "name": "Randomized", - "type": "event" - }, - { - "inputs": [], - "name": "cloned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRandomizeBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "self", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnetRandomnessRequest", - "outputs": [ - { - "internalType": "contract WitnetRequest", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "clone", - "outputs": [ - { - "internalType": "contract WitnetRandomness", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_salt", - "type": "bytes32" - } - ], - "name": "cloneDeterministic", - "outputs": [ - { - "internalType": "contract WitnetRandomness", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_initData", - "type": "bytes" - } - ], - "name": "initializeClone", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "_radonSLA", - "type": "tuple" - } - ], - "name": "settleWitnetRandomnessSLA", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasPrice", - "type": "uint256" - } - ], - "name": "estimateRandomizeFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomizeData", - "outputs": [ - { - "internalType": "address", - "name": "_from", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_prevBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nextBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessAfter", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessNextBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessPrevBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "isRandomized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_range", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "random", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_range", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_seed", - "type": "bytes32" - } - ], - "name": "random", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "randomize", - "outputs": [ - { - "internalType": "uint256", - "name": "_usedFunds", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "upgradeRandomizeFee", - "outputs": [ - { - "internalType": "uint256", - "name": "_usedFunds", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnetRandomnessSLA", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/migrations/abis/WitnetRequestBoard.json b/migrations/abis/WitnetRequestBoard.json deleted file mode 100644 index e01c5649f..000000000 --- a/migrations/abis/WitnetRequestBoard.json +++ /dev/null @@ -1,1088 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - } - ], - "name": "DeletedQuery", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - } - ], - "name": "PostedRequest", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - } - ], - "name": "PostedResult", - "type": "event" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "_result", - "type": "tuple" - } - ], - "name": "asBytes32", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "_result", - "type": "tuple" - } - ], - "name": "asErrorMessage", - "outputs": [ - { - "internalType": "enum Witnet.ResultErrorCodes", - "name": "", - "type": "uint8" - }, - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "_result", - "type": "tuple" - } - ], - "name": "asUint64", - "outputs": [ - { - "internalType": "uint64", - "name": "", - "type": "uint64" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "checkResultError", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.ResultErrorCodes", - "name": "code", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "internalType": "struct Witnet.ResultError", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "checkResultStatus", - "outputs": [ - { - "internalType": "enum Witnet.ResultStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "deleteQuery", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct Witnet.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasPrice", - "type": "uint256" - } - ], - "name": "estimateReward", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getNextQueryId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "getQueryData", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "gasprice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "internalType": "struct Witnet.Request", - "name": "request", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct Witnet.Response", - "name": "response", - "type": "tuple" - }, - { - "internalType": "address", - "name": "from", - "type": "address" - } - ], - "internalType": "struct Witnet.Query", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "getQueryStatus", - "outputs": [ - { - "internalType": "enum Witnet.QueryStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "_result", - "type": "tuple" - } - ], - "name": "isOk", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "postRequest", - "outputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IWitnetRequest", - "name": "addr", - "type": "address" - } - ], - "name": "postRequest", - "outputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "numWitnesses", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minConsensusPercentage", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "witnessCollateral", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minerCommitRevealFee", - "type": "uint256" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "slaParams", - "type": "tuple" - } - ], - "name": "postRequest", - "outputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readRequest", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "addr", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "gasprice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "reward", - "type": "uint256" - } - ], - "internalType": "struct Witnet.Request", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readRequestBytecode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readRequestGasPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readRequestReward", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readResponse", - "outputs": [ - { - "components": [ - { - "internalType": "address", - "name": "reporter", - "type": "address" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "drTxHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct Witnet.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readResponseDrTxHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readResponseReporter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readResponseResult", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "readResponseTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_cborBytes", - "type": "bytes" - } - ], - "name": "resultFromCborBytes", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_queryId", - "type": "uint256" - } - ], - "name": "upgradeReward", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract WitnetRequestFactory", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/migrations/abis/WitnetRequestFactory.json b/migrations/abis/WitnetRequestFactory.json deleted file mode 100644 index c603b787f..000000000 --- a/migrations/abis/WitnetRequestFactory.json +++ /dev/null @@ -1,81 +0,0 @@ -[ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "template", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "parameterized", - "type": "bool" - } - ], - "name": "WitnetRequestTemplateBuilt", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "sourcesIds", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "aggregatorId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tallyId", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "resultDataMaxSize", - "type": "uint16" - } - ], - "name": "buildRequestTemplate", - "outputs": [ - { - "internalType": "address", - "name": "template", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] \ No newline at end of file diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index a3382c969..b523ab6f0 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -1,5 +1,5 @@ const addresses = require("../witnet.addresses") -const utils = require("../../scripts/utils") +const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 451663e57..29d1239e2 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -1,7 +1,5 @@ -const { merge } = require("lodash") - -const settings = require("../witnet.settings") -const utils = require("../../scripts/utils") +const settings = require("../../settings") +const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") @@ -14,11 +12,7 @@ module.exports = async function (_, network, [, from]) { if (!addresses[ecosystem]) addresses[ecosystem] = {} if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) + const targets = settings.getArtifacts(network); const libs = [ targets.WitnetErrorsLib, targets.WitnetEncodingLib, @@ -26,7 +20,7 @@ module.exports = async function (_, network, [, from]) { ] const deployer = await WitnetDeployer.deployed() - for (index in libs) { + for (const index in libs) { const key = libs[index] const artifact = artifacts.require(key) if (utils.isNullAddress(addresses[ecosystem][network][key])) { diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index cf999f89b..6dfdc3dc9 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -1,9 +1,7 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const utils = require("../../scripts/utils") +const ethUtils = require("ethereumjs-util") +const settings = require("../../settings") +const utils = require("../../src/utils") const version = `${ require("../../package").version }-${ @@ -20,86 +18,72 @@ module.exports = async function (_, network, [, from]) { if (!addresses[ecosystem]) addresses[ecosystem] = {} if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) + const specs = settings.getSpecs(network); + const targets = settings.getArtifacts(network); // Deploy/upgrade WitnetBytecodes target implementation, if required - { - await deploy({ - from, - ecosystem, - network, - targets, - key: targets.WitnetBytecodes, - libs: specs.WitnetBytecodes.libs, - immutables: specs.WitnetBytecodes.immutables, - intrinsics: { - types: ["bool", "bytes32"], - values: [ + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetBytecodes, + libs: specs.WitnetBytecodes.libs, + immutables: specs.WitnetBytecodes.immutables, + intrinsics: { + types: ["bool", "bytes32"], + values: [ /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - if (!isDryRun) { - utils.saveAddresses(addresses) - } + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } // Deploy/upgrade WitnetRequestFactory target implementation, if required - { - await deploy({ - from, - ecosystem, - network, - targets, - key: targets.WitnetRequestFactory, - libs: specs.WitnetRequestFactory.libs, - immutables: specs.WitnetRequestFactory.immutables, - intrinsics: { - types: ["address", "address", "bool", "bytes32"], - values: [ + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetRequestFactory, + libs: specs.WitnetRequestFactory.libs, + immutables: specs.WitnetRequestFactory.immutables, + intrinsics: { + types: ["address", "address", "bool", "bytes32"], + values: [ /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - if (!isDryRun) { - utils.saveAddresses(addresses) - } + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } // Deploy/upgrade WitnetRequestBoard target implementation, if required - { - await deploy({ - from, - ecosystem, - network, - targets, - key: targets.WitnetRequestBoard, - libs: specs.WitnetRequestBoard.libs, - immutables: specs.WitnetRequestBoard.immutables, - intrinsics: { - types: ["address", "address", "bool", "bytes32"], - values: [ + await deploy({ + from, + ecosystem, + network, + targets, + key: targets.WitnetRequestBoard, + libs: specs.WitnetRequestBoard.libs, + immutables: specs.WitnetRequestBoard.immutables, + intrinsics: { + types: ["address", "address", "bool", "bytes32"], + values: [ /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), - /* _upgradable */ true, - /* _versionTag */ utils.fromAscii(version), - ], - }, - }) - if (!isDryRun) { - utils.saveAddresses(addresses) - } + /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + if (!isDryRun) { + utils.saveAddresses(addresses) } } @@ -121,7 +105,7 @@ async function deploy (specs) { } const coreBytecode = link(contract.toJSON().bytecode, libs, targets) if (coreBytecode.indexOf("__") > -1) { - console.info(bytecode) + console.info(coreBytecode) console.info("Error: Cannot deploy due to some missing libs") process.exit(1) } @@ -153,7 +137,7 @@ async function determineProxyAddr (from, nonce) { function link (bytecode, libs, targets) { if (libs && Array.isArray(libs) && libs.length > 0) { - for (index in libs) { + 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)) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 08f104d1a..0a7d4a55a 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -1,9 +1,8 @@ +const addresses = require("../witnet.addresses") const ethUtils = require("ethereumjs-util") const { merge } = require("lodash") - -const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const utils = require("../../scripts/utils") +const settings = require("../../settings") +const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") @@ -16,22 +15,16 @@ module.exports = async function (_, network, [, from, reporter]) { if (!addresses[ecosystem]) addresses[ecosystem] = {} if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) + const targets = settings.getArtifacts(network); + const specs = settings.getSpecs(network); + const singletons = [ "WitnetBytecodes", "WitnetRequestFactory", "WitnetRequestBoard", ] + // inject `reporter` within array of addresses as first initialization args specs.WitnetRequestBoard.mutables = merge({ types: ["address[]"], values: [[reporter]], @@ -39,7 +32,7 @@ module.exports = async function (_, network, [, from, reporter]) { ) // Deploy/upgrade singleton proxies, if required - for (index in singletons) { + for (const index in singletons) { await deploy({ from, ecosystem, @@ -59,7 +52,9 @@ async function deploy (target) { const mutables = specs[key].mutables const proxy = artifacts.require(key) - const proxy_salt = specs[key].vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") : "0x0" + const proxySalt = specs[key].vanity + ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") + : "0x0" if (utils.isNullAddress(addresses[ecosystem][network][key])) { utils.traceHeader(`Deploying '${key}'...`) @@ -67,17 +62,17 @@ async function deploy (target) { 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() - const proxyAddr = await deployer.determineProxyAddr.call(proxy_salt, { from }) + const 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(proxy_salt, impl.address, initdata, { from }) + const tx = await deployer.proxify(proxySalt, impl.address, initdata, { from }) utils.traceTx(tx) // save/overwrite exportable abi file - utils.saveJsonAbi(key, proxy.abi) + utils.saveJsonArtifact(key, proxy) } else { try { const oldImplAddr = await getProxyImplementation(from, proxyAddr) @@ -85,10 +80,10 @@ async function deploy (target) { 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}\")`) + console.info(`Error: proxy address already taken ("${oldClass}" != "${newClass}")`) process.exit(1) } else { - console.info(" ", `> recovered proxy address on class \"${oldClass}\" ;-)`) + console.info(" ", `> recovered proxy address on class "${oldClass}" ;-)`) } } catch (ex) { console.info("Error: cannot check proxy recoverability:", ex) @@ -109,8 +104,10 @@ async function deploy (target) { const oldVersion = await oldImpl.version.call({ from }) const newVersion = await newImpl.version.call({ from }) if ( - process.argv.length >= 3 && process.argv[2].includes("--upgrade-all") || ["y", "yes"].includes( - (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [y / N]`)).toLowerCase().trim() + (process.argv.length >= 3 && process.argv[2].includes("--upgrade-all")) || ( + ["y", "yes"].includes( + (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [y / N]`)).toLowerCase().trim() + ) ) ) { const initdata = mutables ? web3.eth.abi.encodeParameters(mutables.types, mutables.values) : "0x" @@ -121,7 +118,7 @@ async function deploy (target) { const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) utils.traceTx(tx) // save/overwrite exportable abi file - utils.saveJsonAbi(key, proxy.abi) + utils.saveJsonArtifactAbi(key, proxy) } } else { utils.traceHeader(`Skipped '${key}'`) @@ -139,11 +136,11 @@ async function deploy (target) { } async function getProxyImplementation (from, proxyAddr) { - proxy = await WitnetProxy.at(proxyAddr) + const proxy = await WitnetProxy.at(proxyAddr) return await proxy.implementation.call({ from }) } async function upgradeProxyTo (from, proxy, implAddr, initData) { - proxy = await WitnetProxy.at(proxy.address) - return await proxy.upgradeTo(implAddr, initData, { from }) + const proxyContract = await WitnetProxy.at(proxy.address) + return await proxyContract.upgradeTo(implAddr, initData, { from }) } diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 3080cc8ab..9ab708c55 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -1,9 +1,7 @@ -const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") - const addresses = require("../witnet.addresses") -const settings = require("../witnet.settings") -const utils = require("../../scripts/utils") +const ethUtils = require("ethereumjs-util") +const settings = require("../../settings") +const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") @@ -15,16 +13,8 @@ module.exports = async function (_, network, [,,, from]) { if (!addresses[ecosystem]) addresses[ecosystem] = {} if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - const specs = merge( - settings.specs.default, - settings.specs[ecosystem], - settings.specs[network], - ) - const targets = merge( - settings.artifacts.default, - settings.artifacts[ecosystem], - settings.artifacts[network] - ) + const specs = settings.getSpecs(network); + const targets = settings.getArtifacts(network); // Deploy the WitnetPriceFeeds oracle, if required { @@ -100,7 +90,7 @@ async function deploy (specs) { if ((await web3.eth.getCode(dappAddr)).length > 3) { addresses[ecosystem][network][key] = dappAddr // save/overwrite exportable abi file - utils.saveJsonAbi(key, artifact.abi) + utils.saveJsonArtifact(key, artifact) } else { console.info(`Contract was not deployed on expected address: ${dappAddr}`) console.log(tx.receipt) diff --git a/migrations/witnet.settings.js b/migrations/witnet.settings.js deleted file mode 100644 index 5081d57d8..000000000 --- a/migrations/witnet.settings.js +++ /dev/null @@ -1,852 +0,0 @@ -module.exports = { - artifacts: { - default: { - WitnetBytecodes: "WitnetBytecodesDefault", - WitnetEncodingLib: "WitnetEncodingLib", - WitnetErrorsLib: "WitnetErrorsLib", - WitnetPriceFeeds: "WitnetPriceFeeds", - WitnetPriceFeedsLib: "WitnetPriceFeedsLib", - WitnetRandomness: "WitnetRandomness", - WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", - WitnetRequestFactory: "WitnetRequestFactoryDefault", - }, - boba: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - conflux: { - WitnetRequestFactory: "WitnetRequestFactoryCfxCore", - }, - mantle: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - optimism: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - "polygon.zkevm.goerli": { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - "polygon.zkevm.mainnet": { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - reef: { - WitnetRequestBoard: "WitnetRequestBoardTrustableReef", - }, - scroll: { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - "syscoin.rollux.testnet": { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - }, - compilers: { - default: { - solc: { - version: "0.8.22", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - evmVersion: "paris", - }, - }, - }, - }, - networks: { - default: { - "ethereum.goerli": { - network_id: 5, - host: "localhost", - port: 8545, - skipDryRun: true, - verify: { - apiUrl: "https://api-goerli.etherscan.io/", - browserURL: "https://goerli.etherscan.io/", - }, - }, - "ethereum.kovan": { - network_id: 42, - host: "localhost", - port: 8542, - skipDryRun: true, - }, - "ethereum.mainnet": { - network_id: 1, - host: "localhost", - port: 9545, - skipDryRun: true, - }, - "ethereum.rinkeby": { - network_id: 4, - host: "localhost", - port: 8544, - skipDryRun: true, - }, - "ethereum.ropsten": { - network_id: 3, - host: "localhost", - port: 8543, - }, - "ethereum.sepolia": { - network_id: 11155111, - host: "localhost", - port: 8506, - skipDryRun: true, - verify: { - apiUrl: "https://api-sepolia.etherscan.io/api", - browserURL: "https://sepolia.etherscan.io/", - }, - }, - }, - arbitrum: { - "arbitrum.goerli": { - network_id: 421613, - host: "localhost", - port: 8517, - skipDryRun: true, - verify: { - apiUrl: "https://api-goerli.arbiscan.io/", - browserURL: "https://goerli.arbiscan.io/", - }, - }, - "arbitrum.one": { - network_id: 42161, - host: "localhost", - port: 9517, - skipDryRun: true, - verify: { - apiUrl: "https://api.arbiscan.io/api", - browserURL: "https://arbiscan.io/", - }, - }, - }, - avalanche: { - "avalanche.mainnet": { - network_id: 43114, - host: "localhost", - port: 9533, - skipDryRun: true, - gasPrice: 75 * 10 ** 9, - }, - "avalanche.testnet": { - network_id: 43113, - host: "localhost", - port: 8533, - skipDryRun: true, - gasPrice: 30 * 10 ** 9, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://api-testnet.snowtrace.io/", - browserURL: "https://testnet.snowtrace.io/", - }, - }, - }, - boba: { - "boba.bnb.testnet": { - network_id: 9728, - host: "localhost", - port: 8510, - skipDryRun: true, - verify: { - apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", - browserURL: "https://boba.testnet.routescan.io/", - }, - }, - "boba.bnb.mainnet": { - network_id: 56288, - host: "localhost", - port: 9510, - skipDryRun: true, - verify: { - apiUrl: "https://blockexplorer.bnb.boba.network/api", - browserURL: "https://blockexplorer.bnb.boba.network/", - apiKey: "MY_API_KEY", - }, - }, - "boba.ethereum.mainnet": { - network_id: 288, - host: "localhost", - port: 9539, - skipDryRun: true, - verify: { - apiUrl: "https://api.routescan.io/v2/network/mainnet/evm/all/etherscan", - browserURL: "https://bobascan.com/address/", - apiKey: "MY_API_KEY", - }, - }, - "boba.ethereum.goerli": { - network_id: 2888, - host: "localhost", - port: 8515, - skipDryRun: true, - verify: { - apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", - browserURL: "https://boba.testnet.routescan.io/", - }, - }, - }, - celo: { - "celo.alfajores": { - network_id: 44787, - host: "localhost", - port: 8538, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.celo.org/alfajores/api", - browserURL: "https://explorer.celo.org/alfajores/", - }, - }, - "celo.mainnet": { - network_id: 42220, - host: "localhost", - port: 9538, - skipDryRun: true, - verify: { - apiUrl: "https://explorer.celo.org/mainnet/api", - browserURL: "https://explorer.celo.org/mainnet/", - }, - }, - }, - conflux: { - "conflux.core.testnet": { - host: "localhost", - port: 8540, - network_id: 1, - gasPrice: 10, - skipDryRun: true, - }, - "conflux.core.mainnet": { - host: "localhost", - port: 9540, - network_id: 1029, - gasPrice: 10, - skipDryRun: true, - }, - "conflux.espace.testnet": { - host: "localhost", - port: 8529, - network_id: 71, - skipDryRun: true, - networkCheckTimeout: 999999, - gas: 15000000, - }, - "conflux.espace.mainnet": { - host: "localhost", - port: 9529, - network_id: 1030, - skipDryRun: true, - networkCheckTimeout: 999999, - gas: 15000000, - }, - }, - cronos: { - "cronos.testnet": { - host: "localhost", - port: 8530, - network_id: 338, - skipDryRun: true, - verify: { - apiUrl: "https://cronos.org/explorer/testnet3/api", - browserURL: "https://cronos.org/explorer/testnet3", - }, - }, - "cronos.mainnet": { - host: "localhost", - port: 9530, - network_id: 25, - skipDryRun: true, - }, - }, - cube: { - "cube.testnet": { - host: "localhost", - port: 8522, - network_id: 1819, - skipDryRun: true, - }, - "cube.mainnet": { - host: "localhost", - port: 9522, - network_id: 1818, - skipDryRun: true, - gas: 6000000, - gasPrice: 250 * 10 ** 9, - }, - }, - dogechain: { - "dogechain.testnet": { - host: "localhost", - port: 8519, - network_id: 568, - skipDryRun: true, - gas: 6000000, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "http://explorer-testnet.dogechain.dog/api", - browserURL: "https://explorer-testnet.dogechain.dog/", - }, - }, - "dogechain.mainnet": { - host: "localhost", - port: 9519, - network_id: 2000, - skipDryRun: true, - }, - }, - elastos: { - "elastos.testnet": { - host: "localhost", - port: 8513, - network_id: 21, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://esc-testnet.elastos.io/api", - browserURL: "https://esc-testnet.elastos.io/address", - }, - }, - "elastos.mainnet": { - host: "localhost", - port: 9513, - network_id: 20, - skipDryRun: true, - verify: { - apiUrl: "https://esc.elastos.io/api", - browserURL: "https://esc.elastos.io/address", - }, - }, - }, - fuse: { - "fuse.testnet": { - host: "localhost", - port: 8511, - network_id: 123, - skipDryRun: true, - verify: { - apiUrl: "https://explorer.fusespark.io/api", - browserURL: "https://explorer.fusespark.io/address", - apiKey: "MY_API_KEY", - }, - }, - }, - gnosis: { - "gnosis.testnet": { - host: "localhost", - port: 8509, - network_id: 10200, - skipDryRun: true, - verify: { - apiUrl: "https://gnosis-chiado.blockscout.com/api", - browserURL: "https://gnosis-chiado.blockscout.com/address", - apiKey: "MY_API_KEY", - }, - }, - }, - harmony: { - "harmony.testnet#0": { - host: "localhost", - port: 8534, - network_id: 1666700000, - skipDryRun: true, - }, - }, - hsc: { - "hsc.testnet": { - host: "localhost", - port: 8524, - network_id: 170, - skipDryRun: true, - }, - "hsc.mainnet": { - host: "localhost", - port: 9524, - network_id: 70, - skipDryRun: true, - }, - }, - kava: { - "kava.testnet": { - host: "localhost", - port: 8526, - network_id: 2221, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.testnet.kava.io/api", - browserURL: "https://explorer.testnet.kava.io/", - }, - }, - "kava.mainnet": { - host: "localhost", - port: 9526, - network_id: 2222, - skipDryRun: true, - }, - }, - kcc: { - "kcc.testnet": { - host: "localhost", - port: 8537, - network_id: 322, - gasPrice: 10 ** 10, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://scan-testnet.kcc.network/api", - browserURL: "https://scan-testnet.kcc.network/", - }, - }, - "kcc.mainnet": { - host: "localhost", - port: 9537, - network_id: 321, - gasPrice: 10 ** 10, - skipDryRun: true, - }, - }, - klaytn: { - "klaytn.testnet": { - host: "localhost", - port: 8527, - network_id: 1001, - skipDryRun: true, - gasPrice: 0, - }, - "klaytn.mainnet": { - host: "localhost", - port: 9527, - network_id: 8217, - skipDrynRun: true, - gasPrice: 0, - }, - }, - mantle: { - "mantle.testnet": { - host: "localhost", - port: 8508, - network_id: 5001, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.testnet.mantle.xyz/api", - explorerUrl: "https://explorer.testnet.mantle.xyz/address", - }, - }, - "mantle.mainnet": { - host: "localhost", - port: 9508, - network_id: 5000, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.mantle.xyz/api", - explorerUrl: "https://explorer.mantle.xyz/address", - }, - }, - }, - metis: { - "metis.mainnet": { - host: "localhost", - port: 9536, - network_id: 1088, - skipDryRun: true, - }, - "metis.goerli": { - host: "localhost", - port: 8536, - network_id: 599, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://goerli.explorer.metisdevops.link/api", - explorerUrl: "https://goerli.explorer.metisdevops.link/address", - }, - }, - }, - meter: { - "meter.testnet": { - host: "localhost", - port: 8523, - network_id: 83, - skipDryRun: true, - }, - "meter.mainnet": { - host: "localhost", - port: 9523, - network_id: 82, - skipDryRun: true, - }, - }, - moonbeam: { - "moonbeam.mainnet": { - host: "localhost", - port: 9531, - network_id: 1284, - skipDryRun: true, - }, - "moonbeam.moonriver": { - host: "localhost", - port: 7531, - network_id: 1285, - skipDrynRun: true, - }, - "moonbeam.moonbase": { - host: "localhost", - port: 8531, - network_id: 1287, - skipDryRun: true, - gasPrice: 3 * 10 ** 9, - }, - }, - okxchain: { - "okxchain.testnet": { - host: "localhost", - port: 8528, - network_id: 65, - skipDryRun: true, - }, - "okxchain.mainnet": { - host: "localhost", - port: 9528, - network_id: 66, - skipDryRun: true, - }, - }, - optimism: { - "optimism.goerli": { - host: "localhost", - port: 8520, - network_id: 420, - skipDryRun: true, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://optimism-goerli.blockscout.com/api", - explorerUrl: "https://optimism-goerli.blockscout.com/", - }, - }, - "optimism.mainnet": { - host: "localhost", - port: 9520, - network_id: 10, - skipDryRun: true, - }, - }, - polygon: { - "polygon.goerli": { - host: "localhost", - port: 8535, - network_id: 80001, - skipDryRun: true, - }, - "polygon.mainnet": { - host: "localhost", - port: 9535, - network_id: 137, - skipDryRun: true, - }, - "polygon.zkevm.goerli": { - host: "localhost", - port: 8512, - network_id: 1442, - skipDryRun: true, - verify: { - apiUrl: "https://api-testnet-zkevm.polygonscan.com/api", - explorerUrl: "https://testnet-zkevm.polygonscan.com/address", - }, - }, - "polygon.zkevm.mainnet": { - host: "localhost", - port: 9512, - network_id: 1101, - skipDryRun: true, - verify: { - apiUrl: "https://api-zkevm.polygonscan.com/api", - explorerUrl: "https://zkevm.polygonscan.com/address/", - }, - }, - }, - reef: { - "reef.testnet": { - host: "localhost", - port: 8532, - network_id: 13939, - skipDryRun: true, - }, - "reef.mainnet": { - host: "localhost", - port: 9532, - network_id: 13939, - skipDryRun: true, - }, - }, - scroll: { - "scroll.sepolia": { - host: "localhost", - port: 8514, - network_id: 534351, - skipDryRun: true, - verify: { - apiUrl: "http://api-sepolia.scrollscan.io/api", - explorerUrl: "https://sepolia.scrollscan.io/", - }, - }, - "scroll.mainnet": { - host: "localhost", - port: 9514, - network_id: 534352, - skipDryRun: true, - verify: { - apiUrl: "https://api.scrollscan.com/api", - explorerUrl: "https://scrollscan.com/address", - }, - }, - }, - smartbch: { - "smartbch.amber": { - host: "localhost", - port: 8525, - network_id: 10001, - skipDryRun: true, - }, - "smartbch.mainnet": { - host: "localhost", - port: 9525, - network_id: 10000, - skipDryRun: true, - }, - }, - syscoin: { - "syscoin.testnet": { - host: "localhost", - port: 8521, - network_id: 5700, - skipDryRun: true, - }, - "syscoin.mainnet": { - host: "localhost", - port: 9521, - network_id: 57, - skipDryRun: true, - }, - "syscoin.rollux.testnet": { - host: "localhost", - port: 8507, - network_id: 57000, - skipDryRun: true, - verify: { - apiKey: "abc", - apiUrl: "https://rollux.tanenbaum.io/api", - explorerUrl: "https://rollux.tanenbaum.io/address/", - }, - }, - }, - ultron: { - "ultron.testnet": { - host: "localhost", - port: 8516, - network_id: 1230, - skipDryRun: true, - }, - "ultron.mainnet": { - host: "localhost", - port: 9516, - network_id: 1231, - skipDryRun: true, - }, - }, - }, - specs: { - default: { - WitnetBytecodes: { - libs: ["WitnetEncodingLib"], - vanity: 172582, - }, - WitnetRandomness: { - vanity: 4, - }, - WitnetRequestBoard: { - immutables: { - types: ["uint256", "uint256", "uint256", "uint256"], - values: [ - /* _reportResultGasBase */ 58282, - /* _reportResultWithCallbackGasBase */ 65273, - /* _reportResultWithCallbackRevertGasBase */ 69546, - /* _sstoreFromZeroGas */ 20000, - ], - }, - libs: ["WitnetErrorsLib"], - vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 - }, - WitnetRequestFactory: { - vanity: 178848, - }, - WitnetPriceFeeds: { - libs: ["WitnetPriceFeedsLib"], - vanity: 5, - }, - }, - avalanche: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 155000, - ], - }, - }, - }, - celo: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 114000, - ], - }, - }, - }, - conflux: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 78500, - ], - }, - }, - }, - "conflux.espace.testnet": { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 225000, - ], - }, - }, - }, - "conflux.espace.mainnet": { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 225000, - ], - }, - }, - }, - cronos: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 137500, - ], - }, - }, - }, - dogechain: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - harmony: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 530000, - ], - }, - }, - }, - hsc: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - kcc: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 92500, - ], - }, - }, - }, - klaytn: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 105000, - ], - }, - }, - }, - meter: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - metis: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 134800, - ], - }, - }, - }, - moonbeam: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 115000, - ], - }, - }, - }, - okxchain: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 145000, - ], - }, - }, - }, - optimism: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 135000, - ], - }, - }, - }, - reef: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", - ], - }, - }, - }, - ultron: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 83949, - ], - }, - }, - }, - }, -} diff --git a/package.json b/package.json index 47de9c472..7422bae60 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,10 @@ "ethereum" ], "export": { - ".": "./index.js" + ".": "./src/index.js", + "./artifacts": "./artifacts/index.js", + "./settings": "./settings/index.js", + "./utils": "./src/utils" }, "files": [ "build", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 000000000..d54f66b71 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,8921 @@ +lockfileVersion: 5.4 + +specifiers: + '@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 + custom-error-test-helper: ^1.0.6 + dotenv: ^16.4.1 + 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 + js-sha256: ^0.11.0 + lodash: ^4.17.21 + 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 + typescript: latest + web3: ^4.4.0 + +devDependencies: + '@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 + custom-error-test-helper: 1.0.6 + dotenv: 16.4.1 + 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 + js-sha256: 0.11.0 + lodash: 4.17.21 + nanoassert: 2.0.0 + sha3-wasm: 1.0.0 + solhint: 4.1.1_typescript@5.3.3 + truffle: 5.11.5 + truffle-assertions: 0.9.2 + truffle-flattener: 1.6.0 + typescript: 5.3.3 + web3: 4.4.0_typescript@5.3.3 + +packages: + + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@adraffy/ens-normalize/1.10.1: + resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} + dev: true + + /@apollo/protobufjs/1.2.6: + resolution: {integrity: sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + '@types/node': 10.17.60 + long: 4.0.0 + dev: true + optional: true + + /@apollo/protobufjs/1.2.7: + resolution: {integrity: sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg==} + hasBin: true + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/long': 4.0.2 + long: 4.0.0 + dev: true + optional: true + + /@apollo/usage-reporting-protobuf/4.1.1: + resolution: {integrity: sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA==} + dependencies: + '@apollo/protobufjs': 1.2.7 + dev: true + optional: true + + /@apollo/utils.dropunuseddefinitions/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@apollo/utils.keyvaluecache/1.0.2: + resolution: {integrity: sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg==} + dependencies: + '@apollo/utils.logger': 1.0.1 + lru-cache: 7.13.1 + dev: true + optional: true + + /@apollo/utils.logger/1.0.1: + resolution: {integrity: sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA==} + dev: true + optional: true + + /@apollo/utils.printwithreducedwhitespace/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@apollo/utils.removealiases/1.0.0_graphql@15.8.0: + resolution: {integrity: sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@apollo/utils.sortast/1.1.0_graphql@15.8.0: + resolution: {integrity: sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + lodash.sortby: 4.7.0 + dev: true + optional: true + + /@apollo/utils.stripsensitiveliterals/1.2.0_graphql@15.8.0: + resolution: {integrity: sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w==} + engines: {node: '>=12.13.0'} + peerDependencies: + graphql: 14.x || 15.x || 16.x + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@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'} + 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 + graphql: 15.8.0 + dev: true + optional: true + + /@apollographql/apollo-tools/0.5.4_graphql@15.8.0: + resolution: {integrity: sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw==} + engines: {node: '>=8', npm: '>=6'} + peerDependencies: + graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@apollographql/graphql-playground-html/1.6.29: + resolution: {integrity: sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA==} + dependencies: + xss: 1.0.14 + dev: true + optional: true + + /@babel/code-frame/7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@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: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@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 + + /@ensdomains/address-encoder/0.1.9: + resolution: {integrity: sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==} + dependencies: + bech32: 1.1.4 + blakejs: 1.2.1 + bn.js: 4.12.0 + bs58: 4.0.1 + crypto-addr-codec: 0.1.8 + nano-base32: 1.0.1 + ripemd160: 2.0.2 + dev: true + + /@ensdomains/ens/0.4.5: + resolution: {integrity: sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==} + deprecated: Please use @ensdomains/ens-contracts + dependencies: + bluebird: 3.7.2 + eth-ens-namehash: 2.0.8 + solc: 0.4.26 + testrpc: 0.0.1 + web3-utils: 1.10.3 + dev: true + + /@ensdomains/ensjs/2.1.0: + resolution: {integrity: sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog==} + dependencies: + '@babel/runtime': 7.23.9 + '@ensdomains/address-encoder': 0.1.9 + '@ensdomains/ens': 0.4.5 + '@ensdomains/resolver': 0.2.4 + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + ethers: 5.7.2 + js-sha3: 0.8.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@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: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.56.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@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: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@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: + 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: + resolution: {integrity: sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==} + dependencies: + crc-32: 1.2.2 + ethereumjs-util: 7.1.5 + dev: true + + /@ethereumjs/rlp/4.0.1: + resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /@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: + resolution: {integrity: sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==} + dependencies: + '@ethereumjs/common': 2.6.5 + ethereumjs-util: 7.1.5 + dev: true + + /@ethereumjs/util/8.1.0: + resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + ethereum-cryptography: 2.1.3 + micro-ftch: 0.3.1 + dev: true + + /@ethersproject/abi/5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/abstract-provider/5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + dev: true + + /@ethersproject/abstract-signer/5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/address/5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/rlp': 5.7.0 + dev: true + + /@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.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/properties': 5.7.0 + dev: true + + /@ethersproject/bignumber/5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + bn.js: 5.2.1 + dev: true + + /@ethersproject/bytes/5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/constants/5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + dev: true + + /@ethersproject/contracts/5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/transactions': 5.7.0 + dev: true + + /@ethersproject/hash/5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/hdnode/5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/json-wallets/5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} + dependencies: + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + aes-js: 3.0.0 + scrypt-js: 3.0.1 + dev: true + + /@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.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: true + + /@ethersproject/networks/5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@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.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} + dependencies: + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/providers/5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/web': 5.7.1 + bech32: 1.1.4 + ws: 7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@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.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.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + hash.js: 1.1.7 + dev: true + + /@ethersproject/signing-key/5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + bn.js: 5.2.1 + elliptic: 6.5.4 + hash.js: 1.1.7 + dev: true + + /@ethersproject/solidity/5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/strings/5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/transactions/5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} + dependencies: + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + dev: true + + /@ethersproject/units/5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==} + dependencies: + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/logger': 5.7.0 + dev: true + + /@ethersproject/wallet/5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} + dependencies: + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/random': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/wordlists': 5.7.0 + dev: true + + /@ethersproject/web/5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} + dependencies: + '@ethersproject/base64': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@ethersproject/wordlists/5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} + dependencies: + '@ethersproject/bytes': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/strings': 5.7.0 + dev: true + + /@graphql-tools/batch-execute/8.5.1_graphql@15.8.0: + resolution: {integrity: sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==} + 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 + dataloader: 2.1.0 + graphql: 15.8.0 + tslib: 2.4.1 + value-or-promise: 1.0.11 + dev: true + optional: true + + /@graphql-tools/delegate/8.8.1_graphql@15.8.0: + resolution: {integrity: sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA==} + 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 + dataloader: 2.1.0 + graphql: 15.8.0 + tslib: 2.4.1 + value-or-promise: 1.0.11 + dev: true + optional: true + + /@graphql-tools/merge/8.3.1_graphql@15.8.0: + resolution: {integrity: sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg==} + 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: 15.8.0 + tslib: 2.6.2 + dev: true + optional: true + + /@graphql-tools/merge/8.4.2_graphql@15.8.0: + resolution: {integrity: sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw==} + 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: 15.8.0 + tslib: 2.6.2 + dev: true + optional: true + + /@graphql-tools/mock/8.7.20_graphql@15.8.0: + resolution: {integrity: sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ==} + 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 + 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: + resolution: {integrity: sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg==} + 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: 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: + resolution: {integrity: sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w==} + 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: 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: + resolution: {integrity: sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg==} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + dependencies: + graphql: 15.8.0 + tslib: 2.4.1 + dev: true + optional: true + + /@graphql-tools/utils/9.2.1_graphql@15.8.0: + resolution: {integrity: sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A==} + 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: 15.8.0 + tslib: 2.6.2 + dev: true + optional: true + + /@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 + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /@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 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + + /@humanwhocodes/object-schema/2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + dev: true + + /@josephg/resolvable/1.0.1: + resolution: {integrity: sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg==} + dev: true + optional: true + + /@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: + resolution: {integrity: sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==} + dev: true + + /@noble/hashes/1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + dev: true + + /@noble/secp256k1/1.7.1: + resolution: {integrity: sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==} + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.0 + dev: true + + /@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==} + peerDependencies: + '@openzeppelin/contracts': 5.0.1 + dependencies: + '@openzeppelin/contracts': 5.0.1 + dev: true + + /@openzeppelin/contracts/4.9.5: + resolution: {integrity: sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg==} + dev: true + + /@openzeppelin/contracts/5.0.1: + resolution: {integrity: sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w==} + dev: true + + /@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 + ethjs-abi: 0.2.1 + lodash.flatten: 4.4.0 + semver: 5.7.2 + web3: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - bn.js + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@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: + 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: + resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + engines: {node: '>=12'} + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + dev: true + + /@protobufjs/aspromise/1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: true + optional: true + + /@protobufjs/base64/1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: true + optional: true + + /@protobufjs/codegen/2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: true + optional: true + + /@protobufjs/eventemitter/1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: true + optional: true + + /@protobufjs/fetch/1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: true + optional: true + + /@protobufjs/float/1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: true + optional: true + + /@protobufjs/inquire/1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: true + optional: true + + /@protobufjs/path/1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: true + optional: true + + /@protobufjs/pool/1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: true + optional: true + + /@protobufjs/utf8/1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: true + optional: true + + /@redux-saga/core/1.3.0: + resolution: {integrity: sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA==} + dependencies: + '@babel/runtime': 7.23.9 + '@redux-saga/deferred': 1.2.1 + '@redux-saga/delay-p': 1.2.1 + '@redux-saga/is': 1.1.3 + '@redux-saga/symbols': 1.1.3 + '@redux-saga/types': 1.2.1 + typescript-tuple: 2.2.1 + dev: true + + /@redux-saga/deferred/1.2.1: + resolution: {integrity: sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g==} + dev: true + + /@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: + 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: + resolution: {integrity: sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg==} + dev: true + + /@redux-saga/types/1.2.1: + resolution: {integrity: sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==} + dev: true + + /@resolver-engine/core/0.2.1: + resolution: {integrity: sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A==} + dependencies: + debug: 3.2.7 + request: 2.88.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@resolver-engine/fs/0.2.1: + resolution: {integrity: sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg==} + dependencies: + '@resolver-engine/core': 0.2.1 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@resolver-engine/imports-fs/0.2.2: + resolution: {integrity: sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ==} + dependencies: + '@resolver-engine/fs': 0.2.1 + '@resolver-engine/imports': 0.2.2 + debug: 3.2.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@resolver-engine/imports/0.2.2: + resolution: {integrity: sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg==} + dependencies: + '@resolver-engine/core': 0.2.1 + debug: 3.2.7 + hosted-git-info: 2.8.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@scure/base/1.1.5: + resolution: {integrity: sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==} + dev: true + + /@scure/bip32/1.1.5: + resolution: {integrity: sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/base': 1.1.5 + dev: true + + /@scure/bip32/1.3.3: + resolution: {integrity: sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + dev: true + + /@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: + resolution: {integrity: sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==} + dependencies: + '@noble/hashes': 1.3.3 + '@scure/base': 1.1.5 + dev: true + + /@sindresorhus/is/4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: true + + /@sindresorhus/is/5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: true + + /@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: + resolution: {integrity: sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg==} + dependencies: + antlr4ts: 0.5.0-alpha.4 + dev: true + + /@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: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + dependencies: + defer-to-connect: 2.0.1 + dev: true + + /@truffle/abi-utils/1.0.3: + resolution: {integrity: sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + change-case: 3.0.2 + fast-check: 3.1.1 + web3-utils: 1.10.0 + dev: true + + /@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: + resolution: {integrity: sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + cbor: 5.2.0 + dev: true + + /@truffle/codec/0.17.3: + resolution: {integrity: sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/abi-utils': 1.0.3 + '@truffle/compile-common': 0.9.8 + big.js: 6.2.1 + bn.js: 5.2.1 + cbor: 5.2.0 + debug: 4.3.4 + lodash: 4.17.21 + semver: 7.5.4 + utf8: 3.0.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@truffle/compile-common/0.9.8: + resolution: {integrity: sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/error': 0.2.2 + colors: 1.4.0 + dev: true + + /@truffle/config/1.3.61: + resolution: {integrity: sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/error': 0.2.2 + '@truffle/events': 0.1.25 + '@truffle/provider': 0.3.13 + conf: 10.2.0 + debug: 4.3.4 + find-up: 2.1.0 + lodash: 4.17.21 + original-require: 1.0.1 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + optional: true + + /@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 + transitivePeerDependencies: + - supports-color + dev: true + + /@truffle/contract/4.6.31: + resolution: {integrity: sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@ensdomains/ensjs': 2.1.0 + '@truffle/blockchain-utils': 0.1.9 + '@truffle/contract-schema': 3.4.16 + '@truffle/debug-utils': 6.0.57 + '@truffle/error': 0.2.2 + '@truffle/interface-adapter': 0.5.37 + bignumber.js: 7.2.1 + debug: 4.3.4 + ethers: 4.0.49 + web3: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-eth-abi: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@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 + delay: 5.0.0 + 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 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + optional: true + + /@truffle/dashboard-message-bus-common/0.1.7: + resolution: {integrity: sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + dev: true + optional: true + + /@truffle/db-loader/0.2.36: + resolution: {integrity: sha512-Cm8uVc2eoihquMOSZm8UOuGGUvBo+/GHkxRoPAZ5pftOpSlRAug0okVOp6ETj1BujgLJ02izU/qdrwSGWwGR9A==} + engines: {node: ^16.20 || ^18.16 || >=20} + optionalDependencies: + '@truffle/db': 2.0.36 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@truffle/db/2.0.36: + resolution: {integrity: sha512-PpUjOXZgf9Gy8RlP8bJhl5pjJRkghZUcCiGOsS0YbCCI//PGDDoKmS+3QUjXWhiMwTeld3gfUV2ip4p2hMbyVA==} + engines: {node: ^16.20 || ^18.16 || >=20} + requiresBuild: true + dependencies: + '@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 + fs-extra: 9.1.0 + 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 + pouchdb: 7.3.0 + pouchdb-adapter-memory: 7.3.1 + pouchdb-debug: 7.2.1 + pouchdb-find: 7.3.1 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + optional: true + + /@truffle/debug-utils/6.0.57: + resolution: {integrity: sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/codec': 0.17.3 + '@trufflesuite/chromafi': 3.0.0 + bn.js: 5.2.1 + chalk: 2.4.2 + debug: 4.3.4 + highlightjs-solidity: 2.0.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@truffle/debugger/12.1.5: + resolution: {integrity: sha512-m6FQoddmptcXZkO+OABcz4Ka7YDLAPW9/GhnTSqYonlaOeV7g5dMzybhHq6whaQet34rhNteomep7JpskKW9Mw==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@ensdomains/ensjs': 2.1.0 + '@truffle/abi-utils': 1.0.3 + '@truffle/codec': 0.17.3 + '@truffle/source-map-utils': 1.3.119 + bn.js: 5.2.1 + debug: 4.3.4 + json-pointer: 0.6.2 + json-stable-stringify: 1.1.1 + lodash: 4.17.21 + redux: 3.7.2 + redux-saga: 1.0.0 + reselect-tree: 1.3.7 + semver: 7.5.4 + web3: 1.10.0 + web3-eth-abi: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@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: + 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 + emittery: 0.4.1 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + optional: true + + /@truffle/interface-adapter/0.5.37: + resolution: {integrity: sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + bn.js: 5.2.1 + ethers: 4.0.49 + web3: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@truffle/promise-tracker/0.1.7: + resolution: {integrity: sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==} + engines: {node: ^16.20 || ^18.16 || >=20} + dev: true + optional: true + + /@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 + web3: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + optional: true + + /@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 + json-pointer: 0.6.2 + node-interval-tree: 1.3.3 + web3-utils: 1.10.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@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 + optional: true + + /@trufflesuite/chromafi/3.0.0: + resolution: {integrity: sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ==} + dependencies: + camelcase: 4.1.0 + chalk: 2.4.2 + cheerio: 1.0.0-rc.12 + detect-indent: 5.0.0 + highlight.js: 10.7.3 + lodash.merge: 4.6.2 + strip-ansi: 4.0.0 + strip-indent: 2.0.0 + dev: true + + /@trufflesuite/spinnies/0.1.1: + resolution: {integrity: sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA==} + dependencies: + chalk: 4.1.2 + cli-cursor: 3.1.0 + strip-ansi: 6.0.1 + dev: true + optional: true + + /@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 + optionalDependencies: + bufferutil: 4.0.7 + utf-8-validate: 6.0.3 + dev: true + + /@types/accepts/1.3.7: + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + dependencies: + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/bn.js/5.1.5: + resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} + dependencies: + '@types/node': 20.11.16 + dev: true + + /@types/body-parser/1.19.2: + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/body-parser/1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/cacheable-request/6.0.3: + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + dependencies: + '@types/http-cache-semantics': 4.0.4 + '@types/keyv': 3.1.4 + '@types/node': 12.20.55 + '@types/responselike': 1.0.3 + dev: true + + /@types/concat-stream/1.6.1: + resolution: {integrity: sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA==} + dependencies: + '@types/node': 8.10.66 + dev: true + + /@types/connect/3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/cors/2.8.12: + resolution: {integrity: sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==} + dev: true + optional: true + + /@types/express-serve-static-core/4.17.31: + resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} + dependencies: + '@types/node': 20.11.16 + '@types/qs': 6.9.11 + '@types/range-parser': 1.2.7 + dev: true + optional: true + + /@types/express-serve-static-core/4.17.43: + resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} + dependencies: + '@types/node': 20.11.16 + '@types/qs': 6.9.11 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: true + optional: true + + /@types/express/4.17.14: + resolution: {integrity: sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.17.43 + '@types/qs': 6.9.11 + '@types/serve-static': 1.15.5 + dev: true + optional: true + + /@types/form-data/0.0.33: + resolution: {integrity: sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw==} + dependencies: + '@types/node': 8.10.66 + dev: true + + /@types/http-cache-semantics/4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: true + + /@types/http-errors/2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true + optional: true + + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + + /@types/keyv/3.1.4: + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + dependencies: + '@types/node': 12.20.55 + dev: true + + /@types/long/4.0.2: + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + dev: true + optional: true + + /@types/lru-cache/5.1.1: + resolution: {integrity: sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==} + dev: true + + /@types/mime/1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true + optional: true + + /@types/mime/3.0.4: + resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} + dev: true + optional: true + + /@types/node/10.17.60: + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + dev: true + + /@types/node/12.20.55: + resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} + dev: true + + /@types/node/20.11.16: + resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/node/8.10.66: + resolution: {integrity: sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw==} + dev: true + + /@types/pbkdf2/3.1.2: + resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} + dependencies: + '@types/node': 20.11.16 + dev: true + + /@types/qs/6.9.11: + resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} + dev: true + + /@types/range-parser/1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true + optional: true + + /@types/responselike/1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + dependencies: + '@types/node': 12.20.55 + dev: true + + /@types/secp256k1/4.0.6: + resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} + dependencies: + '@types/node': 20.11.16 + dev: true + + /@types/seedrandom/3.0.1: + resolution: {integrity: sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==} + dev: true + + /@types/send/0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/serve-static/1.15.5: + resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/mime': 3.0.4 + '@types/node': 20.11.16 + dev: true + optional: true + + /@types/ws/8.5.3: + resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} + dependencies: + '@types/node': 20.11.16 + dev: true + + /@ungap/structured-clone/1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /abitype/0.7.1_typescript@5.3.3: + resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==} + peerDependencies: + typescript: '>=4.9.4' + zod: ^3 >=3.19.1 + peerDependenciesMeta: + zod: + optional: true + dependencies: + typescript: 5.3.3 + dev: true + + /abort-controller/3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 + dev: true + optional: true + + /abortcontroller-polyfill/1.7.5: + resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + dev: true + + /abstract-level/1.0.3: + resolution: {integrity: sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==} + 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: + resolution: {integrity: sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==} + dependencies: + xtend: 4.0.2 + dev: true + optional: true + + /abstract-leveldown/6.2.3: + resolution: {integrity: sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==} + engines: {node: '>=6'} + dependencies: + buffer: 5.7.1 + immediate: 3.3.0 + level-concat-iterator: 2.0.1 + level-supports: 1.0.1 + xtend: 4.0.2 + dev: true + optional: true + + /abstract-leveldown/7.2.0: + resolution: {integrity: sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==} + engines: {node: '>=10'} + dependencies: + buffer: 6.0.3 + catering: 2.1.1 + is-buffer: 2.0.5 + level-concat-iterator: 3.1.0 + level-supports: 2.1.0 + queue-microtask: 1.2.3 + dev: true + + /accepts/1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + dev: true + + /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 + dependencies: + acorn: 8.11.3 + dev: true + + /acorn/8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /ado-contracts/1.0.0: + resolution: {integrity: sha512-tLJdlGed3Fcwih4m9yNaI3+PqfxKarbLBR2OavM8RiPX8zo5TrLUZ6akrqkK+BFBInhaxONnMKsWiHj4QNPdCw==} + dependencies: + '@openzeppelin/contracts': 4.9.5 + dev: true + + /aes-js/3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + dev: true + + /ajv-formats/2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.12.0 + dev: true + optional: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv/8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-colors/3.2.4: + resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} + engines: {node: '>=6'} + dev: true + + /ansi-colors/4.1.1: + resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + engines: {node: '>=6'} + dev: true + + /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: + resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==} + engines: {node: '>=4'} + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /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: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /antlr4/4.13.1: + resolution: {integrity: sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA==} + engines: {node: '>=16'} + dev: true + + /antlr4ts/0.5.0-alpha.4: + resolution: {integrity: sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ==} + dev: true + + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /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. + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + apollo-server-env: 4.2.1 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /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. + dependencies: + '@apollo/protobufjs': 1.2.6 + dev: true + optional: true + + /apollo-server-core/3.13.0_graphql@15.8.0: + resolution: {integrity: sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg==} + engines: {node: '>=12.0'} + 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 + '@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 + '@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 + 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 + loglevel: 1.9.1 + lru-cache: 6.0.0 + node-abort-controller: 3.1.1 + sha.js: 2.4.11 + uuid: 9.0.1 + whatwg-mimetype: 3.0.0 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /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. + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /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. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + graphql: 15.8.0 + dev: true + optional: true + + /apollo-server-express/3.13.0_4mq2c443wwzwcb6dpxnwkfvrzm: + resolution: {integrity: sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g==} + engines: {node: '>=12.0'} + peerDependencies: + express: ^4.17.1 + graphql: ^15.3.0 || ^16.0.0 + dependencies: + '@types/accepts': 1.3.7 + '@types/body-parser': 1.19.2 + '@types/cors': 2.8.12 + '@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 + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.2 + graphql: 15.8.0 + parseurl: 1.3.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + optional: true + + /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. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + 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: + 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. + peerDependencies: + graphql: ^15.3.0 || ^16.0.0 + dependencies: + '@apollo/utils.keyvaluecache': 1.0.2 + '@apollo/utils.logger': 1.0.1 + apollo-reporting-protobuf: 3.4.0 + apollo-server-env: 4.2.1 + graphql: 15.8.0 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /apollo-server/3.13.0_graphql@15.8.0: + resolution: {integrity: sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg==} + 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 + express: 4.18.2 + graphql: 15.8.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + optional: true + + /app-module-path/2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + dev: true + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true + + /argsarray/0.0.1: + resolution: {integrity: sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg==} + dev: true + optional: true + + /array-buffer-byte-length/1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + is-array-buffer: 3.0.4 + dev: true + + /array-flatten/1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: true + + /array-includes/3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + get-intrinsic: 1.2.3 + is-string: 1.0.7 + dev: true + + /array.prototype.filter/1.0.3: + resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /array.prototype.findlastindex/1.2.3: + resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + get-intrinsic: 1.2.3 + dev: true + + /array.prototype.flat/1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap/1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice/1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.3 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.2 + dev: true + + /asap/2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true + + /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: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: true + + /assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /ast-parents/0.0.1: + resolution: {integrity: sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA==} + dev: true + + /astral-regex/2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /async-eventemitter/0.2.4: + resolution: {integrity: sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==} + dependencies: + async: 2.6.4 + dev: true + + /async-limiter/1.0.1: + resolution: {integrity: sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==} + dev: true + + /async-retry/1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + dependencies: + retry: 0.13.1 + dev: true + optional: true + + /async/2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + dependencies: + lodash: 4.17.21 + dev: true + + /asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /at-least-node/1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true + optional: true + + /atomically/1.7.0: + resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} + engines: {node: '>=10.12.0'} + dev: true + optional: true + + /available-typed-arrays/1.0.6: + resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} + engines: {node: '>= 0.4'} + dev: true + + /aws-sign2/0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true + + /aws4/1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: true + + /axios/1.5.0_debug@4.3.4: + resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} + dependencies: + follow-redirects: 1.15.5_debug@4.3.4 + form-data: 4.0.0 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: true + optional: true + + /axios/1.6.7: + resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} + dependencies: + 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: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /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: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /bcrypt-pbkdf/1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: true + + /bech32/1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} + dev: true + + /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: + resolution: {integrity: sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ==} + dev: true + + /bignumber.js/7.2.1: + resolution: {integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==} + dev: true + + /bignumber.js/9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /blakejs/1.2.1: + resolution: {integrity: sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==} + dev: true + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /bn.js/4.11.6: + resolution: {integrity: sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==} + dev: true + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: true + + /body-parser/1.20.1: + resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.1 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /body-parser/1.20.2: + resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.11.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /boolbase/1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: true + + /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: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /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: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + dev: true + + /browser-stdout/1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + dev: true + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /bs58/4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + dependencies: + base-x: 3.0.9 + dev: true + + /bs58check/2.1.2: + resolution: {integrity: sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==} + dependencies: + bs58: 4.0.1 + create-hash: 1.2.0 + safe-buffer: 5.2.1 + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-to-arraybuffer/0.0.5: + resolution: {integrity: sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ==} + dev: true + + /buffer-xor/1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + dev: true + + /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: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + + /bufferutil/4.0.5: + resolution: {integrity: sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + optional: true + + /bufferutil/4.0.7: + resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + + /bufferutil/4.0.8: + resolution: {integrity: sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /builtins/5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.5.4 + dev: true + + /bytes/3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: true + + /cacheable-lookup/5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + dev: true + + /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: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: true + + /cacheable-request/10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 6.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.0 + responselike: 3.0.0 + dev: true + + /cacheable-request/7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + dev: true + + /call-bind/1.0.5: + resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + dependencies: + function-bind: 1.1.2 + get-intrinsic: 1.2.3 + set-function-length: 1.2.0 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /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: + resolution: {integrity: sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==} + engines: {node: '>=0.10.0'} + dev: true + + /camelcase/4.1.0: + resolution: {integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==} + engines: {node: '>=4'} + dev: true + + /camelcase/6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: true + + /caseless/0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: true + + /catering/2.1.1: + resolution: {integrity: sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==} + engines: {node: '>=6'} + dev: true + + /cbor/5.2.0: + resolution: {integrity: sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A==} + engines: {node: '>=6.0.0'} + dependencies: + bignumber.js: 9.1.2 + nofilter: 1.0.4 + dev: true + + /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 + chai: ^4.0.0 + dependencies: + bn.js: 4.12.0 + chai: 4.4.1 + dev: true + + /chai/4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /change-case/3.0.2: + resolution: {integrity: sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA==} + dependencies: + camel-case: 3.0.0 + constant-case: 2.0.0 + dot-case: 2.1.1 + header-case: 1.0.1 + is-lower-case: 1.1.3 + is-upper-case: 1.1.2 + lower-case: 1.1.4 + lower-case-first: 1.0.2 + no-case: 2.3.2 + param-case: 2.1.1 + pascal-case: 2.0.1 + path-case: 2.1.1 + sentence-case: 2.1.1 + snake-case: 2.1.0 + swap-case: 1.1.2 + title-case: 2.1.1 + upper-case: 1.1.3 + upper-case-first: 1.1.2 + dev: true + + /charenc/0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + dev: true + + /check-error/1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /cheerio-select/2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + dev: true + + /cheerio/1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + dev: true + + /chokidar/3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.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 + dev: true + + /chownr/1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + dev: true + + /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 + dependencies: + buffer: 5.7.1 + class-is: 1.1.0 + multibase: 0.6.1 + multicodec: 1.0.4 + multihashes: 0.4.21 + dev: true + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /class-is/1.1.0: + resolution: {integrity: sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==} + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + optional: true + + /cli-table3/0.5.1: + resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} + engines: {node: '>=6'} + dependencies: + object-assign: 4.1.1 + string-width: 2.1.1 + optionalDependencies: + colors: 1.4.0 + dev: true + + /cliui/3.2.0: + resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + wrap-ansi: 2.1.0 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: true + + /clone-buffer/1.0.0: + resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==} + engines: {node: '>= 0.10'} + dev: true + optional: true + + /clone-response/1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + dependencies: + mimic-response: 1.0.1 + dev: true + + /code-point-at/1.1.0: + resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} + engines: {node: '>=0.10.0'} + dev: true + + /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: + 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: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colors/1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + dev: true + + /combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /commander/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + optional: true + + /concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true + + /concat-stream/1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + dev: true + + /conf/10.2.0: + resolution: {integrity: sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==} + engines: {node: '>=12'} + dependencies: + ajv: 8.12.0 + ajv-formats: 2.1.1 + atomically: 1.7.0 + debounce-fn: 4.0.0 + dot-prop: 6.0.1 + env-paths: 2.2.1 + json-schema-typed: 7.0.3 + onetime: 5.1.2 + pkg-up: 3.1.0 + semver: 7.5.4 + dev: true + optional: true + + /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: + 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: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /content-hash/2.5.2: + resolution: {integrity: sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw==} + dependencies: + cids: 0.7.5 + multicodec: 0.5.7 + multihashes: 0.4.21 + dev: true + + /content-type/1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: true + + /cookie-signature/1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: true + + /cookie/0.5.0: + resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + engines: {node: '>= 0.6'} + dev: true + + /core-util-is/1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cors/2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: true + + /cosmiconfig/8.3.6_typescript@5.3.3: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + typescript: 5.3.3 + dev: true + + /crc-32/1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + dev: true + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /cross-fetch/3.1.8: + resolution: {integrity: sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /cross-fetch/4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypt/0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + dev: true + + /crypto-addr-codec/0.1.8: + resolution: {integrity: sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g==} + dependencies: + base-x: 3.0.9 + big-integer: 1.6.36 + blakejs: 1.2.1 + bs58: 4.0.1 + ripemd160-min: 0.0.6 + safe-buffer: 5.2.1 + sha3: 2.1.4 + dev: true + + /css-select/5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: true + + /css-what/6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + + /cssfilter/0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + dev: true + optional: true + + /custom-error-test-helper/1.0.6: + resolution: {integrity: sha512-mtSur97B5c2Nxx0HS7VQtVl9FMNl/Xf13RxTWwfMLIKnNVror/e43ll6VWjs+J5gP2E6AZn5+Z0AqTNF5UXIcw==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/solidity': 5.7.0 + chai: 4.4.1 + dev: true + + /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: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: true + + /dataloader/2.1.0: + resolution: {integrity: sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ==} + dev: true + optional: true + + /debounce-fn/4.0.0: + resolution: {integrity: sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==} + engines: {node: '>=10'} + dependencies: + mimic-fn: 3.1.0 + dev: true + optional: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.1.0: + resolution: {integrity: sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + optional: true + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + 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: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + supports-color: 8.1.1 + dev: true + + /decamelize/1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /decamelize/4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + dev: true + + /decode-uri-component/0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /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: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + dependencies: + mimic-response: 3.1.0 + dev: true + + /deep-eql/4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-extend/0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /defer-to-connect/2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: true + + /deferred-leveldown/5.3.0: + resolution: {integrity: sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==} + engines: {node: '>=6'} + dependencies: + abstract-leveldown: 6.2.3 + inherits: 2.0.4 + dev: true + optional: true + + /define-data-property/1.1.1: + resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /define-properties/1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + has-property-descriptors: 1.0.1 + object-keys: 1.1.1 + dev: true + + /delay/5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + dev: true + optional: true + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + + /depd/2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: true + + /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: + resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==} + engines: {node: '>=4'} + dev: true + + /diff/5.0.0: + resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + engines: {node: '>=0.3.1'} + dev: true + + /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: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /dom-serializer/2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dev: true + + /dom-walk/0.1.2: + resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} + dev: true + + /domelementtype/2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: true + + /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: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dev: true + + /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: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} + dependencies: + is-obj: 2.0.0 + dev: true + optional: true + + /dotenv/16.4.1: + resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} + engines: {node: '>=12'} + dev: true + + /double-ended-queue/2.1.0-0: + resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: true + + /elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /emittery/0.10.0: + resolution: {integrity: sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==} + engines: {node: '>=12'} + dev: true + + /emittery/0.4.1: + resolution: {integrity: sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==} + engines: {node: '>=6'} + dev: true + optional: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /encodeurl/1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: true + + /encoding-down/6.3.0: + resolution: {integrity: sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==} + engines: {node: '>=6'} + dependencies: + abstract-leveldown: 6.2.3 + inherits: 2.0.4 + level-codec: 9.0.2 + level-errors: 2.0.1 + dev: true + optional: true + + /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: + resolution: {integrity: sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA==} + dependencies: + write-stream: 0.4.3 + dev: true + optional: true + + /entities/4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: true + + /env-paths/2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + dev: true + optional: true + + /errno/0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + dependencies: + prr: 1.0.1 + dev: true + optional: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-abstract/1.22.3: + resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.3 + get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + internal-slot: 1.0.6 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.1 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.2 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.0 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.0 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.14 + dev: true + + /es-array-method-boxes-properly/1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-errors/1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-set-tostringtag/2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.3 + has-tostringtag: 1.0.2 + hasown: 2.0.0 + dev: true + + /es-shim-unscopables/1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.0 + dev: true + + /es-to-primitive/1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + + /es5-ext/0.10.62: + resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} + engines: {node: '>=0.10'} + requiresBuild: true + dependencies: + es6-iterator: 2.0.3 + es6-symbol: 3.1.3 + next-tick: 1.1.0 + dev: true + + /es6-iterator/2.0.3: + resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} + dependencies: + d: 1.0.1 + es5-ext: 0.10.62 + es6-symbol: 3.1.3 + dev: true + + /es6-promise/4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + dev: true + + /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.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true + + /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: + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-standard/17.1.0_ot4howdeavqht6h5s42eunnfxi: + resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: ^8.0.1 + eslint-plugin-import: ^2.25.2 + eslint-plugin-n: '^15.0.0 || ^16.0.0 ' + 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 + dev: true + + /eslint-import-resolver-node/0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.8.0_rzg3ygvhoewmy7caurhnki56y4: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /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/regexpp': 4.10.0 + 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: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.3 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0_rzg3ygvhoewmy7caurhnki56y4 + hasown: 2.0.0 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.2 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /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 + builtins: 5.0.1 + 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 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.5.4 + dev: true + + /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: + eslint: ^7.0.0 || ^8.0.0 + dependencies: + eslint: 8.56.0 + dev: true + + /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: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + + /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: + 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/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.56.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /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 + eslint-visitor-keys: 3.4.3 + dev: true + + /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: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag/1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: true + + /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: + resolution: {integrity: sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw==} + peerDependencies: + '@codechecks/client': ^0.1.0 + peerDependenciesMeta: + '@codechecks/client': + optional: true + dependencies: + '@solidity-parser/parser': 0.14.5 + axios: 1.6.7 + cli-table3: 0.5.1 + colors: 1.4.0 + ethereum-cryptography: 1.2.0 + ethers: 5.7.2 + fs-readdir-recursive: 1.1.0 + lodash: 4.17.21 + markdown-table: 1.1.3 + mocha: 10.2.0 + req-cwd: 2.0.0 + sha1: 1.1.1 + sync-request: 6.1.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: true + + /eth-helpers/1.3.1: + resolution: {integrity: sha512-iEcqhro1pqnZbnE3te0KDargTadc1J4zAiV0J1dwBDPo5nbHYBMxPDLQFA+0sMKUxe7cjHtMger6/75ukN3P5A==} + dependencies: + nanoassert: 2.0.0 + dev: true + + /eth-lib/0.1.29: + resolution: {integrity: sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + nano-json-stream-parser: 0.1.2 + servify: 0.1.12 + ws: 3.3.3 + xhr-request-promise: 0.1.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /eth-lib/0.2.8: + resolution: {integrity: sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + xhr-request-promise: 0.1.3 + dev: true + + /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: + resolution: {integrity: sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==} + dependencies: + '@types/pbkdf2': 3.1.2 + '@types/secp256k1': 4.0.6 + blakejs: 1.2.1 + browserify-aes: 1.2.0 + bs58check: 2.1.2 + create-hash: 1.2.0 + create-hmac: 1.1.7 + hash.js: 1.1.7 + keccak: 3.0.4 + pbkdf2: 3.1.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + scrypt-js: 3.0.1 + secp256k1: 4.0.3 + setimmediate: 1.0.5 + dev: true + + /ethereum-cryptography/1.2.0: + resolution: {integrity: sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==} + dependencies: + '@noble/hashes': 1.2.0 + '@noble/secp256k1': 1.7.1 + '@scure/bip32': 1.1.5 + '@scure/bip39': 1.1.1 + dev: true + + /ethereum-cryptography/2.1.3: + resolution: {integrity: sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA==} + dependencies: + '@noble/curves': 1.3.0 + '@noble/hashes': 1.3.3 + '@scure/bip32': 1.3.3 + '@scure/bip39': 1.2.2 + dev: true + + /ethereumjs-util/7.1.5: + resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} + engines: {node: '>=10.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + bn.js: 5.2.1 + create-hash: 1.2.0 + ethereum-cryptography: 0.1.3 + rlp: 2.2.7 + dev: true + + /ethers/4.0.49: + resolution: {integrity: sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg==} + dependencies: + aes-js: 3.0.0 + bn.js: 4.12.0 + elliptic: 6.5.4 + hash.js: 1.1.3 + js-sha3: 0.5.7 + scrypt-js: 2.0.4 + setimmediate: 1.0.4 + uuid: 2.0.1 + xmlhttprequest: 1.8.0 + dev: true + + /ethers/5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==} + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/abstract-provider': 5.7.0 + '@ethersproject/abstract-signer': 5.7.0 + '@ethersproject/address': 5.7.0 + '@ethersproject/base64': 5.7.0 + '@ethersproject/basex': 5.7.0 + '@ethersproject/bignumber': 5.7.0 + '@ethersproject/bytes': 5.7.0 + '@ethersproject/constants': 5.7.0 + '@ethersproject/contracts': 5.7.0 + '@ethersproject/hash': 5.7.0 + '@ethersproject/hdnode': 5.7.0 + '@ethersproject/json-wallets': 5.7.0 + '@ethersproject/keccak256': 5.7.0 + '@ethersproject/logger': 5.7.0 + '@ethersproject/networks': 5.7.1 + '@ethersproject/pbkdf2': 5.7.0 + '@ethersproject/properties': 5.7.0 + '@ethersproject/providers': 5.7.2 + '@ethersproject/random': 5.7.0 + '@ethersproject/rlp': 5.7.0 + '@ethersproject/sha2': 5.7.0 + '@ethersproject/signing-key': 5.7.0 + '@ethersproject/solidity': 5.7.0 + '@ethersproject/strings': 5.7.0 + '@ethersproject/transactions': 5.7.0 + '@ethersproject/units': 5.7.0 + '@ethersproject/wallet': 5.7.0 + '@ethersproject/web': 5.7.1 + '@ethersproject/wordlists': 5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /ethjs-abi/0.2.1: + resolution: {integrity: sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + js-sha3: 0.5.5 + number-to-bn: 1.7.0 + dev: true + + /ethjs-unit/0.1.6: + resolution: {integrity: sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + number-to-bn: 1.7.0 + dev: true + + /event-target-shim/5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + dev: true + optional: true + + /eventemitter3/4.0.4: + resolution: {integrity: sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==} + dev: true + + /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 + + /express/4.18.2: + resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.5.0 + cookie-signature: 1.0.6 + debug: 2.6.9 + depd: 2.0.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.2.0 + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.11.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + dev: true + + /ext/1.7.0: + resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} + dependencies: + type: 2.7.2 + dev: true + + /extend/3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + + /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: + resolution: {integrity: sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA==} + engines: {node: '>=8.0.0'} + dependencies: + pure-rand: 5.0.5 + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff/1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true + + /fastq/1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /fetch-cookie/0.11.0: + resolution: {integrity: sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA==} + engines: {node: '>=8'} + dependencies: + tough-cookie: 4.1.3 + dev: true + optional: true + + /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: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler/1.2.0: + resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /find-up/1.1.2: + resolution: {integrity: sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==} + engines: {node: '>=0.10.0'} + dependencies: + path-exists: 2.1.0 + pinkie-promise: 2.0.1 + dev: true + + /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: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} + dependencies: + locate-path: 3.0.0 + dev: true + optional: true + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /find-up/5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + dev: true + + /flat-cache/3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flat/5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + dev: true + + /flatted/3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /follow-redirects/1.15.5_debug@4.3.4: + resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dependencies: + debug: 4.3.4 + dev: true + + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /foreach/2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + dev: true + + /forever-agent/0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: true + + /form-data-encoder/1.7.1: + resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} + dev: true + + /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: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /form-data/2.5.1: + resolution: {integrity: sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: true + + /fresh/0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: true + + /fs-extra/0.30.0: + resolution: {integrity: sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 2.4.0 + klaw: 1.3.1 + path-is-absolute: 1.0.1 + rimraf: 2.7.1 + dev: true + + /fs-extra/4.0.3: + resolution: {integrity: sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra/8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + + /fs-extra/9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + optional: true + + /fs-minipass/1.2.7: + resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} + dependencies: + minipass: 2.9.0 + dev: true + + /fs-readdir-recursive/1.1.0: + resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + + /fsevents/2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name/1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + functions-have-names: 1.2.3 + dev: true + + /functional-red-black-tree/1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + dev: true + optional: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + + /ganache/7.9.1: + resolution: {integrity: sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==} + hasBin: true + dependencies: + '@trufflesuite/uws-js-unofficial': 20.30.0-unofficial.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + '@types/seedrandom': 3.0.1 + abstract-level: 1.0.3 + abstract-leveldown: 7.2.0 + async-eventemitter: 0.2.4 + emittery: 0.10.0 + optionalDependencies: + bufferutil: 4.0.5 + utf-8-validate: 5.0.7 + dev: true + bundledDependencies: + - '@trufflesuite/bigint-buffer' + - keccak + - leveldown + - secp256k1 + + /get-caller-file/1.0.3: + resolution: {integrity: sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==} + dev: true + + /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: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /get-intrinsic/1.2.3: + resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.0 + dev: true + + /get-port/3.2.0: + resolution: {integrity: sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==} + engines: {node: '>=4'} + dev: true + + /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: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /get-symbol-description/1.0.0: + resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + dev: true + + /get-tsconfig/4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + + /getpass/0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: true + + /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: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob/8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + dev: true + + /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: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /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: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.3 + dev: true + + /got/11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + dev: true + + /got/12.1.0: + resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 5.0.1 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 6.1.0 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + form-data-encoder: 1.7.1 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 2.0.1 + dev: true + + /got/12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} + dependencies: + '@sindresorhus/is': 5.6.0 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.14 + decompress-response: 6.0.0 + form-data-encoder: 2.1.4 + get-stream: 6.0.1 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 3.0.0 + responselike: 3.0.0 + dev: true + + /graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /graphql-tag/2.12.6_graphql@15.8.0: + resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} + engines: {node: '>=10'} + 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: + graphql: 15.8.0 + tslib: 2.6.2 + dev: true + optional: true + + /graphql/15.8.0: + resolution: {integrity: sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw==} + engines: {node: '>= 10.x'} + dev: true + optional: true + + /har-schema/2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + dev: true + + /har-validator/5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + dependencies: + ajv: 6.12.6 + har-schema: 2.0.0 + dev: true + + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-property-descriptors/1.0.1: + resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + dependencies: + get-intrinsic: 1.2.3 + dev: true + + /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: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /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: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + safe-buffer: 5.2.1 + dev: true + + /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: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /hasown/2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /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: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: true + + /highlightjs-solidity/2.0.6: + resolution: {integrity: sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg==} + dev: true + + /hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /hosted-git-info/2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true + + /htmlparser2/8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: true + + /http-basic/8.1.3: + resolution: {integrity: sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw==} + engines: {node: '>=6.0.0'} + dependencies: + caseless: 0.12.0 + concat-stream: 1.6.2 + http-response-object: 3.0.2 + parse-cache-control: 1.0.1 + dev: true + + /http-cache-semantics/4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: true + + /http-errors/2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + dev: true + + /http-https/1.0.0: + resolution: {integrity: sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==} + dev: true + + /http-response-object/3.0.2: + resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} + dependencies: + '@types/node': 10.17.60 + dev: true + + /http-signature/1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + dependencies: + assert-plus: 1.0.0 + jsprim: 1.4.2 + sshpk: 1.18.0 + dev: true + + /http2-wrapper/1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + + /http2-wrapper/2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + dev: true + + /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: + resolution: {integrity: sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==} + engines: {node: '>=4.0.0'} + dependencies: + punycode: 2.1.0 + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + dev: true + + /immediate/3.3.0: + resolution: {integrity: sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==} + dev: true + optional: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /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: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /ini/1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true + + /internal-slot/1.0.6: + resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.3 + hasown: 2.0.0 + side-channel: 1.0.4 + dev: true + + /invert-kv/1.0.0: + resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} + engines: {node: '>=0.10.0'} + dev: true + + /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: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.2 + dev: true + + /is-array-buffer/3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true + + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /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: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.2 + dev: true + + /is-buffer/2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} + dev: true + + /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: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module/2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /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: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true + + /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: + resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==} + engines: {node: '>=4'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-function/1.0.2: + resolution: {integrity: sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==} + dev: true + + /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: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /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: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /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: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-obj/2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: true + optional: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj/2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + has-tostringtag: 1.0.2 + dev: true + + /is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + dependencies: + call-bind: 1.0.5 + dev: true + + /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: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /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: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: true + + /is-unicode-supported/0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + + /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: + resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} + dev: true + + /is-weakref/1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.5 + dev: true + + /isarray/0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: true + optional: true + + /isarray/1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isomorphic-ws/4.0.1_ws@7.5.9: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + dependencies: + ws: 7.5.9 + dev: true + optional: true + + /isomorphic-ws/5.0.0_ws@8.16.0: + resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} + peerDependencies: + ws: '*' + dependencies: + ws: 8.16.0 + dev: true + + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true + + /js-sha256/0.11.0: + resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} + dev: true + + /js-sha3/0.5.5: + resolution: {integrity: sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==} + dev: true + + /js-sha3/0.5.7: + resolution: {integrity: sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==} + dev: true + + /js-sha3/0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==} + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + dev: true + + /jsbn/0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true + + /json-buffer/3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-pointer/0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + dependencies: + foreach: 2.0.6 + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse/1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-schema-typed/7.0.3: + resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} + dev: true + optional: true + + /json-schema/0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + + /json-stable-stringify-without-jsonify/1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true + + /json-stable-stringify/1.1.1: + resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + isarray: 2.0.5 + jsonify: 0.0.1 + object-keys: 1.1.1 + dev: true + + /json-stringify-safe/5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsonfile/2.4.0: + resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + optional: true + + /jsonify/0.0.1: + resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} + dev: true + + /jsprim/1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: true + + /keccak/3.0.4: + resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + dev: true + + /keyv/4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /klaw/1.3.1: + resolution: {integrity: sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + + /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: + resolution: {integrity: sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==} + engines: {node: '>=0.10.0'} + dependencies: + invert-kv: 1.0.0 + dev: true + + /level-codec/9.0.2: + resolution: {integrity: sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==} + engines: {node: '>=6'} + dependencies: + buffer: 5.7.1 + dev: true + optional: true + + /level-concat-iterator/2.0.1: + resolution: {integrity: sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==} + engines: {node: '>=6'} + dev: true + optional: true + + /level-concat-iterator/3.1.0: + resolution: {integrity: sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==} + engines: {node: '>=10'} + dependencies: + catering: 2.1.1 + dev: true + + /level-errors/2.0.1: + resolution: {integrity: sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==} + engines: {node: '>=6'} + dependencies: + errno: 0.1.8 + dev: true + optional: true + + /level-iterator-stream/4.0.2: + resolution: {integrity: sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==} + engines: {node: '>=6'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + xtend: 4.0.2 + dev: true + optional: true + + /level-js/5.0.2: + resolution: {integrity: sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg==} + dependencies: + abstract-leveldown: 6.2.3 + buffer: 5.7.1 + inherits: 2.0.4 + ltgt: 2.2.1 + dev: true + optional: true + + /level-packager/5.1.1: + resolution: {integrity: sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==} + engines: {node: '>=6'} + dependencies: + encoding-down: 6.3.0 + levelup: 4.4.0 + dev: true + optional: true + + /level-supports/1.0.1: + resolution: {integrity: sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==} + engines: {node: '>=6'} + dependencies: + xtend: 4.0.2 + dev: true + optional: true + + /level-supports/2.1.0: + resolution: {integrity: sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==} + engines: {node: '>=10'} + dev: true + + /level-supports/4.0.1: + resolution: {integrity: sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==} + engines: {node: '>=12'} + dev: true + + /level-transcoder/1.0.1: + resolution: {integrity: sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==} + engines: {node: '>=12'} + dependencies: + buffer: 6.0.3 + module-error: 1.0.2 + dev: true + + /level-write-stream/1.0.0: + resolution: {integrity: sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw==} + dependencies: + end-stream: 0.1.0 + dev: true + optional: true + + /level/6.0.1: + resolution: {integrity: sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw==} + engines: {node: '>=8.6.0'} + dependencies: + level-js: 5.0.2 + level-packager: 5.1.1 + leveldown: 5.6.0 + dev: true + optional: true + + /leveldown/5.6.0: + resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} + engines: {node: '>=8.6.0'} + requiresBuild: true + dependencies: + abstract-leveldown: 6.2.3 + napi-macros: 2.0.0 + node-gyp-build: 4.1.1 + dev: true + optional: true + + /levelup/4.4.0: + resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} + engines: {node: '>=6'} + dependencies: + deferred-leveldown: 5.3.0 + level-errors: 2.0.1 + level-iterator-stream: 4.0.2 + level-supports: 1.0.1 + xtend: 4.0.2 + dev: true + optional: true + + /levn/0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /lines-and-columns/1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true + + /load-json-file/1.1.0: + resolution: {integrity: sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + parse-json: 2.2.0 + pify: 2.3.0 + pinkie-promise: 2.0.1 + strip-bom: 2.0.0 + dev: true + + /locate-path/2.0.0: + resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} + engines: {node: '>=4'} + dependencies: + p-locate: 2.0.0 + path-exists: 3.0.0 + dev: true + + /locate-path/3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} + dependencies: + p-locate: 3.0.0 + path-exists: 3.0.0 + dev: true + optional: true + + /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: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + dev: true + + /lodash-es/4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: true + + /lodash.assign/4.2.0: + resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==} + dev: true + + /lodash.flatten/4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + dev: true + + /lodash.isequal/4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.sortby/4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true + optional: true + + /lodash.truncate/4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /log-symbols/4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /loglevel/1.9.1: + resolution: {integrity: sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg==} + engines: {node: '>= 0.6.0'} + dev: true + optional: true + + /long/4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lower-case-first/1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + dependencies: + lower-case: 1.1.4 + dev: true + + /lower-case/1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true + + /lowercase-keys/2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + dev: true + + /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/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: + resolution: {integrity: sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ==} + engines: {node: '>=12'} + dev: true + optional: true + + /ltgt/2.2.1: + resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} + dev: true + optional: true + + /markdown-table/1.1.3: + resolution: {integrity: sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==} + dev: true + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /media-typer/0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: true + + /memdown/1.4.1: + resolution: {integrity: sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w==} + dependencies: + abstract-leveldown: 2.7.2 + functional-red-black-tree: 1.0.1 + immediate: 3.3.0 + inherits: 2.0.4 + ltgt: 2.2.1 + safe-buffer: 5.1.2 + dev: true + optional: true + + /memorystream/0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + dev: true + + /merge-descriptors/1.0.1: + resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + dev: true + + /methods/1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: true + + /micro-ftch/0.3.1: + resolution: {integrity: sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg==} + dev: true + + /mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /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: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + optional: true + + /mimic-fn/3.1.0: + resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} + engines: {node: '>=8'} + dev: true + optional: true + + /mimic-response/1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + dev: true + + /mimic-response/3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: true + + /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: + resolution: {integrity: sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==} + dependencies: + dom-walk: 0.1.2 + dev: true + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /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: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /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: + resolution: {integrity: sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==} + dependencies: + minipass: 2.9.0 + dev: true + + /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. + dependencies: + mkdirp: 3.0.1 + dev: true + + /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: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mkdirp/3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mocha/10.1.0: + resolution: {integrity: sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /mocha/10.2.0: + resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + engines: {node: '>= 14.0.0'} + hasBin: true + dependencies: + ansi-colors: 4.1.1 + browser-stdout: 1.3.1 + chokidar: 3.5.3 + debug: 4.3.4_supports-color@8.1.1 + diff: 5.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 7.2.0 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.0.1 + ms: 2.1.3 + nanoid: 3.3.3 + serialize-javascript: 6.0.0 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.2.1 + yargs: 16.2.0 + yargs-parser: 20.2.4 + yargs-unparser: 2.0.0 + dev: true + + /mock-fs/4.14.0: + resolution: {integrity: sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==} + dev: true + + /module-error/1.0.2: + resolution: {integrity: sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==} + engines: {node: '>=10'} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /multibase/0.6.1: + resolution: {integrity: sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + dev: true + + /multibase/0.7.0: + resolution: {integrity: sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + base-x: 3.0.9 + buffer: 5.7.1 + dev: true + + /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: + resolution: {integrity: sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==} + deprecated: This module has been superseded by the multiformats module + dependencies: + buffer: 5.7.1 + varint: 5.0.2 + dev: true + + /multihashes/0.4.21: + resolution: {integrity: sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==} + dependencies: + buffer: 5.7.1 + multibase: 0.7.0 + varint: 5.0.2 + dev: true + + /nano-base32/1.0.1: + resolution: {integrity: sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw==} + dev: true + + /nano-json-stream-parser/0.1.2: + resolution: {integrity: sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew==} + dev: true + + /nanoassert/2.0.0: + resolution: {integrity: sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==} + dev: true + + /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: + resolution: {integrity: sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==} + dev: true + optional: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /negotiator/0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: true + + /next-tick/1.1.0: + resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} + dev: true + + /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: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + dev: true + optional: true + + /node-addon-api/2.0.2: + resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} + dev: true + + /node-fetch/2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + optional: true + + /node-fetch/2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: true + + /node-gyp-build/4.1.1: + resolution: {integrity: sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ==} + hasBin: true + dev: true + optional: true + + /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: + resolution: {integrity: sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw==} + engines: {node: '>= 7.6.0'} + dependencies: + shallowequal: 1.1.0 + dev: true + + /nofilter/1.0.4: + resolution: {integrity: sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA==} + engines: {node: '>=8'} + dev: true + + /normalize-package-data/2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + dependencies: + hosted-git-info: 2.8.9 + resolve: 1.22.8 + semver: 5.7.2 + validate-npm-package-license: 3.0.4 + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url/6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + + /normalize-url/8.0.0: + resolution: {integrity: sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==} + engines: {node: '>=14.16'} + dev: true + + /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: + resolution: {integrity: sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==} + engines: {node: '>=0.10.0'} + dev: true + + /number-to-bn/1.7.0: + resolution: {integrity: sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + bn.js: 4.11.6 + strip-hex-prefix: 1.0.0 + dev: true + + /oauth-sign/0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-inspect/1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries/2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /object.groupby/1.0.2: + resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} + dependencies: + array.prototype.filter: 1.0.3 + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + es-errors: 1.3.0 + dev: true + + /object.values/1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /oboe/2.1.5: + resolution: {integrity: sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA==} + dependencies: + http-https: 1.0.0 + dev: true + + /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: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + optional: true + + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /original-require/1.0.1: + resolution: {integrity: sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A==} + dev: true + + /os-locale/1.4.0: + resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} + engines: {node: '>=0.10.0'} + dependencies: + lcid: 1.0.0 + dev: true + + /p-cancelable/2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + dev: true + + /p-cancelable/3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: true + + /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: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /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: + resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} + engines: {node: '>=4'} + dependencies: + p-limit: 1.3.0 + dev: true + + /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 + optional: true + + /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: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + dev: true + + /p-try/1.0.0: + resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} + engines: {node: '>=4'} + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /package-json/8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} + dependencies: + got: 12.6.1 + registry-auth-token: 5.0.2 + registry-url: 6.0.1 + semver: 7.5.4 + dev: true + + /param-case/2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + dependencies: + no-case: 2.3.2 + dev: true + + /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: + resolution: {integrity: sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg==} + dev: true + + /parse-headers/2.0.5: + resolution: {integrity: sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==} + dev: true + + /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: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.23.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + dev: true + + /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: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: true + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: true + + /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: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + dependencies: + no-case: 2.3.2 + dev: true + + /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: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp/0.1.7: + resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + dev: true + + /path-type/1.1.0: + resolution: {integrity: sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==} + engines: {node: '>=0.10.0'} + dependencies: + graceful-fs: 4.2.11 + pify: 2.3.0 + pinkie-promise: 2.0.1 + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /performance-now/2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pify/2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + + /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: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + dev: true + + /pkg-up/3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} + dependencies: + find-up: 3.0.0 + dev: true + optional: true + + /pluralize/8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /pouchdb-abstract-mapreduce/7.3.1: + resolution: {integrity: sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w==} + dependencies: + pouchdb-binary-utils: 7.3.1 + pouchdb-collate: 7.3.1 + pouchdb-collections: 7.3.1 + pouchdb-errors: 7.3.1 + pouchdb-fetch: 7.3.1 + pouchdb-mapreduce-utils: 7.3.1 + pouchdb-md5: 7.3.1 + pouchdb-utils: 7.3.1 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /pouchdb-adapter-leveldb-core/7.3.1: + resolution: {integrity: sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA==} + dependencies: + argsarray: 0.0.1 + buffer-from: 1.1.2 + double-ended-queue: 2.1.0-0 + levelup: 4.4.0 + pouchdb-adapter-utils: 7.3.1 + pouchdb-binary-utils: 7.3.1 + pouchdb-collections: 7.3.1 + pouchdb-errors: 7.3.1 + pouchdb-json: 7.3.1 + pouchdb-md5: 7.3.1 + pouchdb-merge: 7.3.1 + pouchdb-utils: 7.3.1 + sublevel-pouchdb: 7.3.1 + through2: 3.0.2 + dev: true + optional: true + + /pouchdb-adapter-memory/7.3.1: + resolution: {integrity: sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg==} + dependencies: + memdown: 1.4.1 + pouchdb-adapter-leveldb-core: 7.3.1 + pouchdb-utils: 7.3.1 + dev: true + optional: true + + /pouchdb-adapter-utils/7.3.1: + resolution: {integrity: sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw==} + dependencies: + pouchdb-binary-utils: 7.3.1 + pouchdb-collections: 7.3.1 + pouchdb-errors: 7.3.1 + pouchdb-md5: 7.3.1 + pouchdb-merge: 7.3.1 + pouchdb-utils: 7.3.1 + dev: true + optional: true + + /pouchdb-binary-utils/7.3.1: + resolution: {integrity: sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw==} + dependencies: + buffer-from: 1.1.2 + dev: true + optional: true + + /pouchdb-collate/7.3.1: + resolution: {integrity: sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ==} + dev: true + optional: true + + /pouchdb-collections/7.3.1: + resolution: {integrity: sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w==} + dev: true + optional: true + + /pouchdb-debug/7.2.1: + resolution: {integrity: sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw==} + dependencies: + debug: 3.1.0 + transitivePeerDependencies: + - supports-color + dev: true + optional: true + + /pouchdb-errors/7.3.1: + resolution: {integrity: sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw==} + dependencies: + inherits: 2.0.4 + dev: true + optional: true + + /pouchdb-fetch/7.3.1: + resolution: {integrity: sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag==} + dependencies: + abort-controller: 3.0.0 + fetch-cookie: 0.11.0 + node-fetch: 2.6.7 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /pouchdb-find/7.3.1: + resolution: {integrity: sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA==} + dependencies: + pouchdb-abstract-mapreduce: 7.3.1 + pouchdb-collate: 7.3.1 + pouchdb-errors: 7.3.1 + pouchdb-fetch: 7.3.1 + pouchdb-md5: 7.3.1 + pouchdb-selector-core: 7.3.1 + pouchdb-utils: 7.3.1 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /pouchdb-json/7.3.1: + resolution: {integrity: sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ==} + dependencies: + vuvuzela: 1.0.3 + dev: true + optional: true + + /pouchdb-mapreduce-utils/7.3.1: + resolution: {integrity: sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg==} + dependencies: + argsarray: 0.0.1 + inherits: 2.0.4 + pouchdb-collections: 7.3.1 + pouchdb-utils: 7.3.1 + dev: true + optional: true + + /pouchdb-md5/7.3.1: + resolution: {integrity: sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg==} + dependencies: + pouchdb-binary-utils: 7.3.1 + spark-md5: 3.0.2 + dev: true + optional: true + + /pouchdb-merge/7.3.1: + resolution: {integrity: sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw==} + dev: true + optional: true + + /pouchdb-selector-core/7.3.1: + resolution: {integrity: sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w==} + dependencies: + pouchdb-collate: 7.3.1 + pouchdb-utils: 7.3.1 + dev: true + optional: true + + /pouchdb-utils/7.3.1: + resolution: {integrity: sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ==} + dependencies: + argsarray: 0.0.1 + clone-buffer: 1.0.0 + immediate: 3.3.0 + inherits: 2.0.4 + pouchdb-collections: 7.3.1 + pouchdb-errors: 7.3.1 + pouchdb-md5: 7.3.1 + uuid: 8.3.2 + dev: true + optional: true + + /pouchdb/7.3.0: + resolution: {integrity: sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw==} + dependencies: + abort-controller: 3.0.0 + argsarray: 0.0.1 + buffer-from: 1.1.2 + clone-buffer: 1.0.0 + double-ended-queue: 2.1.0-0 + fetch-cookie: 0.11.0 + immediate: 3.3.0 + inherits: 2.0.4 + level: 6.0.1 + level-codec: 9.0.2 + level-write-stream: 1.0.0 + leveldown: 5.6.0 + levelup: 4.4.0 + ltgt: 2.2.1 + node-fetch: 2.6.7 + readable-stream: 1.1.14 + spark-md5: 3.0.2 + through2: 3.0.2 + uuid: 8.3.2 + vuvuzela: 1.0.3 + transitivePeerDependencies: + - encoding + dev: true + optional: true + + /prelude-ls/1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier/2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + requiresBuild: true + dev: true + optional: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process/0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + + /promise/8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + dependencies: + asap: 2.0.6 + dev: true + + /proto-list/1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: true + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: true + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true + + /prr/1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + dev: true + optional: true + + /psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /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: + resolution: {integrity: sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==} + engines: {node: '>=6'} + dev: true + + /punycode/2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /pure-rand/5.0.5: + resolution: {integrity: sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw==} + dev: true + + /qs/6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /qs/6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.4 + dev: true + + /qs/6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + dev: true + + /query-string/5.1.1: + resolution: {integrity: sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==} + engines: {node: '>=0.10.0'} + dependencies: + decode-uri-component: 0.2.2 + object-assign: 4.1.1 + strict-uri-encode: 1.1.0 + dev: true + + /querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + optional: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body/2.5.1: + resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /raw-body/2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /rc/1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + dev: true + + /read-pkg-up/1.0.1: + resolution: {integrity: sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==} + engines: {node: '>=0.10.0'} + dependencies: + find-up: 1.1.2 + read-pkg: 1.1.0 + dev: true + + /read-pkg/1.1.0: + resolution: {integrity: sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==} + engines: {node: '>=0.10.0'} + dependencies: + load-json-file: 1.1.0 + normalize-package-data: 2.5.0 + path-type: 1.1.0 + dev: true + + /readable-stream/0.0.4: + resolution: {integrity: sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw==} + dev: true + optional: true + + /readable-stream/1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + dev: true + optional: true + + /readable-stream/2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream/3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /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: + resolution: {integrity: sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA==} + dependencies: + '@redux-saga/core': 1.3.0 + dev: true + + /redux/3.7.2: + resolution: {integrity: sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==} + dependencies: + lodash: 4.17.21 + lodash-es: 4.17.21 + loose-envify: 1.4.0 + symbol-observable: 1.2.0 + dev: true + + /regenerator-runtime/0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regexp.prototype.flags/1.5.1: + resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + set-function-name: 2.0.1 + dev: true + + /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: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + dependencies: + rc: 1.2.8 + dev: true + + /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: + resolution: {integrity: sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA==} + engines: {node: '>=4'} + dependencies: + resolve-from: 3.0.0 + dev: true + + /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 + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + har-validator: 5.1.5 + http-signature: 1.2.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + oauth-sign: 0.9.0 + performance-now: 2.1.0 + qs: 6.5.3 + safe-buffer: 5.2.1 + tough-cookie: 2.5.0 + tunnel-agent: 0.6.0 + uuid: 3.4.0 + dev: true + + /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: + resolution: {integrity: sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==} + engines: {node: '>=0.10.0'} + dev: true + + /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: + resolution: {integrity: sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==} + dev: true + + /requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + optional: true + + /reselect-tree/1.3.7: + resolution: {integrity: sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg==} + dependencies: + debug: 3.2.7 + json-pointer: 0.6.2 + reselect: 4.1.8 + transitivePeerDependencies: + - supports-color + dev: true + + /reselect/4.1.8: + resolution: {integrity: sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ==} + dev: true + + /resolve-alpn/1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: true + + /resolve-from/3.0.0: + resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} + engines: {node: '>=4'} + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-pkg-maps/1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + + /resolve/1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /responselike/2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + dependencies: + lowercase-keys: 2.0.0 + dev: true + + /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: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + optional: true + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /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: + resolution: {integrity: sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A==} + engines: {node: '>=8'} + dev: true + + /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: + resolution: {integrity: sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==} + hasBin: true + dependencies: + bn.js: 5.2.1 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-array-concat/1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safe-regex-test/1.0.2: + resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + is-regex: 1.1.4 + dev: true + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /scrypt-js/2.0.4: + resolution: {integrity: sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw==} + dev: true + + /scrypt-js/3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} + dev: true + + /secp256k1/4.0.3: + resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + elliptic: 6.5.4 + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + dev: true + + /semver/5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true + + /semver/6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver/7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send/0.18.0: + resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + engines: {node: '>= 0.8.0'} + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /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: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-static/1.15.0: + resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.18.0 + transitivePeerDependencies: + - supports-color + dev: true + + /servify/0.1.12: + resolution: {integrity: sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw==} + engines: {node: '>=6'} + dependencies: + body-parser: 1.20.2 + cors: 2.8.5 + express: 4.18.2 + request: 2.88.2 + xhr: 2.6.0 + transitivePeerDependencies: + - supports-color + dev: true + + /set-blocking/2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + dev: true + + /set-function-length/1.2.0: + resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + function-bind: 1.1.2 + get-intrinsic: 1.2.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.1 + dev: true + + /set-function-name/2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.1 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.1 + dev: true + + /setimmediate/1.0.4: + resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + dev: true + + /setprototypeof/1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: true + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /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: + resolution: {integrity: sha512-yX0ULD3VD8U80YlM+6FapExy9uzYBpEOZzXRHwdhJn/+3PBbKhRHiNhknBqmMkW110zglXrJoZ52gtRbDGK4tg==} + dependencies: + nanoassert: 2.0.0 + dev: true + + /sha3/2.1.4: + resolution: {integrity: sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg==} + dependencies: + buffer: 6.0.3 + dev: true + + /shallowequal/1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + dev: true + + /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: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + object-inspect: 1.13.1 + dev: true + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + optional: true + + /simple-concat/1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + dev: true + + /simple-get/2.8.2: + resolution: {integrity: sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw==} + dependencies: + decompress-response: 3.3.0 + once: 1.4.0 + simple-concat: 1.0.1 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /snake-case/2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + dependencies: + no-case: 2.3.2 + dev: true + + /solc/0.4.26: + resolution: {integrity: sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==} + hasBin: true + dependencies: + fs-extra: 0.30.0 + memorystream: 0.3.1 + require-from-string: 1.2.1 + semver: 5.7.2 + yargs: 4.8.1 + dev: true + + /solhint/4.1.1_typescript@5.3.3: + resolution: {integrity: sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw==} + hasBin: true + dependencies: + '@solidity-parser/parser': 0.16.2 + ajv: 6.12.6 + antlr4: 4.13.1 + ast-parents: 0.0.1 + chalk: 4.1.2 + commander: 10.0.1 + cosmiconfig: 8.3.6_typescript@5.3.3 + fast-diff: 1.3.0 + glob: 8.1.0 + ignore: 5.3.1 + js-yaml: 4.1.0 + latest-version: 7.0.0 + lodash: 4.17.21 + pluralize: 8.0.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + table: 6.8.1 + text-table: 0.2.0 + optionalDependencies: + prettier: 2.8.8 + transitivePeerDependencies: + - typescript + dev: true + + /spark-md5/3.0.2: + resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} + dev: true + optional: true + + /spdx-correct/3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-exceptions/2.4.0: + resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} + dev: true + + /spdx-expression-parse/3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.4.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-license-ids/3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /sshpk/1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + + /statuses/2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: true + + /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: + resolution: {integrity: sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==} + engines: {node: '>=0.10.0'} + dependencies: + code-point-at: 1.1.0 + is-fullwidth-code-point: 1.0.0 + strip-ansi: 3.0.1 + dev: true + + /string-width/2.1.1: + resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==} + engines: {node: '>=4'} + dependencies: + is-fullwidth-code-point: 2.0.0 + strip-ansi: 4.0.0 + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string.prototype.trim/1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimend/1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string.prototype.trimstart/1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.5 + define-properties: 1.2.1 + es-abstract: 1.22.3 + dev: true + + /string_decoder/0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /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: + resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==} + engines: {node: '>=4'} + dependencies: + ansi-regex: 3.0.1 + dev: true + + /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: + 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: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /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: + resolution: {integrity: sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments/2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /sublevel-pouchdb/7.3.1: + resolution: {integrity: sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ==} + dependencies: + inherits: 2.0.4 + level-codec: 9.0.2 + ltgt: 2.2.1 + readable-stream: 1.1.14 + dev: true + optional: true + + /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: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /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: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /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: + resolution: {integrity: sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ==} + dependencies: + bluebird: 3.7.2 + buffer: 5.7.1 + eth-lib: 0.1.29 + fs-extra: 4.0.3 + got: 11.8.6 + mime-types: 2.1.35 + mkdirp-promise: 5.0.1 + mock-fs: 4.14.0 + setimmediate: 1.0.5 + tar: 4.4.19 + xhr-request: 1.1.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /symbol-observable/1.2.0: + resolution: {integrity: sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==} + engines: {node: '>=0.10.0'} + dev: true + + /sync-request/6.1.0: + resolution: {integrity: sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw==} + engines: {node: '>=8.0.0'} + dependencies: + http-response-object: 3.0.2 + sync-rpc: 1.3.6 + then-request: 6.0.2 + dev: true + + /sync-rpc/1.3.6: + resolution: {integrity: sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw==} + dependencies: + get-port: 3.2.0 + dev: true + + /table/6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /tar/4.4.19: + resolution: {integrity: sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==} + engines: {node: '>=4.5'} + dependencies: + chownr: 1.1.4 + fs-minipass: 1.2.7 + minipass: 2.9.0 + minizlib: 1.3.3 + mkdirp: 0.5.6 + safe-buffer: 5.2.1 + yallist: 3.1.1 + dev: true + + /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-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /then-request/6.0.2: + resolution: {integrity: sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA==} + engines: {node: '>=6.0.0'} + dependencies: + '@types/concat-stream': 1.6.1 + '@types/form-data': 0.0.33 + '@types/node': 8.10.66 + '@types/qs': 6.9.11 + caseless: 0.12.0 + concat-stream: 1.6.2 + form-data: 2.5.1 + http-basic: 8.1.3 + http-response-object: 3.0.2 + promise: 8.3.0 + qs: 6.11.2 + dev: true + + /through2/3.0.2: + resolution: {integrity: sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: true + optional: true + + /timed-out/4.0.1: + resolution: {integrity: sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==} + engines: {node: '>=0.10.0'} + dev: true + + /tiny-typed-emitter/2.1.0: + resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} + dev: true + optional: true + + /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 + + /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: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: true + + /tough-cookie/2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + dev: true + + /tough-cookie/4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + optional: true + + /tr46/0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + dev: true + + /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: + assertion-error: 1.1.0 + lodash.isequal: 4.5.0 + dev: true + + /truffle-flattener/1.6.0: + resolution: {integrity: sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q==} + hasBin: true + dependencies: + '@resolver-engine/imports-fs': 0.2.2 + '@solidity-parser/parser': 0.14.5 + find-up: 2.1.0 + mkdirp: 1.0.4 + tsort: 0.0.1 + transitivePeerDependencies: + - supports-color + dev: true + + /truffle/5.11.5: + resolution: {integrity: sha512-yCa2uWs5DmL0spuJUuIMtnVayRQrVuWLtcRXHMB0NLrtWDcRo7VM9RViveV4+oi9LdZ8VpFmmqHGm43LbzUxOA==} + engines: {node: ^16.20 || ^18.16 || >=20} + hasBin: true + requiresBuild: true + dependencies: + '@truffle/db-loader': 0.2.36 + '@truffle/debugger': 12.1.5 + app-module-path: 2.2.0 + ganache: 7.9.1 + mocha: 10.1.0 + original-require: 1.0.1 + optionalDependencies: + '@truffle/db': 2.0.36 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /tsconfig-paths/3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + + /tslib/2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} + dev: true + optional: true + + /tslib/2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + optional: true + + /tsort/0.0.1: + resolution: {integrity: sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==} + dev: true + + /tunnel-agent/0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /tweetnacl/0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + + /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: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest/0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + dev: true + + /type/1.2.0: + resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} + dev: true + + /type/2.7.2: + resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} + dev: true + + /typed-array-buffer/1.0.0: + resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + get-intrinsic: 1.2.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length/1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset/1.0.0: + resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.5 + for-each: 0.3.3 + is-typed-array: 1.1.13 + dev: true + + /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: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true + + /typescript-compare/0.0.2: + resolution: {integrity: sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA==} + dependencies: + typescript-logic: 0.0.0 + dev: true + + /typescript-logic/0.0.0: + resolution: {integrity: sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q==} + dev: true + + /typescript-tuple/2.2.1: + resolution: {integrity: sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q==} + dependencies: + typescript-compare: 0.0.2 + dev: true + + /typescript/5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + + /ultron/1.1.1: + resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} + dev: true + + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.5 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + + /undici-types/5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: true + + /universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + optional: true + + /universalify/2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + optional: true + + /unpipe/1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: true + + /upper-case-first/1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + dependencies: + upper-case: 1.1.3 + dev: true + + /upper-case/1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + optional: true + + /url-set-query/1.0.0: + resolution: {integrity: sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg==} + dev: true + + /utf-8-validate/5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + + /utf-8-validate/5.0.7: + resolution: {integrity: sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + optional: true + + /utf-8-validate/6.0.3: + resolution: {integrity: sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA==} + engines: {node: '>=6.14.2'} + requiresBuild: true + dependencies: + node-gyp-build: 4.8.0 + dev: true + + /utf8/3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /util/0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.0.10 + is-typed-array: 1.1.13 + which-typed-array: 1.1.14 + dev: true + + /utils-merge/1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: true + + /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: + 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: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + optional: true + + /uuid/9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: true + + /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: + resolution: {integrity: sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg==} + engines: {node: '>=12'} + dev: true + optional: true + + /value-or-promise/1.0.12: + resolution: {integrity: sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q==} + engines: {node: '>=12'} + dev: true + optional: true + + /varint/5.0.2: + resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} + dev: true + + /vary/1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: true + + /verror/1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: true + + /vuvuzela/1.0.3: + resolution: {integrity: sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ==} + dev: true + optional: true + + /web3-bzz/1.10.0: + resolution: {integrity: sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /web3-bzz/1.10.3: + resolution: {integrity: sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + '@types/node': 12.20.55 + got: 12.1.0 + swarm-js: 0.1.42 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + /web3-core-helpers/1.10.0: + resolution: {integrity: sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g==} + engines: {node: '>=8.0.0'} + dependencies: + web3-eth-iban: 1.10.0 + web3-utils: 1.10.0 + dev: true + + /web3-core-helpers/1.10.3: + resolution: {integrity: sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-eth-iban: 1.10.3 + web3-utils: 1.10.3 + dev: true + + /web3-core-method/1.10.0: + resolution: {integrity: sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-utils: 1.10.0 + dev: true + + /web3-core-method/1.10.3: + resolution: {integrity: sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/transactions': 5.7.0 + web3-core-helpers: 1.10.3 + web3-core-promievent: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-utils: 1.10.3 + dev: true + + /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.3: + resolution: {integrity: sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + dev: true + + /web3-core-requestmanager/1.10.0: + resolution: {integrity: sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ==} + engines: {node: '>=8.0.0'} + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.0 + web3-providers-http: 1.10.0 + web3-providers-ipc: 1.10.0 + web3-providers-ws: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-core-requestmanager/1.10.3: + resolution: {integrity: sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==} + engines: {node: '>=8.0.0'} + dependencies: + util: 0.12.5 + web3-core-helpers: 1.10.3 + web3-providers-http: 1.10.3 + web3-providers-ipc: 1.10.3 + web3-providers-ws: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-core-subscriptions/1.10.0: + resolution: {integrity: sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.0 + dev: true + + /web3-core-subscriptions/1.10.3: + resolution: {integrity: sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.3 + dev: true + + /web3-core/1.10.0: + resolution: {integrity: sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-requestmanager: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-core/1.10.3: + resolution: {integrity: sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + '@types/node': 12.20.55 + bignumber.js: 9.1.2 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-requestmanager: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-core/4.3.2: + resolution: {integrity: sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-eth-accounts: 4.1.1 + web3-eth-iban: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + optionalDependencies: + web3-providers-ipc: 4.0.7 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-errors/1.1.4: + resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-types: 1.3.1 + dev: true + + /web3-eth-abi/1.10.0: + resolution: {integrity: sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.10.0 + dev: true + + /web3-eth-abi/1.10.3: + resolution: {integrity: sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethersproject/abi': 5.7.0 + web3-utils: 1.10.3 + dev: true + + /web3-eth-abi/4.2.0_typescript@5.3.3: + resolution: {integrity: sha512-x7dUCmk6th+5N63s5kUusoNtsDJKUUQgl9+jECvGTBOTiyHe/V6aOY0120FUjaAGaapOnR7BImQdhqHv6yT2YQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + abitype: 0.7.1_typescript@5.3.3 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - typescript + - zod + dev: true + + /web3-eth-accounts/1.10.0: + resolution: {integrity: sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/common': 2.5.0 + '@ethereumjs/tx': 3.3.2 + eth-lib: 0.2.8 + ethereumjs-util: 7.1.5 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-accounts/1.10.3: + resolution: {integrity: sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/common': 2.6.5 + '@ethereumjs/tx': 3.5.2 + '@ethereumjs/util': 8.1.0 + eth-lib: 0.2.8 + scrypt-js: 3.0.1 + uuid: 9.0.1 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-accounts/4.1.1: + resolution: {integrity: sha512-9JqhRi1YhO1hQOEmmBHgEGsME/B1FHMxpA/AK3vhpvQ8QeP6KbJW+cForTLfPpUbkmPxnRunG4PNNaETNlZfrA==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + crc-32: 1.2.2 + ethereum-cryptography: 2.1.3 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + dev: true + + /web3-eth-contract/1.10.0: + resolution: {integrity: sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-promievent: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-contract/1.10.3: + resolution: {integrity: sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/bn.js': 5.1.5 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-promievent: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-eth-abi: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-contract/4.2.0_typescript@5.3.3: + resolution: {integrity: sha512-K7bUypsomTs8/Oa0Lgvq5plsSB5afgKJ79NMuXxvC5jfV+AxNrQyKcr5Vd5yEGNqrdQuIPduGQa8DpuY+rMe1g==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.4.0_typescript@5.3.3 + web3-eth-abi: 4.2.0_typescript@5.3.3 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-ens/1.10.0: + resolution: {integrity: sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==} + engines: {node: '>=8.0.0'} + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-promievent: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-contract: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-ens/1.10.3: + resolution: {integrity: sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==} + engines: {node: '>=8.0.0'} + dependencies: + content-hash: 2.5.2 + eth-ens-namehash: 2.0.8 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-promievent: 1.10.3 + web3-eth-abi: 1.10.3 + web3-eth-contract: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-ens/4.0.8_typescript@5.3.3: + resolution: {integrity: sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.1 + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.4.0_typescript@5.3.3 + web3-eth-contract: 4.2.0_typescript@5.3.3 + web3-net: 4.0.7 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth-iban/1.10.0: + resolution: {integrity: sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.0 + dev: true + + /web3-eth-iban/1.10.3: + resolution: {integrity: sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 5.2.1 + web3-utils: 1.10.3 + dev: true + + /web3-eth-iban/4.0.7: + resolution: {integrity: sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + dev: true + + /web3-eth-personal/1.10.0: + resolution: {integrity: sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-net: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-personal/1.10.3: + resolution: {integrity: sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==} + engines: {node: '>=8.0.0'} + dependencies: + '@types/node': 12.20.55 + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-net: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth-personal/4.0.8_typescript@5.3.3: + resolution: {integrity: sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-eth: 4.4.0_typescript@5.3.3 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-eth/1.10.0: + resolution: {integrity: sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.0 + web3-core-helpers: 1.10.0 + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-eth-abi: 1.10.0 + web3-eth-accounts: 1.10.0 + web3-eth-contract: 1.10.0 + web3-eth-ens: 1.10.0 + web3-eth-iban: 1.10.0 + web3-eth-personal: 1.10.0 + web3-net: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth/1.10.3: + resolution: {integrity: sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.3 + web3-core-helpers: 1.10.3 + web3-core-method: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-eth-abi: 1.10.3 + web3-eth-accounts: 1.10.3 + web3-eth-contract: 1.10.3 + web3-eth-ens: 1.10.3 + web3-eth-iban: 1.10.3 + web3-eth-personal: 1.10.3 + web3-net: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-eth/4.4.0_typescript@5.3.3: + resolution: {integrity: sha512-HswKdzF44wUrciRAtEJaml9O7rDYDxElHmFs+27WcO3nel2zku+n0xs4e2ZAehfrCZ+05/y7TgnOZnaDU8Fb/A==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + setimmediate: 1.0.5 + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth-abi: 4.2.0_typescript@5.3.3 + web3-eth-accounts: 4.1.1 + web3-net: 4.0.7 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /web3-net/1.10.0: + resolution: {integrity: sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.0 + web3-core-method: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-net/1.10.3: + resolution: {integrity: sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==} + engines: {node: '>=8.0.0'} + dependencies: + web3-core: 1.10.3 + web3-core-method: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-net/4.0.7: + resolution: {integrity: sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-providers-http/1.10.0: + resolution: {integrity: sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==} + engines: {node: '>=8.0.0'} + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 3.1.8 + es6-promise: 4.2.8 + web3-core-helpers: 1.10.0 + transitivePeerDependencies: + - encoding + dev: true + + /web3-providers-http/1.10.3: + resolution: {integrity: sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==} + engines: {node: '>=8.0.0'} + dependencies: + abortcontroller-polyfill: 1.7.5 + cross-fetch: 4.0.0 + es6-promise: 4.2.8 + web3-core-helpers: 1.10.3 + transitivePeerDependencies: + - encoding + dev: true + + /web3-providers-http/4.1.0: + resolution: {integrity: sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + cross-fetch: 4.0.0 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + transitivePeerDependencies: + - encoding + dev: true + + /web3-providers-ipc/1.10.0: + resolution: {integrity: sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.0 + dev: true + + /web3-providers-ipc/1.10.3: + resolution: {integrity: sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==} + engines: {node: '>=8.0.0'} + dependencies: + oboe: 2.1.5 + web3-core-helpers: 1.10.3 + dev: true + + /web3-providers-ipc/4.0.7: + resolution: {integrity: sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==} + engines: {node: '>=14', npm: '>=6.12.0'} + requiresBuild: true + dependencies: + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + dev: true + optional: true + + /web3-providers-ws/1.10.0: + resolution: {integrity: sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.0 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + dev: true + + /web3-providers-ws/1.10.3: + resolution: {integrity: sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.4 + web3-core-helpers: 1.10.3 + websocket: 1.0.34 + transitivePeerDependencies: + - supports-color + dev: true + + /web3-providers-ws/4.0.7: + resolution: {integrity: sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + '@types/ws': 8.5.3 + isomorphic-ws: 5.0.0_ws@8.16.0 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + ws: 8.16.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /web3-rpc-methods/1.1.4: + resolution: {integrity: sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-types: 1.3.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + dev: true + + /web3-shh/1.10.0: + resolution: {integrity: sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-core: 1.10.0 + web3-core-method: 1.10.0 + web3-core-subscriptions: 1.10.0 + web3-net: 1.10.0 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-shh/1.10.3: + resolution: {integrity: sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-core: 1.10.3 + web3-core-method: 1.10.3 + web3-core-subscriptions: 1.10.3 + web3-net: 1.10.3 + transitivePeerDependencies: + - encoding + - supports-color + dev: true + + /web3-types/1.3.1: + resolution: {integrity: sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==} + engines: {node: '>=14', npm: '>=6.12.0'} + dev: true + + /web3-utils/1.10.0: + resolution: {integrity: sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==} + engines: {node: '>=8.0.0'} + dependencies: + bn.js: 5.2.1 + ethereum-bloom-filters: 1.0.10 + ethereumjs-util: 7.1.5 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + + /web3-utils/1.10.3: + resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} + engines: {node: '>=8.0.0'} + dependencies: + '@ethereumjs/util': 8.1.0 + bn.js: 5.2.1 + ethereum-bloom-filters: 1.0.10 + ethereum-cryptography: 2.1.3 + ethjs-unit: 0.1.6 + number-to-bn: 1.7.0 + randombytes: 2.1.0 + utf8: 3.0.0 + dev: true + + /web3-utils/4.1.1: + resolution: {integrity: sha512-5AOmLKH6QuwHunLCNdVFlPSDE+T88bJYRQP+HWYoKNbI4STALCYQiJvj7LXE+Ed6cPfqANaK/LwKNbMPLCPFwA==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.3 + web3-errors: 1.1.4 + web3-types: 1.3.1 + web3-validator: 2.0.4 + dev: true + + /web3-validator/2.0.4: + resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} + engines: {node: '>=14', npm: '>=6.12.0'} + dependencies: + ethereum-cryptography: 2.1.3 + util: 0.12.5 + web3-errors: 1.1.4 + web3-types: 1.3.1 + zod: 3.22.4 + dev: true + + /web3/1.10.0: + resolution: {integrity: sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-bzz: 1.10.0 + web3-core: 1.10.0 + web3-eth: 1.10.0 + web3-eth-personal: 1.10.0 + web3-net: 1.10.0 + web3-shh: 1.10.0 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /web3/1.10.3: + resolution: {integrity: sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==} + engines: {node: '>=8.0.0'} + requiresBuild: true + dependencies: + web3-bzz: 1.10.3 + web3-core: 1.10.3 + web3-eth: 1.10.3 + web3-eth-personal: 1.10.3 + web3-net: 1.10.3 + web3-shh: 1.10.3 + web3-utils: 1.10.3 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /web3/4.4.0_typescript@5.3.3: + resolution: {integrity: sha512-WcFA3RgE+cyM96MHLPs5Ec155nkYQuwhjk3JIhxcy6J1QrZK2zvKGzTQCCYHe3JhraduNTMbWy+EeNNGGji9+Q==} + engines: {node: '>=14.0.0', npm: '>=6.12.0'} + dependencies: + web3-core: 4.3.2 + web3-errors: 1.1.4 + web3-eth: 4.4.0_typescript@5.3.3 + web3-eth-abi: 4.2.0_typescript@5.3.3 + web3-eth-accounts: 4.1.1 + web3-eth-contract: 4.2.0_typescript@5.3.3 + web3-eth-ens: 4.0.8_typescript@5.3.3 + web3-eth-iban: 4.0.7 + web3-eth-personal: 4.0.8_typescript@5.3.3 + web3-net: 4.0.7 + web3-providers-http: 4.1.0 + web3-providers-ws: 4.0.7 + web3-rpc-methods: 1.1.4 + web3-types: 1.3.1 + web3-utils: 4.1.1 + web3-validator: 2.0.4 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + - zod + dev: true + + /webidl-conversions/3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + dev: true + + /websocket/1.0.34: + resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} + engines: {node: '>=4.0.0'} + dependencies: + bufferutil: 4.0.8 + debug: 2.6.9 + es5-ext: 0.10.62 + typedarray-to-buffer: 3.1.5 + utf-8-validate: 5.0.10 + yaeti: 0.0.6 + transitivePeerDependencies: + - supports-color + dev: true + + /whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-module/1.0.0: + resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} + dev: true + + /which-typed-array/1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.6 + call-bind: 1.0.5 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /window-size/0.2.0: + resolution: {integrity: sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==} + engines: {node: '>= 0.10.0'} + hasBin: true + dev: true + + /workerpool/6.2.1: + resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + dev: true + + /wrap-ansi/2.1.0: + resolution: {integrity: sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==} + engines: {node: '>=0.10.0'} + dependencies: + string-width: 1.0.2 + strip-ansi: 3.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /write-stream/0.4.3: + resolution: {integrity: sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A==} + dependencies: + readable-stream: 0.0.4 + dev: true + optional: true + + /ws/3.3.3: + resolution: {integrity: sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + async-limiter: 1.0.1 + safe-buffer: 5.1.2 + ultron: 1.1.1 + dev: true + + /ws/7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /ws/7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + optional: true + + /ws/8.13.0_2adebc2xdjqbcvbjxkodkhadp4: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dependencies: + bufferutil: 4.0.7 + utf-8-validate: 6.0.3 + dev: true + + /ws/8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xhr-request-promise/0.1.3: + resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} + dependencies: + xhr-request: 1.1.0 + dev: true + + /xhr-request/1.1.0: + resolution: {integrity: sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA==} + dependencies: + buffer-to-arraybuffer: 0.0.5 + object-assign: 4.1.1 + query-string: 5.1.1 + simple-get: 2.8.2 + timed-out: 4.0.1 + url-set-query: 1.0.0 + xhr: 2.6.0 + dev: true + + /xhr/2.6.0: + resolution: {integrity: sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==} + dependencies: + global: 4.4.0 + is-function: 1.0.2 + parse-headers: 2.0.5 + xtend: 4.0.2 + dev: true + + /xmlhttprequest/1.8.0: + resolution: {integrity: sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==} + engines: {node: '>=0.4.0'} + dev: true + + /xss/1.0.14: + resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==} + engines: {node: '>= 0.10.0'} + hasBin: true + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + dev: true + optional: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n/3.2.2: + resolution: {integrity: sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yaeti/0.0.6: + resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} + engines: {node: '>=0.10.32'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /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: + resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} + engines: {node: '>=10'} + dev: true + + /yargs-unparser/2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + dev: true + + /yargs/16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.4 + dev: true + + /yargs/4.8.1: + resolution: {integrity: sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==} + dependencies: + cliui: 3.2.0 + decamelize: 1.2.0 + get-caller-file: 1.0.3 + lodash.assign: 4.2.0 + os-locale: 1.4.0 + read-pkg-up: 1.0.1 + require-directory: 2.1.1 + require-main-filename: 1.0.1 + set-blocking: 2.0.0 + string-width: 1.0.2 + which-module: 1.0.0 + window-size: 0.2.0 + y18n: 3.2.2 + yargs-parser: 2.4.1 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true + + /zod/3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: true diff --git a/settings/artifacts.js b/settings/artifacts.js new file mode 100644 index 000000000..9ea3e93fe --- /dev/null +++ b/settings/artifacts.js @@ -0,0 +1,39 @@ +module.exports = { + default: { + WitnetBytecodes: "WitnetBytecodesDefault", + WitnetEncodingLib: "WitnetEncodingLib", + WitnetErrorsLib: "WitnetErrorsLib", + WitnetPriceFeeds: "WitnetPriceFeeds", + WitnetPriceFeedsLib: "WitnetPriceFeedsLib", + WitnetRandomness: "WitnetRandomness", + WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", + WitnetRequestFactory: "WitnetRequestFactoryDefault", + }, + boba: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + conflux: { + WitnetRequestFactory: "WitnetRequestFactoryCfxCore", + }, + mantle: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + optimism: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + "polygon.zkevm.goerli": { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + "polygon.zkevm.mainnet": { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + reef: { + WitnetRequestBoard: "WitnetRequestBoardTrustableReef", + }, + scroll: { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + "syscoin.rollux.testnet": { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, +}; \ No newline at end of file diff --git a/settings/index.js b/settings/index.js new file mode 100644 index 000000000..5738d268b --- /dev/null +++ b/settings/index.js @@ -0,0 +1,43 @@ + +const artifacts = require("./artifacts") +const { merge } = require("lodash") +const networks = require("./networks") +const specs = require("./specs") +const solidity = require("./solidity") +const utils = require("../src/utils") + +module.exports = { + getArtifacts: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network); + return merge( + artifacts.default, + artifacts[eco], + artifacts[net] + ); + }, + getCompilers: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network); + return merge( + solidity.default, + solidity[eco], + solidity[net], + ); + }, + getNetworks: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network); + return merge( + networks.default, + networks[eco], + networks[net], + ); + }, + getSpecs: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network); + return merge( + specs.default, + specs[eco], + specs[net] + ); + }, + artifacts, networks, solidity, specs, +}; diff --git a/settings/networks.js b/settings/networks.js new file mode 100644 index 000000000..32286caec --- /dev/null +++ b/settings/networks.js @@ -0,0 +1,372 @@ +module.exports = { + default: { + host: "localhost", + skipDryRun: true, + }, + "ethereum.goerli": { + network_id: 5, + port: 8545, + verify: { + apiUrl: "https://api-goerli.etherscan.io/", + browserURL: "https://goerli.etherscan.io/", + }, + }, + "ethereum.mainnet": { + network_id: 1, + port: 9545, + }, + "ethereum.sepolia": { + network_id: 11155111, + port: 8506, + verify: { + apiUrl: "https://api-sepolia.etherscan.io/api", + browserURL: "https://sepolia.etherscan.io/", + }, + }, + "arbitrum.goerli": { + network_id: 421613, + port: 8517, + verify: { + apiUrl: "https://api-goerli.arbiscan.io/", + browserURL: "https://goerli.arbiscan.io/", + }, + }, + "arbitrum.one": { + network_id: 42161, + port: 9517, + }, + "avalanche.mainnet": { + network_id: 43114, + port: 9533, + }, + "avalanche.testnet": { + network_id: 43113, + port: 8533, + verify: { + apiUrl: "https://api.arbiscan.io/api", + browserURL: "https://arbiscan.io/", + }, + }, + "boba.bnb.testnet": { + network_id: 9728, + port: 8510, + verify: { + apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", + browserURL: "https://boba.testnet.routescan.io/", + }, + }, + "boba.bnb.mainnet": { + network_id: 56288, + port: 9510, + verify: { + apiUrl: "https://blockexplorer.bnb.boba.network/api", + browserURL: "https://blockexplorer.bnb.boba.network/", + apiKey: "MY_API_KEY", + }, + }, + "boba.ethereum.mainnet": { + network_id: 288, + port: 9539, + verify: { + apiUrl: "https://api.routescan.io/v2/network/mainnet/evm/all/etherscan", + browserURL: "https://bobascan.com/address/", + apiKey: "MY_API_KEY", + }, + }, + "boba.ethereum.goerli": { + network_id: 2888, + port: 8515, + verify: { + apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", + browserURL: "https://boba.testnet.routescan.io/", + }, + }, + "celo.alfajores": { + network_id: 44787, + port: 8538, + }, + "celo.mainnet": { + network_id: 42220, + port: 9538, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.celo.org/alfajores/api", + browserURL: "https://explorer.celo.org/alfajores/", + }, + }, + "conflux.core.testnet": { + port: 8540, + network_id: 1, + gasPrice: 10, + }, + "conflux.core.mainnet": { + port: 9540, + network_id: 1029, + gasPrice: 10, + verify: { + apiUrl: "https://explorer.celo.org/mainnet/api", + browserURL: "https://explorer.celo.org/mainnet/", + }, + }, + "conflux.espace.testnet": { + port: 8529, + network_id: 71, + networkCheckTimeout: 999999, + gas: 15000000, + }, + "conflux.espace.mainnet": { + port: 9529, + network_id: 1030, + networkCheckTimeout: 999999, + gas: 15000000, + }, + "cronos.testnet": { + port: 8530, + network_id: 338, + verify: { + apiUrl: "https://cronos.org/explorer/testnet3/api", + browserURL: "https://cronos.org/explorer/testnet3", + }, + }, + "cronos.mainnet": { + port: 9530, + network_id: 25, + }, + "cube.testnet": { + port: 8522, + network_id: 1819, + }, + "dogechain.testnet": { + port: 8519, + network_id: 568, + gas: 6000000, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "http://explorer-testnet.dogechain.dog/api", + browserURL: "https://explorer-testnet.dogechain.dog/", + }, + }, + "dogechain.mainnet": { + port: 9519, + network_id: 2000, + }, + "elastos.testnet": { + port: 8513, + network_id: 21, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://esc-testnet.elastos.io/api", + browserURL: "https://esc-testnet.elastos.io/address", + }, + }, + "elastos.mainnet": { + port: 9513, + network_id: 20, + verify: { + apiUrl: "https://esc.elastos.io/api", + browserURL: "https://esc.elastos.io/address", + }, + }, + "fuse.testnet": { + port: 8511, + network_id: 123, + verify: { + apiUrl: "https://explorer.fusespark.io/api", + browserURL: "https://explorer.fusespark.io/address", + apiKey: "MY_API_KEY", + }, + }, + "gnosis.testnet": { + port: 8509, + network_id: 10200, + verify: { + apiUrl: "https://gnosis-chiado.blockscout.com/api", + browserURL: "https://gnosis-chiado.blockscout.com/address", + apiKey: "MY_API_KEY", + }, + }, + "harmony.testnet#0": { + port: 8534, + network_id: 1666700000, + }, + "kava.testnet": { + port: 8526, + network_id: 2221, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.testnet.kava.io/api", + browserURL: "https://explorer.testnet.kava.io/", + }, + }, + "kava.mainnet": { + port: 9526, + network_id: 2222, + }, + "kcc.testnet": { + port: 8537, + network_id: 322, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://scan-testnet.kcc.network/api", + browserURL: "https://scan-testnet.kcc.network/", + }, + }, + "kcc.mainnet": { + port: 9537, + network_id: 321, + }, + "klaytn.testnet": { + port: 8527, + network_id: 1001, + }, + "klaytn.mainnet": { + port: 9527, + network_id: 8217, + }, + "mantle.testnet": { + port: 8508, + network_id: 5001, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.testnet.mantle.xyz/api", + explorerUrl: "https://explorer.testnet.mantle.xyz/address", + }, + }, + "mantle.mainnet": { + port: 9508, + network_id: 5000, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.mantle.xyz/api", + explorerUrl: "https://explorer.mantle.xyz/address", + }, + }, + "metis.mainnet": { + port: 9536, + network_id: 1088, + }, + "metis.goerli": { + port: 8536, + network_id: 599, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://goerli.explorer.metisdevops.link/api", + explorerUrl: "https://goerli.explorer.metisdevops.link/address", + }, + }, + "meter.testnet": { + port: 8523, + network_id: 83, + }, + "meter.mainnet": { + port: 9523, + network_id: 82, + }, + "moonbeam.mainnet": { + port: 9531, + network_id: 1284, + }, + "moonbeam.moonriver": { + port: 7531, + network_id: 1285, + }, + "moonbeam.moonbase": { + port: 8531, + network_id: 1287, + }, + "okxchain.testnet": { + port: 8528, + network_id: 65, + }, + "okxchain.mainnet": { + port: 9528, + network_id: 66, + }, + "optimism.goerli": { + port: 8520, + network_id: 420, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://optimism-goerli.blockscout.com/api", + explorerUrl: "https://optimism-goerli.blockscout.com/", + }, + }, + "optimism.mainnet": { + port: 9520, + network_id: 10, + + }, + "polygon.goerli": { + port: 8535, + network_id: 80001, + }, + "polygon.mainnet": { + port: 9535, + network_id: 137, + }, + "polygon.zkevm.goerli": { + port: 8512, + network_id: 1442, + verify: { + apiUrl: "https://api-testnet-zkevm.polygonscan.com/api", + explorerUrl: "https://testnet-zkevm.polygonscan.com/address", + }, + }, + "polygon.zkevm.mainnet": { + port: 9512, + network_id: 1101, + verify: { + apiUrl: "https://api-zkevm.polygonscan.com/api", + explorerUrl: "https://zkevm.polygonscan.com/address/", + }, + }, + "reef.testnet": { + port: 8532, + network_id: 13939, + }, + "reef.mainnet": { + port: 9532, + network_id: 13939, + }, + "scroll.sepolia": { + port: 8514, + network_id: 534351, + verify: { + apiUrl: "http://api-sepolia.scrollscan.io/api", + explorerUrl: "https://sepolia.scrollscan.io/", + }, + }, + "scroll.mainnet": { + port: 9514, + network_id: 534352, + verify: { + apiUrl: "https://api.scrollscan.com/api", + explorerUrl: "https://scrollscan.com/address", + }, + }, + "syscoin.testnet": { + port: 8521, + network_id: 5700, + }, + "syscoin.mainnet": { + port: 9521, + network_id: 57, + }, + "syscoin.rollux.testnet": { + port: 8507, + network_id: 57000, + verify: { + apiKey: "abc", + apiUrl: "https://rollux.tanenbaum.io/api", + explorerUrl: "https://rollux.tanenbaum.io/address/", + }, + }, + "ultron.testnet": { + port: 8516, + network_id: 1230, + }, + "ultron.mainnet": { + port: 9516, + network_id: 1231, + }, +}; diff --git a/settings/solidity.js b/settings/solidity.js new file mode 100644 index 000000000..dcb2b260f --- /dev/null +++ b/settings/solidity.js @@ -0,0 +1,14 @@ +module.exports = { + default: { + solc: { + version: "0.8.22", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + evmVersion: "paris", + }, + }, + }, +} diff --git a/settings/specs.js b/settings/specs.js new file mode 100644 index 000000000..36ec56f59 --- /dev/null +++ b/settings/specs.js @@ -0,0 +1,193 @@ +module.exports = { + default: { + WitnetBytecodes: { + libs: ["WitnetEncodingLib"], + vanity: 172582, + }, + WitnetRandomness: { + vanity: 4, + }, + WitnetRequestBoard: { + immutables: { + types: ["uint256", "uint256", "uint256", "uint256"], + values: [ + /* _reportResultGasBase */ 58282, + /* _reportResultWithCallbackGasBase */ 65273, + /* _reportResultWithCallbackRevertGasBase */ 69546, + /* _sstoreFromZeroGas */ 20000, + ], + }, + libs: ["WitnetErrorsLib"], + vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 + }, + WitnetRequestFactory: { + vanity: 178848, + }, + WitnetPriceFeeds: { + libs: ["WitnetPriceFeedsLib"], + vanity: 5, + }, + }, + avalanche: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 155000, + ], + }, + }, + }, + celo: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 114000, + ], + }, + }, + }, + conflux: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 78500, + ], + }, + }, + }, + "conflux.espace.testnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 225000, + ], + }, + }, + }, + "conflux.espace.mainnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 225000, + ], + }, + }, + }, + cronos: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 137500, + ], + }, + }, + }, + dogechain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + harmony: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 530000, + ], + }, + }, + }, + hsc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + kcc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 92500, + ], + }, + }, + }, + klaytn: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 105000, + ], + }, + }, + }, + meter: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + metis: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 134800, + ], + }, + }, + }, + moonbeam: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 115000, + ], + }, + }, + }, + okxchain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 145000, + ], + }, + }, + }, + optimism: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 135000, + ], + }, + }, + }, + reef: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", + ], + }, + }, + }, + ultron: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 83949, + ], + }, + }, + }, +}; \ No newline at end of file diff --git a/src/index.js b/src/index.js new file mode 100644 index 000000000..4039c8325 --- /dev/null +++ b/src/index.js @@ -0,0 +1,5 @@ +module.exports = { + addresses: require("../migrations/witnet.addresses.json"), + artifacts: require("../artifacts"), + utils: require("./utils"), +} \ No newline at end of file diff --git a/scripts/utils/index.js b/src/utils/index.js similarity index 55% rename from scripts/utils/index.js rename to src/utils/index.js index 1cce66d5b..dbdfc162c 100644 --- a/scripts/utils/index.js +++ b/src/utils/index.js @@ -15,7 +15,7 @@ module.exports = { padLeft, prompt, saveAddresses, - saveJsonAbi, + saveJsonArtifact, traceHeader, traceTx, } @@ -41,40 +41,12 @@ function getRealmNetworkFromArgs () { } function getRealmNetworkFromString (network) { - network = network ? network.replaceAll(":", ".").toLowerCase() : "development" - - // Try to extract realm/network info from environment - const envRealm = process.env.WITNET_EVM_REALM - ? process.env.WITNET_EVM_REALM.toLowerCase() - : null - - let realm - if (network.split(".")[1]) { - realm = network.split(".")[0] - if (realm === "ethereum") { - // Realm in "ethereum.*" networks must be set to "default" - realm = "default" - } - if (envRealm && realm !== envRealm) { - // Check that WITNET_EVM_REALM, if defined, and network's realm actually match - console.error( - `\n> Fatal: network "${network}" and WITNET_EVM_REALM value`, - `("${envRealm.toUpperCase()}") don't match.\n` - ) - process.exit(1) - } + network = network ? network.toLowerCase() : "development" + if (network.indexOf(":") > -1) { + return [network.split(":")[0], network] } else { - realm = envRealm || "default" - network = `${realm === "default" ? "ethereum" : realm}.${network}` + return [null, network] } - if (realm === "default") { - const subnetwork = network.split(".")[1] - if (subnetwork === "development" || subnetwork === "test") { - // In "default" realm, networks "development" and "test" must be returned without a prefix. - network = subnetwork - } - } - return [realm, network] } function isNullAddress (addr) { @@ -119,22 +91,27 @@ function saveAddresses (addrs) { ) } -function saveJsonAbi (key, abi) { +function saveJsonArtifact (key, artifact) { + const { abi, ast, bytecode, deployedBytecode, contractName } = artifact; const version = require("../../package.json").version - const latest_fn = `./migrations/abis/${key}.json` - const version_fn = `./migrations/abis/${key}-${version}.json` - let latest_abi = [] + const latest_fn = `./artifacts/${key}.json` + const version_fn = `./artifacts/${key}-${version}.json` + const current = { + contractName, + sourceName: ast?.absolutePath.split("project:/")[1], + abi, + bytecode, + deployedBytecode + }; + let latest = [] if (fs.existsSync(latest_fn)) { try { - latest_abi = JSON.parse(fs.readFileSync(latest_fn)) + latest = JSON.parse(fs.readFileSync(latest_fn)) } catch {} } - if (!isEqual(abi, latest_abi)) { - const json = JSON.stringify(abi, null, 4) - if (fs.existsSync(latest_fn)) { - // avoid creating versioned abi upon first deployment - fs.writeFileSync(version_fn, json, { flag: "w+" }) - } + if (!isEqual(current, latest)) { + const json = JSON.stringify(current, null, 4) + fs.writeFileSync(version_fn, json, { flag: "w+" }) fs.writeFileSync(latest_fn, json, { flag: "w+" }) } -} +} \ No newline at end of file diff --git a/scripts/utils/traceHeader.js b/src/utils/traceHeader.js similarity index 100% rename from scripts/utils/traceHeader.js rename to src/utils/traceHeader.js diff --git a/scripts/utils/traceTx.js b/src/utils/traceTx.js similarity index 100% rename from scripts/utils/traceTx.js rename to src/utils/traceTx.js diff --git a/truffle-config.js b/truffle-config.js index 81283e961..440c29beb 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -1,39 +1,20 @@ -const { merge } = require("lodash") -const settings = require("./migrations/witnet.settings") -const utils = require("./scripts/utils") +const settings = require("./settings") +const utils = require("./src/utils") -const rn = utils.getRealmNetworkFromArgs() -const realm = rn[0]; const network = rn[1] -if (!settings.networks[realm] || !settings.networks[realm][network]) { - if (network !== "development" && network !== "test") { - console.error( - `Fatal: network "${realm}:${network}"`, - "configuration not found in \"./migrations/witnet.settings.js#networks\"" - ) - process.exit(1) - } +const { ecosystem, network } = utils.getRealmNetworkFromArgs() +if (ecosystem) { + const header = console.info(`${ecosystem.toUpperCase()}`) + console.info(header) + console.info("=".repeat(header.length)) } -if (realm !== "default") console.info(` -Targetting "${realm.toUpperCase()}" realm -===================${"=".repeat(realm.length)} -`); - module.exports = { build_directory: `./build/`, contracts_directory: "./contracts/", migrations_directory: "./migrations/scripts/", - networks: settings.networks[realm], - compilers: merge(settings.compilers.default, settings.compilers[realm]), + networks: settings.getNetworks(network), + compilers: settings.getCompilers(network), mocha: { - reporter: "eth-gas-reporter", - reporterOptions: { - coinmarketcap: process.env.COINMARKETCAP_API_KEY, - currency: "USD", - gasPrice: 100, - excludeContracts: ["Migrations"], - src: "contracts", - }, timeout: 300000, useColors: true, }, diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..2d4ed2329 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8651 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@aashutoshrathi/word-wrap@^1.2.3": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" + integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== + +"@adraffy/ens-normalize@^1.8.8": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@apollo/protobufjs@1.2.6": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.6.tgz#d601e65211e06ae1432bf5993a1a0105f2862f27" + integrity sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + "@types/node" "^10.1.0" + long "^4.0.0" + +"@apollo/protobufjs@1.2.7": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.7.tgz#3a8675512817e4a046a897e5f4f16415f16a7d8a" + integrity sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg== + dependencies: + "@protobufjs/aspromise" "^1.1.2" + "@protobufjs/base64" "^1.1.2" + "@protobufjs/codegen" "^2.0.4" + "@protobufjs/eventemitter" "^1.1.0" + "@protobufjs/fetch" "^1.1.0" + "@protobufjs/float" "^1.0.2" + "@protobufjs/inquire" "^1.1.0" + "@protobufjs/path" "^1.1.2" + "@protobufjs/pool" "^1.1.0" + "@protobufjs/utf8" "^1.1.0" + "@types/long" "^4.0.0" + long "^4.0.0" + +"@apollo/usage-reporting-protobuf@^4.0.0": + version "4.1.1" + resolved "https://registry.yarnpkg.com/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz#407c3d18c7fbed7a264f3b9a3812620b93499de1" + integrity sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA== + dependencies: + "@apollo/protobufjs" "1.2.7" + +"@apollo/utils.dropunuseddefinitions@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" + integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== + +"@apollo/utils.keyvaluecache@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz#2bfe358c4d82f3a0950518451996758c52613f57" + integrity sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg== + dependencies: + "@apollo/utils.logger" "^1.0.0" + lru-cache "7.10.1 - 7.13.1" + +"@apollo/utils.logger@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-1.0.1.tgz#aea0d1bb7ceb237f506c6bbf38f10a555b99a695" + integrity sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA== + +"@apollo/utils.printwithreducedwhitespace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz#c466299a4766eef8577a2a64c8f27712e8bd7e30" + integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== + +"@apollo/utils.removealiases@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz#75f6d83098af1fcae2d3beb4f515ad4a8452a8c1" + integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== + +"@apollo/utils.sortast@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz#93218c7008daf3e2a0725196085a33f5aab5ad07" + integrity sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA== + dependencies: + lodash.sortby "^4.7.0" + +"@apollo/utils.stripsensitiveliterals@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz#4920651f36beee8e260e12031a0c5863ad0c7b28" + integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== + +"@apollo/utils.usagereporting@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz#3c70b49e554771659576fe35381c7a4b321d27fd" + integrity sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ== + dependencies: + "@apollo/usage-reporting-protobuf" "^4.0.0" + "@apollo/utils.dropunuseddefinitions" "^1.1.0" + "@apollo/utils.printwithreducedwhitespace" "^1.1.0" + "@apollo/utils.removealiases" "1.0.0" + "@apollo/utils.sortast" "^1.1.0" + "@apollo/utils.stripsensitiveliterals" "^1.2.0" + +"@apollographql/apollo-tools@^0.5.3": + version "0.5.4" + resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" + integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== + +"@apollographql/graphql-playground-html@1.6.29": + version "1.6.29" + resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" + integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== + dependencies: + xss "^1.0.8" + +"@babel/code-frame@^7.0.0": + version "7.23.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" + integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== + dependencies: + "@babel/highlight" "^7.23.4" + chalk "^2.4.2" + +"@babel/helper-validator-identifier@^7.22.20": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + +"@babel/highlight@^7.23.4": + version "7.23.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" + integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== + dependencies: + "@babel/helper-validator-identifier" "^7.22.20" + chalk "^2.4.2" + js-tokens "^4.0.0" + +"@babel/runtime@^7.4.4", "@babel/runtime@^7.6.3": + version "7.23.9" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" + integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== + dependencies: + regenerator-runtime "^0.14.0" + +"@ensdomains/address-encoder@^0.1.7": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" + integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== + dependencies: + bech32 "^1.1.3" + blakejs "^1.1.0" + bn.js "^4.11.8" + bs58 "^4.0.1" + crypto-addr-codec "^0.1.7" + nano-base32 "^1.0.1" + ripemd160 "^2.0.2" + +"@ensdomains/ens@0.4.5": + version "0.4.5" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" + integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/ensjs@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.1.0.tgz#0a7296c1f3d735ef019320d863a7846a0760c460" + integrity sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog== + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.5" + "@ensdomains/resolver" "0.2.4" + content-hash "^2.5.2" + eth-ens-namehash "^2.0.8" + ethers "^5.0.13" + js-sha3 "^0.8.0" + +"@ensdomains/resolver@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": + version "4.4.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" + integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + dependencies: + eslint-visitor-keys "^3.3.0" + +"@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": + version "4.10.0" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" + integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.56.0": + version "8.56.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" + integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== + +"@ethereumjs/common@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" + integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.1" + +"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": + version "2.6.5" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" + integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.5" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/tx@3.3.2": + version "3.3.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" + integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== + dependencies: + "@ethereumjs/common" "^2.5.0" + ethereumjs-util "^7.1.2" + +"@ethereumjs/tx@3.5.2": + version "3.5.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" + integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== + dependencies: + "@ethereumjs/common" "^2.6.4" + ethereumjs-util "^7.1.5" + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@graphql-tools/batch-execute@8.5.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz#fa3321d58c64041650be44250b1ebc3aab0ba7a9" + integrity sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew== + dependencies: + "@graphql-tools/utils" "8.9.0" + dataloader "2.1.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/delegate@^8.4.3": + version "8.8.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.1.tgz#0653a72f38947f38ab7917dfac50ebf6a6b883e9" + integrity sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA== + dependencies: + "@graphql-tools/batch-execute" "8.5.1" + "@graphql-tools/schema" "8.5.1" + "@graphql-tools/utils" "8.9.0" + dataloader "2.1.0" + tslib "~2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/merge@8.3.1": + version "8.3.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.1.tgz#06121942ad28982a14635dbc87b5d488a041d722" + integrity sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg== + dependencies: + "@graphql-tools/utils" "8.9.0" + tslib "^2.4.0" + +"@graphql-tools/merge@^8.4.1": + version "8.4.2" + resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.4.2.tgz#95778bbe26b635e8d2f60ce9856b388f11fe8288" + integrity sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw== + dependencies: + "@graphql-tools/utils" "^9.2.1" + tslib "^2.4.0" + +"@graphql-tools/mock@^8.1.2": + version "8.7.20" + resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-8.7.20.tgz#c83ae0f1940d194a3982120c9c85f3ac6b4f7f20" + integrity sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ== + dependencies: + "@graphql-tools/schema" "^9.0.18" + "@graphql-tools/utils" "^9.2.1" + fast-json-stable-stringify "^2.1.0" + tslib "^2.4.0" + +"@graphql-tools/schema@8.5.1", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.3.1": + version "8.5.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.1.tgz#c2f2ff1448380919a330312399c9471db2580b58" + integrity sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg== + dependencies: + "@graphql-tools/merge" "8.3.1" + "@graphql-tools/utils" "8.9.0" + tslib "^2.4.0" + value-or-promise "1.0.11" + +"@graphql-tools/schema@^9.0.18": + version "9.0.19" + resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.19.tgz#c4ad373b5e1b8a0cf365163435b7d236ebdd06e7" + integrity sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w== + dependencies: + "@graphql-tools/merge" "^8.4.1" + "@graphql-tools/utils" "^9.2.1" + tslib "^2.4.0" + value-or-promise "^1.0.12" + +"@graphql-tools/utils@8.9.0": + version "8.9.0" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.9.0.tgz#c6aa5f651c9c99e1aca55510af21b56ec296cdb7" + integrity sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg== + dependencies: + tslib "^2.4.0" + +"@graphql-tools/utils@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.1.tgz#1b3df0ef166cfa3eae706e3518b17d5922721c57" + integrity sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A== + dependencies: + "@graphql-typed-document-node/core" "^3.1.1" + tslib "^2.4.0" + +"@graphql-typed-document-node/core@^3.1.1": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" + integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== + +"@humanwhocodes/config-array@^0.11.13": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" + integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== + +"@josephg/resolvable@^1.0.0": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" + integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@openzeppelin/contract-loader@^0.6.2": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" + integrity sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg== + dependencies: + find-up "^4.1.0" + fs-extra "^8.1.0" + +"@openzeppelin/contracts-upgradeable@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.0.1.tgz#ebc163cbed2de6b8b69bff628261d18deb912a81" + integrity sha512-MvaLoPnVcoZr/qqZP+4cl9piuR4gg0iIGgxVSZ/AL1iId3M6IdEHzz9Naw5Lirl4KKBI6ciTVnX07yL4dOMIJg== + +"@openzeppelin/contracts@^4.1.0": + version "4.9.5" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.5.tgz#1eed23d4844c861a1835b5d33507c1017fa98de8" + integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg== + +"@openzeppelin/contracts@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.1.tgz#93da90fc209a0a4ff09c1deb037fbb35e4020890" + integrity sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w== + +"@openzeppelin/test-helpers@~0.5.16": + version "0.5.16" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.16.tgz#2c9054f85069dfbfb5e8cef3ed781e8caf241fb3" + integrity sha512-T1EvspSfH1qQO/sgGlskLfYVBbqzJR23SZzYl/6B2JnT4EhThcI85UpvDk0BkLWKaDScQTabGHt4GzHW+3SfZg== + dependencies: + "@openzeppelin/contract-loader" "^0.6.2" + "@truffle/contract" "^4.0.35" + ansi-colors "^3.2.3" + chai "^4.2.0" + chai-bn "^0.2.1" + ethjs-abi "^0.2.1" + lodash.flatten "^4.4.0" + semver "^5.6.0" + web3 "^1.2.5" + web3-utils "^1.2.5" + +"@pnpm/config.env-replace@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" + integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== + +"@pnpm/network.ca-file@^1.0.1": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" + integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== + dependencies: + graceful-fs "4.2.10" + +"@pnpm/npm-conf@^2.1.0": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" + integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== + dependencies: + "@pnpm/config.env-replace" "^1.1.0" + "@pnpm/network.ca-file" "^1.0.1" + config-chain "^1.1.11" + +"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" + integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== + +"@protobufjs/base64@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" + integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== + +"@protobufjs/codegen@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" + integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== + +"@protobufjs/eventemitter@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" + integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== + +"@protobufjs/fetch@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" + integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== + dependencies: + "@protobufjs/aspromise" "^1.1.1" + "@protobufjs/inquire" "^1.1.0" + +"@protobufjs/float@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" + integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== + +"@protobufjs/inquire@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" + integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== + +"@protobufjs/path@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" + integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== + +"@protobufjs/pool@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" + integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== + +"@protobufjs/utf8@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" + integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== + +"@redux-saga/core@^1.0.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.3.0.tgz#2ce08b73d407fc6ea9e7f7d83d2e97d981a3a8b8" + integrity sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA== + dependencies: + "@babel/runtime" "^7.6.3" + "@redux-saga/deferred" "^1.2.1" + "@redux-saga/delay-p" "^1.2.1" + "@redux-saga/is" "^1.1.3" + "@redux-saga/symbols" "^1.1.3" + "@redux-saga/types" "^1.2.1" + typescript-tuple "^2.2.1" + +"@redux-saga/deferred@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.2.1.tgz#aca373a08ccafd6f3481037f2f7ee97f2c87c3ec" + integrity sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g== + +"@redux-saga/delay-p@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.2.1.tgz#e72ac4731c5080a21f75b61bedc31cb639d9e446" + integrity sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w== + dependencies: + "@redux-saga/symbols" "^1.1.3" + +"@redux-saga/is@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.3.tgz#b333f31967e87e32b4e6b02c75b78d609dd4ad73" + integrity sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q== + dependencies: + "@redux-saga/symbols" "^1.1.3" + "@redux-saga/types" "^1.2.1" + +"@redux-saga/symbols@^1.1.3": + version "1.1.3" + resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.3.tgz#b731d56201719e96dc887dc3ae9016e761654367" + integrity sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg== + +"@redux-saga/types@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.2.1.tgz#9403f51c17cae37edf870c6bc0c81c1ece5ccef8" + integrity sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA== + +"@resolver-engine/core@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.2.1.tgz#0d71803f6d3b8cb2e9ed481a1bf0ca5f5256d0c0" + integrity sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A== + dependencies: + debug "^3.1.0" + request "^2.85.0" + +"@resolver-engine/fs@^0.2.1": + version "0.2.1" + resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.2.1.tgz#f98a308d77568cc02651d03636f46536b941b241" + integrity sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg== + dependencies: + "@resolver-engine/core" "^0.2.1" + debug "^3.1.0" + +"@resolver-engine/imports-fs@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz#5a81ef3285dbf0411ab3b15205080a1ad7622d9e" + integrity sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ== + dependencies: + "@resolver-engine/fs" "^0.2.1" + "@resolver-engine/imports" "^0.2.2" + debug "^3.1.0" + +"@resolver-engine/imports@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.2.2.tgz#d3de55a1bb5f3beb7703fdde743298f321175843" + integrity sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg== + dependencies: + "@resolver-engine/core" "^0.2.1" + debug "^3.1.0" + hosted-git-info "^2.6.0" + +"@scure/base@~1.1.0", "@scure/base@~1.1.4": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" + integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sindresorhus/is@^5.2.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" + integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== + +"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.16.0": + version "0.16.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa" + integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@szmarczak/http-timer@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" + integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== + dependencies: + defer-to-connect "^2.0.1" + +"@truffle/abi-utils@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-1.0.3.tgz#9f0df7a8aaf5e815bee47e0ad26bd4c91e4045f2" + integrity sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw== + dependencies: + change-case "3.0.2" + fast-check "3.1.1" + web3-utils "1.10.0" + +"@truffle/blockchain-utils@^0.1.9": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.1.9.tgz#d9b55bd23a134578e4217bae55a6dfbbb038d6dc" + integrity sha512-RHfumgbIVo68Rv9ofDYfynjnYZIfP/f1vZy4RoqkfYAO+fqfc58PDRzB1WAGq2U6GPuOnipOJxQhnqNnffORZg== + +"@truffle/code-utils@^3.0.4": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@truffle/code-utils/-/code-utils-3.0.4.tgz#5a3ab050847522f17ee318a86869f6d586a264bd" + integrity sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g== + dependencies: + cbor "^5.2.0" + +"@truffle/codec@^0.17.3": + version "0.17.3" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.17.3.tgz#94057e56e1a947594b35eba498d96915df3861d2" + integrity sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg== + dependencies: + "@truffle/abi-utils" "^1.0.3" + "@truffle/compile-common" "^0.9.8" + big.js "^6.0.3" + bn.js "^5.1.3" + cbor "^5.2.0" + debug "^4.3.1" + lodash "^4.17.21" + semver "^7.5.4" + utf8 "^3.0.0" + web3-utils "1.10.0" + +"@truffle/compile-common@^0.9.8": + version "0.9.8" + resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.9.8.tgz#f91507c895852289a17bf401eefebc293c4c69f0" + integrity sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ== + dependencies: + "@truffle/error" "^0.2.2" + colors "1.4.0" + +"@truffle/config@^1.3.61": + version "1.3.61" + resolved "https://registry.yarnpkg.com/@truffle/config/-/config-1.3.61.tgz#912d11eb03720b6b8cb79979aa56b85215075aec" + integrity sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw== + dependencies: + "@truffle/error" "^0.2.2" + "@truffle/events" "^0.1.25" + "@truffle/provider" "^0.3.13" + conf "^10.1.2" + debug "^4.3.1" + find-up "^2.1.0" + lodash "^4.17.21" + original-require "^1.0.1" + +"@truffle/contract-schema@^3.4.16": + version "3.4.16" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.16.tgz#c529c3f230db407b2f03290373b20b7366f2d37e" + integrity sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg== + dependencies: + ajv "^6.10.0" + debug "^4.3.1" + +"@truffle/contract@^4.0.35": + version "4.6.31" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.6.31.tgz#75cb059689ce73b365675d9650718908c01b6b58" + integrity sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ== + dependencies: + "@ensdomains/ensjs" "^2.1.0" + "@truffle/blockchain-utils" "^0.1.9" + "@truffle/contract-schema" "^3.4.16" + "@truffle/debug-utils" "^6.0.57" + "@truffle/error" "^0.2.2" + "@truffle/interface-adapter" "^0.5.37" + bignumber.js "^7.2.1" + debug "^4.3.1" + ethers "^4.0.32" + web3 "1.10.0" + web3-core-helpers "1.10.0" + web3-core-promievent "1.10.0" + web3-eth-abi "1.10.0" + web3-utils "1.10.0" + +"@truffle/dashboard-message-bus-client@^0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz#160bf0ae888efee8a45425232d296630f83fe6af" + integrity sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ== + dependencies: + "@truffle/dashboard-message-bus-common" "^0.1.7" + "@truffle/promise-tracker" "^0.1.7" + axios "1.5.0" + debug "^4.3.1" + delay "^5.0.0" + isomorphic-ws "^4.0.1" + node-abort-controller "^3.0.1" + tiny-typed-emitter "^2.1.0" + ws "^7.2.0" + +"@truffle/dashboard-message-bus-common@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz#dc7b76e18845788429929a97a416c1e6e37580dc" + integrity sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ== + +"@truffle/db-loader@^0.2.36": + version "0.2.36" + resolved "https://registry.yarnpkg.com/@truffle/db-loader/-/db-loader-0.2.36.tgz#7f9f06191d7e8945949e5408c2bed7aaefc8daec" + integrity sha512-Cm8uVc2eoihquMOSZm8UOuGGUvBo+/GHkxRoPAZ5pftOpSlRAug0okVOp6ETj1BujgLJ02izU/qdrwSGWwGR9A== + optionalDependencies: + "@truffle/db" "^2.0.36" + +"@truffle/db@^2.0.36": + version "2.0.36" + resolved "https://registry.yarnpkg.com/@truffle/db/-/db-2.0.36.tgz#f502f8307a70ad17acaded48d69bcb680c3848b3" + integrity sha512-PpUjOXZgf9Gy8RlP8bJhl5pjJRkghZUcCiGOsS0YbCCI//PGDDoKmS+3QUjXWhiMwTeld3gfUV2ip4p2hMbyVA== + dependencies: + "@graphql-tools/delegate" "^8.4.3" + "@graphql-tools/schema" "^8.3.1" + "@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.11.0" + debug "^4.3.1" + fs-extra "^9.1.0" + graphql "^15.3.0" + graphql-tag "^2.12.6" + json-stable-stringify "^1.0.1" + pascal-case "^2.0.1" + pluralize "^8.0.0" + pouchdb "7.3.0" + pouchdb-adapter-memory "^7.1.1" + pouchdb-debug "^7.1.1" + pouchdb-find "^7.0.0" + web3-utils "1.10.0" + +"@truffle/debug-utils@^6.0.57": + version "6.0.57" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-6.0.57.tgz#4e9a1051221c5f467daa398b0ca638d8b6408a82" + integrity sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA== + dependencies: + "@truffle/codec" "^0.17.3" + "@trufflesuite/chromafi" "^3.0.0" + bn.js "^5.1.3" + chalk "^2.4.2" + debug "^4.3.1" + highlightjs-solidity "^2.0.6" + +"@truffle/debugger@^12.1.5": + version "12.1.5" + resolved "https://registry.yarnpkg.com/@truffle/debugger/-/debugger-12.1.5.tgz#39be29471f8e0ed31e9a3f5434266058bde74708" + integrity sha512-m6FQoddmptcXZkO+OABcz4Ka7YDLAPW9/GhnTSqYonlaOeV7g5dMzybhHq6whaQet34rhNteomep7JpskKW9Mw== + dependencies: + "@ensdomains/ensjs" "^2.1.0" + "@truffle/abi-utils" "^1.0.3" + "@truffle/codec" "^0.17.3" + "@truffle/source-map-utils" "^1.3.119" + bn.js "^5.1.3" + debug "^4.3.1" + json-pointer "^0.6.1" + json-stable-stringify "^1.0.1" + lodash "^4.17.21" + redux "^3.7.2" + redux-saga "1.0.0" + reselect-tree "^1.3.7" + semver "^7.5.4" + web3 "1.10.0" + web3-eth-abi "1.10.0" + +"@truffle/error@^0.2.2": + version "0.2.2" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.2.2.tgz#1b4c4237c14dda792f20bd4f19ff4e4585b47796" + integrity sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg== + +"@truffle/events@^0.1.25": + version "0.1.25" + resolved "https://registry.yarnpkg.com/@truffle/events/-/events-0.1.25.tgz#52d4ae968273c267edfcb5c8e2d3b90c7f1f6b89" + integrity sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA== + dependencies: + "@truffle/dashboard-message-bus-client" "^0.1.12" + "@truffle/spinners" "^0.2.5" + debug "^4.3.1" + emittery "^0.4.1" + web3-utils "1.10.0" + +"@truffle/interface-adapter@^0.5.37": + version "0.5.37" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz#95d249c1912d2baaa63c54e8a138d3f476a1181a" + integrity sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.10.0" + +"@truffle/promise-tracker@^0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz#edc5e5940656439db7b1956bd4838d12dd4b9ecf" + integrity sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA== + +"@truffle/provider@^0.3.13": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.3.13.tgz#795b6172c5db20f30a026f2f733b9a3417847a9f" + integrity sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA== + dependencies: + "@truffle/error" "^0.2.2" + "@truffle/interface-adapter" "^0.5.37" + debug "^4.3.1" + web3 "1.10.0" + +"@truffle/source-map-utils@^1.3.119": + version "1.3.119" + resolved "https://registry.yarnpkg.com/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz#d02b5859183d61a605fa8aafa2ad56b39f145f9a" + integrity sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ== + dependencies: + "@truffle/code-utils" "^3.0.4" + "@truffle/codec" "^0.17.3" + debug "^4.3.1" + json-pointer "^0.6.1" + node-interval-tree "^1.3.3" + web3-utils "1.10.0" + +"@truffle/spinners@^0.2.5": + version "0.2.5" + resolved "https://registry.yarnpkg.com/@truffle/spinners/-/spinners-0.2.5.tgz#fe3bb3451768f5353085551b8fe6285d354705ef" + integrity sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ== + dependencies: + "@trufflesuite/spinnies" "^0.1.1" + +"@trufflesuite/bigint-buffer@1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" + integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== + dependencies: + node-gyp-build "4.4.0" + +"@trufflesuite/chromafi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz#f6956408c1af6a38a6ed1657783ce59504a1eb8b" + integrity sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ== + dependencies: + camelcase "^4.1.0" + chalk "^2.3.2" + cheerio "^1.0.0-rc.2" + detect-indent "^5.0.0" + highlight.js "^10.4.1" + lodash.merge "^4.6.2" + strip-ansi "^4.0.0" + strip-indent "^2.0.0" + +"@trufflesuite/spinnies@^0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@trufflesuite/spinnies/-/spinnies-0.1.1.tgz#719230993f55ab39f936ed8778979e7661af188d" + integrity sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA== + dependencies: + chalk "^4.1.2" + cli-cursor "^3.1.0" + strip-ansi "^6.0.0" + +"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": + version "20.30.0-unofficial.0" + resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" + integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== + dependencies: + ws "8.13.0" + optionalDependencies: + bufferutil "4.0.7" + utf-8-validate "6.0.3" + +"@types/accepts@^1.3.5": + version "1.3.7" + resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" + integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/body-parser@1.19.2": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cors@2.8.12": + version "2.8.12" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== + +"@types/express-serve-static-core@4.17.31": + version "4.17.31" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" + integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express-serve-static-core@^4.17.18": + version "4.17.43" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" + integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@4.17.14": + version "4.17.14" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" + integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.18" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.2": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/long@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" + integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== + +"@types/lru-cache@5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/node@*": + version "20.11.16" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" + integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== + dependencies: + undici-types "~5.26.4" + +"@types/node@^10.0.3", "@types/node@^10.1.0": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^12.12.6": + version "12.20.55" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" + integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/qs@*", "@types/qs@^6.2.31": + version "6.9.11" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +"@types/seedrandom@3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" + integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/ws@8.5.3": + version "8.5.3" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" + integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== + dependencies: + "@types/node" "*" + +"@ungap/structured-clone@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + +abitype@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" + integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== + +abort-controller@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +abortcontroller-polyfill@^1.7.3, abortcontroller-polyfill@^1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" + integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== + +abstract-level@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" + integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" + integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== + dependencies: + buffer "^6.0.3" + catering "^2.0.0" + is-buffer "^2.0.5" + level-concat-iterator "^3.0.0" + level-supports "^2.0.1" + queue-microtask "^1.2.3" + +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +abstract-leveldown@~2.7.1: + version "2.7.2" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" + integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== + dependencies: + xtend "~4.0.0" + +abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== + dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +accepts@^1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^8.9.0: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +ado-contracts@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ado-contracts/-/ado-contracts-1.0.0.tgz#44879d18ab37da1c5f5282e2d1d3a1db42eb34d2" + integrity sha512-tLJdlGed3Fcwih4m9yNaI3+PqfxKarbLBR2OavM8RiPX8zo5TrLUZ6akrqkK+BFBInhaxONnMKsWiHj4QNPdCw== + dependencies: + "@openzeppelin/contracts" "^4.1.0" + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^3.2.3: + version "3.2.4" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" + integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4@^4.11.0: + version "4.13.1" + resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" + integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apollo-datasource@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" + integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + apollo-server-env "^4.2.1" + +apollo-reporting-protobuf@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz#6edd31f09d4a3704d9e808d1db30eca2229ded26" + integrity sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog== + dependencies: + "@apollo/protobufjs" "1.2.6" + +apollo-server-core@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.13.0.tgz#ad6601fbb34cc97eedca27a9fb0b5738d11cd27d" + integrity sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + "@apollo/utils.usagereporting" "^1.0.0" + "@apollographql/apollo-tools" "^0.5.3" + "@apollographql/graphql-playground-html" "1.6.29" + "@graphql-tools/mock" "^8.1.2" + "@graphql-tools/schema" "^8.0.0" + "@josephg/resolvable" "^1.0.0" + apollo-datasource "^3.3.2" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + apollo-server-errors "^3.3.1" + apollo-server-plugin-base "^3.7.2" + apollo-server-types "^3.8.0" + async-retry "^1.2.1" + fast-json-stable-stringify "^2.1.0" + graphql-tag "^2.11.0" + loglevel "^1.6.8" + lru-cache "^6.0.0" + node-abort-controller "^3.0.1" + sha.js "^2.4.11" + uuid "^9.0.0" + whatwg-mimetype "^3.0.0" + +apollo-server-env@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" + integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== + dependencies: + node-fetch "^2.6.7" + +apollo-server-errors@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" + integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== + +apollo-server-express@^3.13.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.13.0.tgz#0d8d9bbba3b8b8264912d215f63fd44e74d5f42a" + integrity sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g== + dependencies: + "@types/accepts" "^1.3.5" + "@types/body-parser" "1.19.2" + "@types/cors" "2.8.12" + "@types/express" "4.17.14" + "@types/express-serve-static-core" "4.17.31" + accepts "^1.3.5" + apollo-server-core "^3.13.0" + apollo-server-types "^3.8.0" + body-parser "^1.19.0" + cors "^2.8.5" + parseurl "^1.3.3" + +apollo-server-plugin-base@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz#c19cd137bc4c993ba2490ba2b571b0f3ce60a0cd" + integrity sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw== + dependencies: + apollo-server-types "^3.8.0" + +apollo-server-types@^3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.8.0.tgz#d976b6967878681f715fe2b9e4dad9ba86b1346f" + integrity sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A== + dependencies: + "@apollo/utils.keyvaluecache" "^1.0.1" + "@apollo/utils.logger" "^1.0.0" + apollo-reporting-protobuf "^3.4.0" + apollo-server-env "^4.2.1" + +apollo-server@^3.11.0: + version "3.13.0" + resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-3.13.0.tgz#38d355756717c0cb519e7ab95bce6dcc8ce35677" + integrity sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg== + dependencies: + "@types/express" "4.17.14" + apollo-server-core "^3.13.0" + apollo-server-express "^3.13.0" + express "^4.17.1" + +app-module-path@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" + integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +argsarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" + integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== + +array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-includes@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" + integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + get-intrinsic "^1.2.1" + is-string "^1.0.7" + +array.prototype.filter@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" + integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +array.prototype.findlastindex@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" + integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + get-intrinsic "^1.2.1" + +array.prototype.flat@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" + integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +array.prototype.flatmap@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" + integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + es-shim-unscopables "^1.0.0" + +arraybuffer.prototype.slice@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +ast-parents@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" + integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async-eventemitter@0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" + integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== + dependencies: + async "^2.4.0" + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async-retry@^1.2.1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" + integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== + dependencies: + retry "0.13.1" + +async@^2.4.0: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atomically@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" + integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== + +available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" + integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" + integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== + +axios@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" + integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== + dependencies: + follow-redirects "^1.15.0" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +axios@^1.5.1: + version "1.6.7" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" + integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2, base-x@^3.0.8: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bech32@1.1.4, bech32@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + +big.js@^6.0.3: + version "6.2.1" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" + integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== + +bignumber.js@^7.2.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" + integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== + +bignumber.js@^9.0.0, bignumber.js@^9.0.1: + version "9.1.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" + integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bluebird@^3.5.0, bluebird@^3.5.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== + +bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +body-parser@^1.16.0, body-parser@^1.19.0: + version "1.20.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" + integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +boolbase@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@1.1.2, buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-to-arraybuffer@^0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" + integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +buffer@6.0.3, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +bufferutil@4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" + integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== + dependencies: + node-gyp-build "^4.3.0" + +bufferutil@^4.0.1: + version "4.0.8" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" + integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== + dependencies: + node-gyp-build "^4.3.0" + +builtin-modules@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +builtins@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" + integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== + dependencies: + semver "^7.0.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-lookup@^6.0.4: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" + integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== + +cacheable-lookup@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" + integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== + +cacheable-request@^10.2.8: + version "10.2.14" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" + integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== + dependencies: + "@types/http-cache-semantics" "^4.0.2" + get-stream "^6.0.1" + http-cache-semantics "^4.1.1" + keyv "^4.5.3" + mimic-response "^4.0.0" + normalize-url "^8.0.0" + responselike "^3.0.0" + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +camelcase@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +catering@^2.0.0, catering@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" + integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== + +cbor@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" + integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== + dependencies: + bignumber.js "^9.0.1" + nofilter "^1.0.4" + +chai-bn@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" + integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== + +chai@^4.2.0, chai@^4.3.6: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + +chalk@^2.3.2, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +change-case@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" + integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.2: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +cids@^0.7.1: + version "0.7.5" + resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" + integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== + dependencies: + buffer "^5.5.0" + class-is "^1.1.0" + multibase "~0.6.0" + multicodec "^1.0.0" + multihashes "~0.4.15" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +class-is@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" + integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-buffer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^10.0.0: + version "10.0.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" + integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== + +commander@^2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +conf@^10.1.2: + version "10.2.0" + resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" + integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== + dependencies: + ajv "^8.6.3" + ajv-formats "^2.1.1" + atomically "^1.7.0" + debounce-fn "^4.0.0" + dot-prop "^6.0.1" + env-paths "^2.2.1" + json-schema-typed "^7.0.3" + onetime "^5.1.2" + pkg-up "^3.1.0" + semver "^7.3.5" + +config-chain@^1.1.11: + version "1.1.13" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" + integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ== + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-hash@^2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" + integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== + dependencies: + cids "^0.7.1" + multicodec "^0.5.5" + multihashes "^0.4.15" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.1, cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +crc-32@^1.2.0, crc-32@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" + integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-fetch@^3.1.4: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + +cross-fetch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" + integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== + dependencies: + node-fetch "^2.6.12" + +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +crypto-addr-codec@^0.1.7: + version "0.1.8" + resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.8.tgz#45c4b24e2ebce8e24a54536ee0ca25b65787b016" + integrity sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g== + dependencies: + base-x "^3.0.8" + big-integer "1.6.36" + blakejs "^1.1.0" + bs58 "^4.0.1" + ripemd160-min "0.0.6" + safe-buffer "^5.2.0" + sha3 "^2.1.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssfilter@0.0.10: + version "0.0.10" + resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" + integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== + +custom-error-test-helper@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/custom-error-test-helper/-/custom-error-test-helper-1.0.6.tgz#84358bc8c964470bd87223d1813bf90faee5e837" + integrity sha512-mtSur97B5c2Nxx0HS7VQtVl9FMNl/Xf13RxTWwfMLIKnNVror/e43ll6VWjs+J5gP2E6AZn5+Z0AqTNF5UXIcw== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/solidity" "^5.7.0" + chai "^4.3.6" + +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +dataloader@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" + integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== + +debounce-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" + integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== + dependencies: + mimic-fn "^3.0.0" + +debug@2.6.9, debug@^2.2.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debug@4.3.4, debug@^4.3.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.1.0, debug@^3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== + dependencies: + abstract-leveldown "~6.2.1" + inherits "^2.0.3" + +define-data-property@^1.0.1, define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +delay@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" + integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-indent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" + integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== + dependencies: + esutils "^2.0.2" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +dom-walk@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" + integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== + +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug== + dependencies: + no-case "^2.2.0" + +dot-prop@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" + integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== + dependencies: + is-obj "^2.0.0" + +dotenv@^16.4.1: + version "16.4.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" + integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== + +double-ended-queue@2.1.0-0: + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" + integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emittery@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" + integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== + +emittery@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" + integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== + dependencies: + abstract-leveldown "^6.2.1" + inherits "^2.0.3" + level-codec "^9.0.0" + level-errors "^2.0.0" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +end-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5" + integrity sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA== + dependencies: + write-stream "~0.4.3" + +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + +env-paths@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +errno@~0.1.1: + version "0.1.8" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" + integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.3" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" + integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + dependencies: + array-buffer-byte-length "^1.0.0" + arraybuffer.prototype.slice "^1.0.2" + available-typed-arrays "^1.0.5" + call-bind "^1.0.5" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.2" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.12" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.5.1" + safe-array-concat "^1.0.1" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.0" + typed-array-byte-length "^1.0.0" + typed-array-byte-offset "^1.0.0" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.13" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-errors@^1.0.0, es-errors@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-set-tostringtag@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" + integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== + dependencies: + get-intrinsic "^1.2.2" + has-tostringtag "^1.0.0" + hasown "^2.0.0" + +es-shim-unscopables@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" + integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== + dependencies: + hasown "^2.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.62" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" + integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== + dependencies: + es6-iterator "^2.0.3" + es6-symbol "^3.1.3" + next-tick "^1.1.0" + +es6-iterator@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-promise@^4.2.8: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-symbol@^3.1.1, es6-symbol@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +eslint-compat-utils@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" + integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== + +eslint-config-standard@^17.1.0: + version "17.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" + integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== + +eslint-import-resolver-node@^0.3.9: + version "0.3.9" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" + integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== + dependencies: + debug "^3.2.7" + is-core-module "^2.13.0" + resolve "^1.22.4" + +eslint-module-utils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" + integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== + dependencies: + debug "^3.2.7" + +eslint-plugin-es-x@^7.5.0: + version "7.5.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" + integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== + dependencies: + "@eslint-community/eslint-utils" "^4.1.2" + "@eslint-community/regexpp" "^4.6.0" + eslint-compat-utils "^0.1.2" + +eslint-plugin-import@^2.29.1: + version "2.29.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" + integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + dependencies: + array-includes "^3.1.7" + array.prototype.findlastindex "^1.2.3" + array.prototype.flat "^1.3.2" + array.prototype.flatmap "^1.3.2" + debug "^3.2.7" + doctrine "^2.1.0" + eslint-import-resolver-node "^0.3.9" + eslint-module-utils "^2.8.0" + hasown "^2.0.0" + is-core-module "^2.13.1" + is-glob "^4.0.3" + minimatch "^3.1.2" + object.fromentries "^2.0.7" + object.groupby "^1.0.1" + object.values "^1.1.7" + semver "^6.3.1" + tsconfig-paths "^3.15.0" + +eslint-plugin-n@^16.6.2: + version "16.6.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" + integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + builtins "^5.0.1" + eslint-plugin-es-x "^7.5.0" + get-tsconfig "^4.7.0" + globals "^13.24.0" + ignore "^5.2.4" + is-builtin-module "^3.2.1" + is-core-module "^2.12.1" + minimatch "^3.1.2" + resolve "^1.22.2" + semver "^7.5.3" + +eslint-plugin-promise@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" + integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint@^8.56.0: + version "8.56.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" + integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.56.0" + "@humanwhocodes/config-array" "^0.11.13" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esquery@^1.4.2: + version "1.5.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" + integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" + integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== + dependencies: + idna-uts46-hx "^2.3.1" + js-sha3 "^0.5.7" + +eth-gas-reporter@^0.2.27: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +eth-helpers@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eth-helpers/-/eth-helpers-1.3.1.tgz#e41d7a8f04d42f1b887bde2eb8d6de19a901c47c" + integrity sha512-iEcqhro1pqnZbnE3te0KDargTadc1J4zAiV0J1dwBDPo5nbHYBMxPDLQFA+0sMKUxe7cjHtMger6/75ukN3P5A== + dependencies: + nanoassert "^2.0.0" + +eth-lib@0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" + integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + xhr-request-promise "^0.1.2" + +eth-lib@^0.1.26: + version "0.1.29" + resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" + integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== + dependencies: + bn.js "^4.11.6" + elliptic "^6.4.0" + nano-json-stream-parser "^0.1.2" + servify "^0.1.12" + ws "^3.0.0" + xhr-request-promise "^0.1.2" + +ethereum-bloom-filters@^1.0.6: + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== + dependencies: + js-sha3 "^0.8.0" + +ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^4.0.32: + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== + dependencies: + aes-js "3.0.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.3" + js-sha3 "0.5.7" + scrypt-js "2.0.4" + setimmediate "1.0.4" + uuid "2.0.1" + xmlhttprequest "1.8.0" + +ethers@^5.0.13, ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethjs-abi@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.1.tgz#e0a7a93a7e81163a94477bad56ede524ab6de533" + integrity sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA== + dependencies: + bn.js "4.11.6" + js-sha3 "0.5.5" + number-to-bn "1.7.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +eventemitter3@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" + integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +express@^4.14.0, express@^4.17.1: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext@^1.1.2: + version "1.7.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" + integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== + dependencies: + type "^2.7.2" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-check@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.1.1.tgz#72c5ae7022a4e86504762e773adfb8a5b0b01252" + integrity sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA== + dependencies: + pure-rand "^5.0.1" + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" + integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== + +fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.0.tgz#ca5e1a90b5e68f97fc8b61330d5819b82f5fab03" + integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== + dependencies: + reusify "^1.0.4" + +fetch-cookie@0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz#e046d2abadd0ded5804ce7e2cae06d4331c15407" + integrity sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA== + dependencies: + tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@5.0.0, find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" + integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== + +follow-redirects@^1.15.0, follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +foreach@^2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" + integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data-encoder@1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" + integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== + +form-data-encoder@^2.1.2: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" + integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== + dependencies: + minipass "^2.6.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +ganache@7.9.1: + version "7.9.1" + resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.1.tgz#94f8518215c7989ff5fd542db80bd47d7c7da786" + integrity sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA== + dependencies: + "@trufflesuite/bigint-buffer" "1.1.10" + "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "5.1.1" + "@types/seedrandom" "3.0.1" + abstract-level "1.0.3" + abstract-leveldown "7.2.0" + async-eventemitter "0.2.4" + emittery "0.10.0" + keccak "3.0.2" + leveldown "6.1.0" + secp256k1 "4.0.3" + optionalDependencies: + bufferutil "4.0.5" + utf-8-validate "5.0.7" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" + integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== + dependencies: + es-errors "^1.0.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-tsconfig@^4.7.0: + version "4.7.2" + resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" + integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== + dependencies: + resolve-pkg-maps "^1.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global@~4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" + integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== + dependencies: + min-document "^2.19.0" + process "^0.11.10" + +globals@^13.19.0, globals@^13.24.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@12.1.0: + version "12.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" + integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== + dependencies: + "@sindresorhus/is" "^4.6.0" + "@szmarczak/http-timer" "^5.0.1" + "@types/cacheable-request" "^6.0.2" + "@types/responselike" "^1.0.0" + cacheable-lookup "^6.0.4" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + form-data-encoder "1.7.1" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^2.0.0" + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +got@^12.1.0: + version "12.6.1" + resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" + integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== + dependencies: + "@sindresorhus/is" "^5.2.0" + "@szmarczak/http-timer" "^5.0.1" + cacheable-lookup "^7.0.0" + cacheable-request "^10.2.8" + decompress-response "^6.0.0" + form-data-encoder "^2.1.2" + get-stream "^6.0.1" + http2-wrapper "^2.1.10" + lowercase-keys "^3.0.0" + p-cancelable "^3.0.0" + responselike "^3.0.0" + +graceful-fs@4.2.10: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +graphql-tag@^2.11.0, graphql-tag@^2.12.6: + version "2.12.6" + resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" + integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== + dependencies: + tslib "^2.1.0" + +graphql@^15.3.0: + version "15.8.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" + integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ== + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + +highlight.js@^10.4.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== + +highlightjs-solidity@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz#e7a702a2b05e0a97f185e6ba39fd4846ad23a990" + integrity sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-https@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" + integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +http2-wrapper@^2.1.10: + version "2.2.1" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" + integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.2.0" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +idna-uts46-hx@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" + integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== + dependencies: + punycode "2.1.0" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.2.0, ignore@^5.2.4: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immediate@3.3.0, immediate@^3.2.3: + version "3.3.0" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" + integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== + +import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +internal-slot@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" + integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== + dependencies: + get-intrinsic "^1.2.2" + hasown "^2.0.0" + side-channel "^1.0.4" + +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-builtin-module@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" + integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== + dependencies: + builtin-modules "^3.3.0" + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-function@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" + integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== + +is-generator-function@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA== + dependencies: + lower-case "^1.1.0" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw== + dependencies: + upper-case "^1.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isomorphic-ws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" + integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== + +isomorphic-ws@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" + integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +js-sha256@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.11.0.tgz#256a921d9292f7fe98905face82e367abaca9576" + integrity sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q== + +js-sha3@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" + integrity sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA== + +js-sha3@0.5.7, js-sha3@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" + integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-pointer@^0.6.1: + version "0.6.2" + resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" + integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== + dependencies: + foreach "^2.0.4" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema-typed@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" + integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stable-stringify@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" + integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== + dependencies: + call-bind "^1.0.5" + isarray "^2.0.5" + jsonify "^0.0.1" + object-keys "^1.1.1" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" + integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== + dependencies: + minimist "^1.2.0" + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonify@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" + integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +keccak@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keccak@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +latest-version@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" + integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== + dependencies: + package-json "^8.1.0" + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== + dependencies: + invert-kv "^1.0.0" + +level-codec@9.0.2, level-codec@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" + integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== + dependencies: + buffer "^5.6.0" + +level-concat-iterator@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" + integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== + dependencies: + catering "^2.1.0" + +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== + +level-errors@^2.0.0, level-errors@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" + integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== + dependencies: + errno "~0.1.1" + +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== + dependencies: + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" + +level-js@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" + integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== + dependencies: + abstract-leveldown "~6.2.3" + buffer "^5.5.0" + inherits "^2.0.3" + ltgt "^2.1.2" + +level-packager@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== + dependencies: + encoding-down "^6.3.0" + levelup "^4.3.2" + +level-supports@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" + integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== + +level-supports@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" + integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== + +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== + dependencies: + xtend "^4.0.2" + +level-transcoder@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" + integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== + dependencies: + buffer "^6.0.3" + module-error "^1.0.1" + +level-write-stream@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc" + integrity sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw== + dependencies: + end-stream "~0.1.0" + +level@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" + integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== + dependencies: + level-js "^5.0.0" + level-packager "^5.1.0" + leveldown "^5.4.0" + +leveldown@5.6.0, leveldown@^5.4.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" + integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== + dependencies: + abstract-leveldown "~6.2.1" + napi-macros "~2.0.0" + node-gyp-build "~4.1.0" + +leveldown@6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" + integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== + dependencies: + abstract-leveldown "^7.2.0" + napi-macros "~2.0.0" + node-gyp-build "^4.3.0" + +levelup@4.4.0, levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== + dependencies: + deferred-leveldown "~5.3.0" + level-errors "~2.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" + xtend "~4.0.0" + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.2.1: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== + +lodash.flatten@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@^4.17.14, lodash@^4.17.21, lodash@^4.2.1: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loglevel@^1.6.8: + version "1.9.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" + integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== + +long@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== + +loose-envify@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA== + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lowercase-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" + integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== + +"lru-cache@7.10.1 - 7.13.1": + version "7.13.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" + integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" + integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memdown@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" + integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== + dependencies: + abstract-leveldown "~2.7.1" + functional-red-black-tree "^1.0.1" + immediate "^3.2.3" + inherits "~2.0.1" + ltgt "~2.2.0" + safe-buffer "~5.1.1" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-fn@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" + integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +mimic-response@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" + integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== + +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== + dependencies: + dom-walk "^0.1.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.0, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +minipass@^2.6.0, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== + dependencies: + minipass "^2.9.0" + +mkdirp-promise@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" + integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== + dependencies: + mkdirp "*" + +mkdirp@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" + integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== + +mkdirp@^0.5.5: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mocha@10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" + integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mocha@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" + integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "7.2.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + nanoid "3.3.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +mock-fs@^4.1.0: + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== + +module-error@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" + integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multibase@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" + integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multibase@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" + integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== + dependencies: + base-x "^3.0.8" + buffer "^5.5.0" + +multicodec@^0.5.5: + version "0.5.7" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" + integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== + dependencies: + varint "^5.0.0" + +multicodec@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" + integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== + dependencies: + buffer "^5.6.0" + varint "^5.0.0" + +multihashes@^0.4.15, multihashes@~0.4.15: + version "0.4.21" + resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" + integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== + dependencies: + buffer "^5.5.0" + multibase "^0.7.0" + varint "^5.0.0" + +nano-base32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" + integrity sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw== + +nano-json-stream-parser@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" + integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== + +nanoassert@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-2.0.0.tgz#a05f86de6c7a51618038a620f88878ed1e490c09" + integrity sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA== + +nanoid@3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" + integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== + +napi-macros@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" + integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +next-tick@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" + integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== + +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + +node-abort-controller@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" + integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^2.6.12, node-fetch@^2.6.7: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-gyp-build@4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" + integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== + +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +node-gyp-build@~4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" + integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== + +node-interval-tree@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-1.3.3.tgz#15ffb904cde08270214acace8dc7653e89ae32b7" + integrity sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw== + dependencies: + shallowequal "^1.0.2" + +nofilter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" + integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +normalize-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" + integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.fromentries@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" + integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +object.groupby@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" + integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== + dependencies: + array.prototype.filter "^1.0.3" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.0.0" + +object.values@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" + integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +oboe@2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" + integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== + dependencies: + http-https "^1.0.0" + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.9.3: + version "0.9.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" + integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== + dependencies: + "@aashutoshrathi/word-wrap" "^1.2.3" + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + +original-require@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" + integrity sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A== + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== + dependencies: + lcid "^1.0.0" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-cancelable@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" + integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^8.1.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" + integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== + dependencies: + got "^12.1.0" + registry-auth-token "^5.0.1" + registry-url "^6.0.0" + semver "^7.3.7" + +param-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== + dependencies: + no-case "^2.2.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +parse-headers@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" + integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== + dependencies: + error-ex "^1.2.0" + +parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@^1.3.3, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^2.0.0, pascal-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ== + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q== + dependencies: + no-case "^2.2.0" + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== + dependencies: + pinkie-promise "^2.0.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +pluralize@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" + integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== + +pouchdb-abstract-mapreduce@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz#96ff4a0f41cbe273f3f52fde003b719005a2093c" + integrity sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w== + dependencies: + pouchdb-binary-utils "7.3.1" + pouchdb-collate "7.3.1" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-fetch "7.3.1" + pouchdb-mapreduce-utils "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-adapter-leveldb-core@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz#3c71dce7ff06c2e483d873d7aabc1fded56372ca" + integrity sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA== + dependencies: + argsarray "0.0.1" + buffer-from "1.1.2" + double-ended-queue "2.1.0-0" + levelup "4.4.0" + pouchdb-adapter-utils "7.3.1" + pouchdb-binary-utils "7.3.1" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-json "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-merge "7.3.1" + pouchdb-utils "7.3.1" + sublevel-pouchdb "7.3.1" + through2 "3.0.2" + +pouchdb-adapter-memory@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz#7be4b0601326cb93eb1141ed910fdfdf40c36616" + integrity sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg== + dependencies: + memdown "1.4.1" + pouchdb-adapter-leveldb-core "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-adapter-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz#7237cb597f8d337057df15d4859bfe3c881d8832" + integrity sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw== + dependencies: + pouchdb-binary-utils "7.3.1" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-merge "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-binary-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz#eea22d9a5f880fcd95062476f4f5484cdf61496f" + integrity sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw== + dependencies: + buffer-from "1.1.2" + +pouchdb-collate@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz#19d7b87dd173d1c765da8cc9987c5aa9eb24f11f" + integrity sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ== + +pouchdb-collections@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz#4f1819cf4dd6936a422c29f7fa26a9b5dca428f5" + integrity sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w== + +pouchdb-debug@^7.1.1: + version "7.2.1" + resolved "https://registry.yarnpkg.com/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz#f5f869f6113c12ccb97cddf5b0a32b6e0e67e961" + integrity sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw== + dependencies: + debug "3.1.0" + +pouchdb-errors@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz#78be36721e2edc446fac158a236a9218c7bcdb14" + integrity sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw== + dependencies: + inherits "2.0.4" + +pouchdb-fetch@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz#d54b1807be0f0a5d4b6d06e416c7d54952bbc348" + integrity sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag== + dependencies: + abort-controller "3.0.0" + fetch-cookie "0.11.0" + node-fetch "2.6.7" + +pouchdb-find@^7.0.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.3.1.tgz#07a633d5ee2bd731dae9f991281cd25212088d29" + integrity sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA== + dependencies: + pouchdb-abstract-mapreduce "7.3.1" + pouchdb-collate "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-fetch "7.3.1" + pouchdb-md5 "7.3.1" + pouchdb-selector-core "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-json@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.3.1.tgz#a80a3060aa2914959e4dca7a4e2022ab20c7119a" + integrity sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ== + dependencies: + vuvuzela "1.0.3" + +pouchdb-mapreduce-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz#f0ac2c8400fbedb705e9226082453ac7d3f2a066" + integrity sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg== + dependencies: + argsarray "0.0.1" + inherits "2.0.4" + pouchdb-collections "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-md5@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz#70fae44f9d27eb4c6a8e7106156b4593d31c1762" + integrity sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg== + dependencies: + pouchdb-binary-utils "7.3.1" + spark-md5 "3.0.2" + +pouchdb-merge@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz#97aae682d7d8499b62b6ce234dcb9527c7bf6f02" + integrity sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw== + +pouchdb-selector-core@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz#08245662de3d61f16ab8dae2b56ef622935b3fb3" + integrity sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w== + dependencies: + pouchdb-collate "7.3.1" + pouchdb-utils "7.3.1" + +pouchdb-utils@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz#d25f0a034427f388ba5ae37d9ae3fbed210e8720" + integrity sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ== + dependencies: + argsarray "0.0.1" + clone-buffer "1.0.0" + immediate "3.3.0" + inherits "2.0.4" + pouchdb-collections "7.3.1" + pouchdb-errors "7.3.1" + pouchdb-md5 "7.3.1" + uuid "8.3.2" + +pouchdb@7.3.0: + version "7.3.0" + resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.3.0.tgz#440fbef12dfd8f9002320802528665e883a3b7f8" + integrity sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw== + dependencies: + abort-controller "3.0.0" + argsarray "0.0.1" + buffer-from "1.1.2" + clone-buffer "1.0.0" + double-ended-queue "2.1.0-0" + fetch-cookie "0.11.0" + immediate "3.3.0" + inherits "2.0.4" + level "6.0.1" + level-codec "9.0.2" + level-write-stream "1.0.0" + leveldown "5.6.0" + levelup "4.4.0" + ltgt "2.2.1" + node-fetch "2.6.7" + readable-stream "1.1.14" + spark-md5 "3.0.2" + through2 "3.0.2" + uuid "8.3.2" + vuvuzela "1.0.3" + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@^2.8.3: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== + +psl@^1.1.28, psl@^1.1.33: + version "1.9.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" + integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== + +punycode@^2.1.0, punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^5.0.1: + version "5.0.5" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.5.tgz#bda2a7f6a1fc0f284d78d78ca5902f26f2ad35cf" + integrity sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +qs@^6.4.0: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + +qs@~6.5.2: + version "6.5.3" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" + integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2, queue-microtask@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" + integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "0.0.1" + string_decoder "~0.10.x" + +"readable-stream@2 || 3", readable-stream@^3.4.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@~0.0.2: + version "0.0.4" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" + integrity sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +redux-saga@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.0.tgz#acb8b3ed9180fecbe75f342011d75af3ac11045b" + integrity sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA== + dependencies: + "@redux-saga/core" "^1.0.0" + +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" + integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + set-function-name "^2.0.0" + +registry-auth-token@^5.0.1: + version "5.0.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" + integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== + dependencies: + "@pnpm/npm-conf" "^2.1.0" + +registry-url@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" + integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== + dependencies: + rc "1.2.8" + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +request@^2.79.0, request@^2.85.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +reselect-tree@^1.3.7: + version "1.3.7" + resolved "https://registry.yarnpkg.com/reselect-tree/-/reselect-tree-1.3.7.tgz#c3eca58765d9df96bae0017f6ff3504c304cdea0" + integrity sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg== + dependencies: + debug "^3.1.0" + json-pointer "^0.6.1" + reselect "^4.0.0" + +reselect@^4.0.0: + version "4.1.8" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" + integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== + +resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pkg-maps@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" + integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== + +resolve@^1.10.0, resolve@^1.22.2, resolve@^1.22.4: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +responselike@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" + integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== + dependencies: + lowercase-keys "^3.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +ripemd160-min@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-array-concat@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-regex-test@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" + integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +scrypt-js@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" + integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== + +scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@4.0.3, secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ== + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +servify@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" + integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== + dependencies: + body-parser "^1.16.0" + cors "^2.8.1" + express "^4.14.0" + request "^2.79.0" + xhr "^2.3.3" + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" + integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== + dependencies: + define-data-property "^1.1.1" + function-bind "^1.1.2" + get-intrinsic "^1.2.2" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" + integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== + dependencies: + define-data-property "^1.0.1" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.0" + +setimmediate@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" + integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +sha3-wasm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/sha3-wasm/-/sha3-wasm-1.0.0.tgz#ceabc2533d9b82043a3381135721ed49f5b09d43" + integrity sha512-yX0ULD3VD8U80YlM+6FapExy9uzYBpEOZzXRHwdhJn/+3PBbKhRHiNhknBqmMkW110zglXrJoZ52gtRbDGK4tg== + dependencies: + nanoassert "^2.0.0" + +sha3@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" + integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== + dependencies: + buffer "6.0.3" + +shallowequal@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^2.7.0: + version "2.8.2" + resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" + integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== + dependencies: + decompress-response "^3.3.0" + once "^1.3.1" + simple-concat "^1.0.0" + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q== + dependencies: + no-case "^2.2.0" + +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + +solhint@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-4.1.1.tgz#137c935ef028f01ba13687a1f237288d94dae1bf" + integrity sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw== + dependencies: + "@solidity-parser/parser" "^0.16.0" + ajv "^6.12.6" + antlr4 "^4.11.0" + ast-parents "^0.0.1" + chalk "^4.1.2" + commander "^10.0.0" + cosmiconfig "^8.0.0" + fast-diff "^1.2.0" + glob "^8.0.3" + ignore "^5.2.4" + js-yaml "^4.1.0" + latest-version "^7.0.0" + lodash "^4.17.21" + pluralize "^8.0.0" + semver "^7.5.2" + strip-ansi "^6.0.1" + table "^6.8.1" + text-table "^0.2.0" + optionalDependencies: + prettier "^2.8.3" + +spark-md5@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" + integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" + integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.16" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" + integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + +sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== + +strip-json-comments@3.1.1, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +sublevel-pouchdb@7.3.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz#c1cc03af45081345c7c82821d6dcaa74564ae2ef" + integrity sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ== + dependencies: + inherits "2.0.4" + level-codec "9.0.2" + ltgt "2.2.1" + readable-stream "1.1.14" + +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ== + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + +swarm-js@^0.1.40: + version "0.1.42" + resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" + integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== + dependencies: + bluebird "^3.5.0" + buffer "^5.0.5" + eth-lib "^0.1.26" + fs-extra "^4.0.2" + got "^11.8.5" + mime-types "^2.1.16" + mkdirp-promise "^5.0.1" + mock-fs "^4.1.0" + setimmediate "^1.0.5" + tar "^4.0.2" + xhr-request "^1.0.1" + +symbol-observable@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table@^6.8.1: + version "6.8.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" + integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +tar@^4.0.2: + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" + integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== + dependencies: + inherits "^2.0.4" + readable-stream "2 || 3" + +timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tiny-typed-emitter@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" + integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== + +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q== + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": + version "4.1.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" + integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +truffle-assertions@^0.9.2: + version "0.9.2" + resolved "https://registry.yarnpkg.com/truffle-assertions/-/truffle-assertions-0.9.2.tgz#0f8360f53ad92b6d8fdb8ceb5dce54c1fc392e23" + integrity sha512-9g2RhaxU2F8DeWhqoGQvL/bV8QVoSnQ6PY+ZPvYRP5eF7+/8LExb4mjLx/FeliLTjc3Tv1SABG05Gu5qQ/ErmA== + dependencies: + assertion-error "^1.1.0" + lodash.isequal "^4.5.0" + +truffle-flattener@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/truffle-flattener/-/truffle-flattener-1.6.0.tgz#abb64488b711e6cca0a9d3e449f6a85e35964c5d" + integrity sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q== + dependencies: + "@resolver-engine/imports-fs" "^0.2.2" + "@solidity-parser/parser" "^0.14.1" + find-up "^2.1.0" + mkdirp "^1.0.4" + tsort "0.0.1" + +truffle@^5.11.5: + version "5.11.5" + resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.11.5.tgz#b0a3a9308c417dbe0290307d7698316d3e8eabe8" + integrity sha512-yCa2uWs5DmL0spuJUuIMtnVayRQrVuWLtcRXHMB0NLrtWDcRo7VM9RViveV4+oi9LdZ8VpFmmqHGm43LbzUxOA== + dependencies: + "@truffle/db-loader" "^0.2.36" + "@truffle/debugger" "^12.1.5" + app-module-path "^2.2.0" + ganache "7.9.1" + mocha "10.1.0" + original-require "^1.0.1" + optionalDependencies: + "@truffle/db" "^2.0.36" + +tsconfig-paths@^3.15.0: + version "3.15.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" + integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== + dependencies: + "@types/json5" "^0.0.29" + json5 "^1.0.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.1.0, tslib@^2.4.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + +tslib@~2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" + integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.7.2: + version "2.7.2" + resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" + integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== + +typed-array-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" + integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-typed-array "^1.1.10" + +typed-array-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" + integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-byte-offset@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" + integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + has-proto "^1.0.1" + is-typed-array "^1.1.10" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript-compare@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" + integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== + dependencies: + typescript-logic "^0.0.0" + +typescript-logic@^0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" + integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== + +typescript-tuple@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" + integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== + dependencies: + typescript-compare "^0.0.2" + +typescript@latest: + version "5.3.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" + integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ== + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +url-set-query@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" + integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== + +utf-8-validate@5.0.7: + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" + integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== + dependencies: + node-gyp-build "^4.3.0" + +utf-8-validate@^5.0.2: + version "5.0.10" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" + integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== + dependencies: + node-gyp-build "^4.3.0" + +utf8@3.0.0, utf8@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" + integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== + +uuid@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +uuid@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +value-or-promise@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" + integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== + +value-or-promise@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" + integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== + +varint@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" + integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vuvuzela@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" + integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== + +web3-bzz@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.0.tgz#ac74bc71cdf294c7080a79091079192f05c5baed" + integrity sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-bzz@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.3.tgz#13942b37757eb850f3500a8e08bf605448b67566" + integrity sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ== + dependencies: + "@types/node" "^12.12.6" + got "12.1.0" + swarm-js "^0.1.40" + +web3-core-helpers@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz#1016534c51a5df77ed4f94d1fcce31de4af37fad" + integrity sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g== + dependencies: + web3-eth-iban "1.10.0" + web3-utils "1.10.0" + +web3-core-helpers@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz#f2db40ea57e888795e46f229b06113b60bcd671c" + integrity sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA== + dependencies: + web3-eth-iban "1.10.3" + web3-utils "1.10.3" + +web3-core-method@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.0.tgz#82668197fa086e8cc8066742e35a9d72535e3412" + integrity sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.10.0" + web3-core-promievent "1.10.0" + web3-core-subscriptions "1.10.0" + web3-utils "1.10.0" + +web3-core-method@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.3.tgz#63f16310ccab4eec8eca0a337d534565c2ba8d33" + integrity sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q== + dependencies: + "@ethersproject/transactions" "^5.6.2" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-utils "1.10.3" + +web3-core-promievent@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz#cbb5b3a76b888df45ed3a8d4d8d4f54ccb66a37b" + integrity sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg== + dependencies: + eventemitter3 "4.0.4" + +web3-core-promievent@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz#9765dd42ce6cf2dc0a08eaffee607b855644f290" + integrity sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ== + dependencies: + eventemitter3 "4.0.4" + +web3-core-requestmanager@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz#4b34f6e05837e67c70ff6f6993652afc0d54c340" + integrity sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ== + dependencies: + util "^0.12.5" + web3-core-helpers "1.10.0" + web3-providers-http "1.10.0" + web3-providers-ipc "1.10.0" + web3-providers-ws "1.10.0" + +web3-core-requestmanager@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz#c34ca8e998a18d6ca3fa7f7a11d4391da401c987" + integrity sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw== + dependencies: + util "^0.12.5" + web3-core-helpers "1.10.3" + web3-providers-http "1.10.3" + web3-providers-ipc "1.10.3" + web3-providers-ws "1.10.3" + +web3-core-subscriptions@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz#b534592ee1611788fc0cb0b95963b9b9b6eacb7c" + integrity sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.0" + +web3-core-subscriptions@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz#58768cd72a9313252ef05dc52c09536f009a9479" + integrity sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.3" + +web3-core@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.0.tgz#9aa07c5deb478cf356c5d3b5b35afafa5fa8e633" + integrity sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-requestmanager "1.10.0" + web3-utils "1.10.0" + +web3-core@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.3.tgz#4aeb8f4b0cb5775d9fa4edf1127864743f1c3ae3" + integrity sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw== + dependencies: + "@types/bn.js" "^5.1.1" + "@types/node" "^12.12.6" + bignumber.js "^9.0.0" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-requestmanager "1.10.3" + web3-utils "1.10.3" + +web3-core@^4.3.0, web3-core@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.3.2.tgz#f24b11d6a57dee527de8d42c89de2a439f0c4bed" + integrity sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g== + dependencies: + web3-errors "^1.1.4" + web3-eth-accounts "^4.1.0" + web3-eth-iban "^4.0.7" + web3-providers-http "^4.1.0" + web3-providers-ws "^4.0.7" + web3-types "^1.3.1" + web3-utils "^4.1.0" + web3-validator "^2.0.3" + optionalDependencies: + web3-providers-ipc "^4.0.7" + +web3-errors@^1.1.3, web3-errors@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.1.4.tgz#5667a0a5f66fc936e101ef32032ccc1e8ca4d5a1" + integrity sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== + dependencies: + web3-types "^1.3.1" + +web3-eth-abi@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz#53a7a2c95a571e205e27fd9e664df4919483cce1" + integrity sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.10.0" + +web3-eth-abi@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz#7decfffa8fed26410f32cfefdc32d3e76f717ca2" + integrity sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ== + dependencies: + "@ethersproject/abi" "^5.6.3" + web3-utils "1.10.3" + +web3-eth-abi@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.2.0.tgz#398d415e7783442d06fb7939e40ce3de7a3f04e9" + integrity sha512-x7dUCmk6th+5N63s5kUusoNtsDJKUUQgl9+jECvGTBOTiyHe/V6aOY0120FUjaAGaapOnR7BImQdhqHv6yT2YQ== + dependencies: + abitype "0.7.1" + web3-errors "^1.1.4" + web3-types "^1.3.1" + web3-utils "^4.1.1" + web3-validator "^2.0.4" + +web3-eth-accounts@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" + integrity sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q== + dependencies: + "@ethereumjs/common" "2.5.0" + "@ethereumjs/tx" "3.3.2" + eth-lib "0.2.8" + ethereumjs-util "^7.1.5" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-utils "1.10.0" + +web3-eth-accounts@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz#9ecb816b81cd97333988bfcd0afaee5d13bbb198" + integrity sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ== + dependencies: + "@ethereumjs/common" "2.6.5" + "@ethereumjs/tx" "3.5.2" + "@ethereumjs/util" "^8.1.0" + eth-lib "0.2.8" + scrypt-js "^3.0.1" + uuid "^9.0.0" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" + +web3-eth-accounts@^4.1.0, web3-eth-accounts@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-4.1.1.tgz#55225e5510b961e1cacb4eccc996544998e907fc" + integrity sha512-9JqhRi1YhO1hQOEmmBHgEGsME/B1FHMxpA/AK3vhpvQ8QeP6KbJW+cForTLfPpUbkmPxnRunG4PNNaETNlZfrA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + crc-32 "^1.2.2" + ethereum-cryptography "^2.0.0" + web3-errors "^1.1.4" + web3-types "^1.3.1" + web3-utils "^4.1.1" + web3-validator "^2.0.4" + +web3-eth-contract@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz#8e68c7654576773ec3c91903f08e49d0242c503a" + integrity sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w== + dependencies: + "@types/bn.js" "^5.1.1" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-promievent "1.10.0" + web3-core-subscriptions "1.10.0" + web3-eth-abi "1.10.0" + web3-utils "1.10.0" + +web3-eth-contract@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz#8880468e2ba7d8a4791cf714f67d5e1ec1591275" + integrity sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg== + dependencies: + "@types/bn.js" "^5.1.1" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-promievent "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-utils "1.10.3" + +web3-eth-contract@^4.1.2, web3-eth-contract@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-4.2.0.tgz#73f70b19217cd4854211c05846f0c841763b3b29" + integrity sha512-K7bUypsomTs8/Oa0Lgvq5plsSB5afgKJ79NMuXxvC5jfV+AxNrQyKcr5Vd5yEGNqrdQuIPduGQa8DpuY+rMe1g== + dependencies: + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth "^4.4.0" + web3-eth-abi "^4.2.0" + web3-types "^1.3.1" + web3-utils "^4.1.1" + web3-validator "^2.0.4" + +web3-eth-ens@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz#96a676524e0b580c87913f557a13ed810cf91cd9" + integrity sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-promievent "1.10.0" + web3-eth-abi "1.10.0" + web3-eth-contract "1.10.0" + web3-utils "1.10.0" + +web3-eth-ens@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz#ae5b49bcb9823027e0b28aa6b1de58d726cbaafa" + integrity sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ== + dependencies: + content-hash "^2.5.2" + eth-ens-namehash "2.0.8" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-promievent "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-contract "1.10.3" + web3-utils "1.10.3" + +web3-eth-ens@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-4.0.8.tgz#f4e0a018ce6cc69e37007ee92063867feb5994f0" + integrity sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw== + dependencies: + "@adraffy/ens-normalize" "^1.8.8" + web3-core "^4.3.0" + web3-errors "^1.1.3" + web3-eth "^4.3.1" + web3-eth-contract "^4.1.2" + web3-net "^4.0.7" + web3-types "^1.3.0" + web3-utils "^4.0.7" + web3-validator "^2.0.3" + +web3-eth-iban@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" + integrity sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg== + dependencies: + bn.js "^5.2.1" + web3-utils "1.10.0" + +web3-eth-iban@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz#91d458e5400195edc883a0d4383bf1cecd17240d" + integrity sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA== + dependencies: + bn.js "^5.2.1" + web3-utils "1.10.3" + +web3-eth-iban@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz#ee504f845d7b6315f0be78fcf070ccd5d38e4aaf" + integrity sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ== + dependencies: + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + web3-validator "^2.0.3" + +web3-eth-personal@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz#94d525f7a29050a0c2a12032df150ac5ea633071" + integrity sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-net "1.10.0" + web3-utils "1.10.0" + +web3-eth-personal@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz#4e72008aa211327ccc3bfa7671c510e623368457" + integrity sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw== + dependencies: + "@types/node" "^12.12.6" + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-eth-personal@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-4.0.8.tgz#b51628c560de550ca8b354fa784f9556aae6065c" + integrity sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw== + dependencies: + web3-core "^4.3.0" + web3-eth "^4.3.1" + web3-rpc-methods "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + web3-validator "^2.0.3" + +web3-eth@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.0.tgz#38b905e2759697c9624ab080cfcf4e6c60b3a6cf" + integrity sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA== + dependencies: + web3-core "1.10.0" + web3-core-helpers "1.10.0" + web3-core-method "1.10.0" + web3-core-subscriptions "1.10.0" + web3-eth-abi "1.10.0" + web3-eth-accounts "1.10.0" + web3-eth-contract "1.10.0" + web3-eth-ens "1.10.0" + web3-eth-iban "1.10.0" + web3-eth-personal "1.10.0" + web3-net "1.10.0" + web3-utils "1.10.0" + +web3-eth@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.3.tgz#b8c6f37f1aac52422583a5a9c29130983a3fb3b1" + integrity sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA== + dependencies: + web3-core "1.10.3" + web3-core-helpers "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-eth-abi "1.10.3" + web3-eth-accounts "1.10.3" + web3-eth-contract "1.10.3" + web3-eth-ens "1.10.3" + web3-eth-iban "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-utils "1.10.3" + +web3-eth@^4.3.1, web3-eth@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-4.4.0.tgz#755c34a769109836d122a53b33814d63f9ec5a65" + integrity sha512-HswKdzF44wUrciRAtEJaml9O7rDYDxElHmFs+27WcO3nel2zku+n0xs4e2ZAehfrCZ+05/y7TgnOZnaDU8Fb/A== + dependencies: + setimmediate "^1.0.5" + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth-abi "^4.2.0" + web3-eth-accounts "^4.1.1" + web3-net "^4.0.7" + web3-providers-ws "^4.0.7" + web3-rpc-methods "^1.1.4" + web3-types "^1.3.1" + web3-utils "^4.1.1" + web3-validator "^2.0.4" + +web3-net@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.0.tgz#be53e7f5dafd55e7c9013d49c505448b92c9c97b" + integrity sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA== + dependencies: + web3-core "1.10.0" + web3-core-method "1.10.0" + web3-utils "1.10.0" + +web3-net@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.3.tgz#9486c2fe51452cb958e11915db6f90bd6caa5482" + integrity sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg== + dependencies: + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-utils "1.10.3" + +web3-net@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-4.0.7.tgz#ed2c1bd700cf94be93a6dbd8bd8aa413d8681942" + integrity sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow== + dependencies: + web3-core "^4.3.0" + web3-rpc-methods "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + +web3-providers-http@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" + integrity sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA== + dependencies: + abortcontroller-polyfill "^1.7.3" + cross-fetch "^3.1.4" + es6-promise "^4.2.8" + web3-core-helpers "1.10.0" + +web3-providers-http@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.3.tgz#d8166ee89db82d37281ea9e15c5882a2d7928755" + integrity sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw== + dependencies: + abortcontroller-polyfill "^1.7.5" + cross-fetch "^4.0.0" + es6-promise "^4.2.8" + web3-core-helpers "1.10.3" + +web3-providers-http@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-4.1.0.tgz#8d7afda67d1d8542ca85b30f60a3d1fe1993b561" + integrity sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg== + dependencies: + cross-fetch "^4.0.0" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + +web3-providers-ipc@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" + integrity sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.10.0" + +web3-providers-ipc@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz#a7e015957fc037d8a87bd4b6ae3561c1b1ad1f46" + integrity sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA== + dependencies: + oboe "2.1.5" + web3-core-helpers "1.10.3" + +web3-providers-ipc@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz#9ec4c8565053af005a5170ba80cddeb40ff3e3d3" + integrity sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g== + dependencies: + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + +web3-providers-ws@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" + integrity sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.0" + websocket "^1.0.32" + +web3-providers-ws@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz#03c84958f9da251349cd26fd7a4ae567e3af6caa" + integrity sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q== + dependencies: + eventemitter3 "4.0.4" + web3-core-helpers "1.10.3" + websocket "^1.0.32" + +web3-providers-ws@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz#7a78a0dcf077e0e802da524fbb37d080b356c14b" + integrity sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w== + dependencies: + "@types/ws" "8.5.3" + isomorphic-ws "^5.0.0" + web3-errors "^1.1.3" + web3-types "^1.3.0" + web3-utils "^4.0.7" + ws "^8.8.1" + +web3-rpc-methods@^1.1.3, web3-rpc-methods@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web3-rpc-methods/-/web3-rpc-methods-1.1.4.tgz#0b478e38231d3f3260ac504307c6dc4059af6fda" + integrity sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ== + dependencies: + web3-core "^4.3.2" + web3-types "^1.3.1" + web3-validator "^2.0.3" + +web3-shh@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.0.tgz#c2979b87e0f67a7fef2ce9ee853bd7bfbe9b79a8" + integrity sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg== + dependencies: + web3-core "1.10.0" + web3-core-method "1.10.0" + web3-core-subscriptions "1.10.0" + web3-net "1.10.0" + +web3-shh@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.3.tgz#ee44f760598a65a290d611c443838aac854ee858" + integrity sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng== + dependencies: + web3-core "1.10.3" + web3-core-method "1.10.3" + web3-core-subscriptions "1.10.3" + web3-net "1.10.3" + +web3-types@^1.3.0, web3-types@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.3.1.tgz#cf6148ad46b68c5c89714613380b270d31e297be" + integrity sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ== + +web3-utils@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" + integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== + dependencies: + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@1.10.3, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" + integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@^4.0.7, web3-utils@^4.1.0, web3-utils@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.1.1.tgz#88c0fe404abc3f038b7318f3a31141676cefeb63" + integrity sha512-5AOmLKH6QuwHunLCNdVFlPSDE+T88bJYRQP+HWYoKNbI4STALCYQiJvj7LXE+Ed6cPfqANaK/LwKNbMPLCPFwA== + dependencies: + ethereum-cryptography "^2.0.0" + web3-errors "^1.1.4" + web3-types "^1.3.1" + web3-validator "^2.0.4" + +web3-validator@^2.0.3, web3-validator@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.4.tgz#66f34c94f21a3c94d0dc2a2d30deb8a379825d38" + integrity sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== + dependencies: + ethereum-cryptography "^2.0.0" + util "^0.12.5" + web3-errors "^1.1.4" + web3-types "^1.3.1" + zod "^3.21.4" + +web3@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" + integrity sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng== + dependencies: + web3-bzz "1.10.0" + web3-core "1.10.0" + web3-eth "1.10.0" + web3-eth-personal "1.10.0" + web3-net "1.10.0" + web3-shh "1.10.0" + web3-utils "1.10.0" + +web3@^1.2.5: + version "1.10.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.3.tgz#5e80ac532dc432b09fde668d570b0ad4e6710897" + integrity sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw== + dependencies: + web3-bzz "1.10.3" + web3-core "1.10.3" + web3-eth "1.10.3" + web3-eth-personal "1.10.3" + web3-net "1.10.3" + web3-shh "1.10.3" + web3-utils "1.10.3" + +web3@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-4.4.0.tgz#83e5906675608adf9a14841f257e441c9154a8c7" + integrity sha512-WcFA3RgE+cyM96MHLPs5Ec155nkYQuwhjk3JIhxcy6J1QrZK2zvKGzTQCCYHe3JhraduNTMbWy+EeNNGGji9+Q== + dependencies: + web3-core "^4.3.2" + web3-errors "^1.1.4" + web3-eth "^4.4.0" + web3-eth-abi "^4.2.0" + web3-eth-accounts "^4.1.1" + web3-eth-contract "^4.2.0" + web3-eth-ens "^4.0.8" + web3-eth-iban "^4.0.7" + web3-eth-personal "^4.0.8" + web3-net "^4.0.7" + web3-providers-http "^4.1.0" + web3-providers-ws "^4.0.7" + web3-rpc-methods "^1.1.4" + web3-types "^1.3.1" + web3-utils "^4.1.1" + web3-validator "^2.0.4" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== + dependencies: + bufferutil "^4.0.1" + debug "^2.2.0" + es5-ext "^0.10.50" + typedarray-to-buffer "^3.1.5" + utf-8-validate "^5.0.2" + yaeti "^0.0.6" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== + +which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-stream@~0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" + integrity sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A== + dependencies: + readable-stream "~0.0.2" + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +ws@^3.0.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +ws@^7.2.0: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.8.1: + version "8.16.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" + integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== + +xhr-request-promise@^0.1.2: + version "0.1.3" + resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" + integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== + dependencies: + xhr-request "^1.1.0" + +xhr-request@^1.0.1, xhr-request@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" + integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== + dependencies: + buffer-to-arraybuffer "^0.0.5" + object-assign "^4.1.1" + query-string "^5.0.1" + simple-get "^2.7.0" + timed-out "^4.0.1" + url-set-query "^1.0.0" + xhr "^2.0.4" + +xhr@^2.0.4, xhr@^2.3.3: + version "2.6.0" + resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" + integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== + dependencies: + global "~4.4.0" + is-function "^1.0.1" + parse-headers "^2.0.0" + xtend "^4.0.0" + +xmlhttprequest@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== + +xss@^1.0.8: + version "1.0.14" + resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" + integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== + dependencies: + commander "^2.20.3" + cssfilter "0.0.10" + +xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yaeti@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" + integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== + +yallist@^3.0.0, yallist@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.21.4: + version "3.22.4" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" + integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From c3f40c49de40239c46085e07ea4af30d26e45da1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:14:16 +0100 Subject: [PATCH 093/149] feat: support concurrent migrations --- migrations/scripts/1_deployer.js | 21 +- migrations/scripts/2_libs.js | 18 +- migrations/scripts/3_core.js | 38 +- migrations/scripts/4_proxies.js | 26 +- migrations/scripts/5_apps.js | 30 +- migrations/witnet.addresses.json | 1610 +++++++++++++----------------- package.json | 1 + src/index.js | 19 +- src/utils/index.js | 28 +- 9 files changed, 797 insertions(+), 994 deletions(-) diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index b523ab6f0..f737fd702 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -1,30 +1,23 @@ -const addresses = require("../witnet.addresses") const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") -module.exports = async function (deployer, network, [, from,, master]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - +module.exports = async function (deployer, network, [, from,, master]) { + const addresses = await utils.readAddresses(network) let factory - if (utils.isNullAddress(addresses[ecosystem][network]?.WitnetDeployer)) { + if (utils.isNullAddress(addresses?.WitnetDeployer)) { await deployer.deploy(WitnetDeployer, { from: master }) factory = await WitnetDeployer.deployed() - addresses[ecosystem][network].WitnetDeployer = factory.address + addresses.WitnetDeployer = factory.address } else { - factory = await WitnetDeployer.at(addresses[ecosystem][network].WitnetDeployer) + factory = await WitnetDeployer.at(addresses.WitnetDeployer) WitnetDeployer.address = factory.address utils.traceHeader("Skipped 'WitnetDeployer'") console.info(" > Contract address:", factory.address) console.info() } - if (!isDryRun) { - utils.saveAddresses(addresses) + if (!utils.isDryRun(network)) { + await utils.saveAddresses(network, addresses) } } diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 29d1239e2..928df6124 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,13 +4,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - const addresses = require("../witnet.addresses") - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + const addresses = await utils.readAddresses(network); const targets = settings.getArtifacts(network); const libs = [ @@ -23,7 +17,7 @@ module.exports = async function (_, network, [, from]) { for (const index in libs) { const key = libs[index] const artifact = artifacts.require(key) - if (utils.isNullAddress(addresses[ecosystem][network][key])) { + if (utils.isNullAddress(addresses[key])) { utils.traceHeader(`Deploying '${key}'...`) const libInitCode = artifact.toJSON().bytecode const libAddr = await deployer.determineAddr.call(libInitCode, "0x0", { from }) @@ -32,7 +26,7 @@ module.exports = async function (_, network, [, from]) { const tx = await deployer.deploy(libInitCode, "0x0", { from }) utils.traceTx(tx) if ((await web3.eth.getCode(libAddr)).length > 3) { - addresses[ecosystem][network][key] = libAddr + addresses[key] = libAddr } else { console.info(`Error: Library was not deployed on expected address: ${libAddr}`) process.exit(1) @@ -40,12 +34,12 @@ module.exports = async function (_, network, [, from]) { } else { utils.traceHeader(`Skipped '${key}'`) } - artifact.address = addresses[ecosystem][network][key] + artifact.address = addresses[key] console.info(" ", "> library address: ", artifact.address) console.info(" ", "> library codehash: ", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) console.info() - if (!isDryRun) { - utils.saveAddresses(addresses) + if (!utils.isDryRun(network)) { + await utils.saveAddresses(network, addresses) } } } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 6dfdc3dc9..645eb446d 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -1,4 +1,3 @@ -const addresses = require("../witnet.addresses") const ethUtils = require("ethereumjs-util") const settings = require("../../settings") const utils = require("../../src/utils") @@ -11,21 +10,16 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + const isDryRun = utils.isDryRun(network);//network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const addresses = await utils.readAddresses(network); const specs = settings.getSpecs(network); const targets = settings.getArtifacts(network); // Deploy/upgrade WitnetBytecodes target implementation, if required await deploy({ + addresses, from, - ecosystem, - network, targets, key: targets.WitnetBytecodes, libs: specs.WitnetBytecodes.libs, @@ -38,14 +32,11 @@ module.exports = async function (_, network, [, from]) { ], }, }) - if (!isDryRun) { - utils.saveAddresses(addresses) - } + // Deploy/upgrade WitnetRequestFactory target implementation, if required await deploy({ + addresses, from, - ecosystem, - network, targets, key: targets.WitnetRequestFactory, libs: specs.WitnetRequestFactory.libs, @@ -60,14 +51,11 @@ module.exports = async function (_, network, [, from]) { ], }, }) - if (!isDryRun) { - utils.saveAddresses(addresses) - } + // Deploy/upgrade WitnetRequestBoard target implementation, if required await deploy({ + addresses, from, - ecosystem, - network, targets, key: targets.WitnetRequestBoard, libs: specs.WitnetRequestBoard.libs, @@ -82,15 +70,17 @@ module.exports = async function (_, network, [, from]) { ], }, }) + + // save addresses file if required if (!isDryRun) { - utils.saveAddresses(addresses) + await utils.saveAddresses(network, addresses) } } async function deploy (specs) { - const { from, ecosystem, network, key, libs, intrinsics, immutables, targets } = specs + const { addresses, from, key, libs, intrinsics, immutables, targets } = specs const contract = artifacts.require(key) - if (utils.isNullAddress(addresses[ecosystem][network][key])) { + if (utils.isNullAddress(addresses[key])) { utils.traceHeader(`Deploying '${key}'...`) console.info(" ", "> account: ", from) console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") @@ -114,7 +104,7 @@ async function deploy (specs) { const tx = await deployer.deploy(coreInitCode, "0x0", { from }) utils.traceTx(tx) if ((await web3.eth.getCode(coreAddr)).length > 3) { - addresses[ecosystem][network][key] = coreAddr + addresses[key] = coreAddr } else { console.info(`Error: Contract was not deployed on expected address: ${coreAddr}`) process.exit(1) @@ -122,7 +112,7 @@ async function deploy (specs) { } else { utils.traceHeader(`Skipped '${key}'`) } - contract.address = addresses[ecosystem][network][key] + contract.address = addresses[key] console.info(" ", "> contract address: ", contract.address) console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(contract.address))) console.info() diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 0a7d4a55a..aed285359 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -1,4 +1,3 @@ -const addresses = require("../witnet.addresses") const ethUtils = require("ethereumjs-util") const { merge } = require("lodash") const settings = require("../../settings") @@ -8,13 +7,9 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") module.exports = async function (_, network, [, from, reporter]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} - + const isDryRun = utils.isDryRun(network);//network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + + const addresses = await utils.readAddresses(network); const targets = settings.getArtifacts(network); const specs = settings.getSpecs(network); @@ -34,21 +29,20 @@ module.exports = async function (_, network, [, from, reporter]) { // Deploy/upgrade singleton proxies, if required for (const index in singletons) { await deploy({ + addresses, from, - ecosystem, - network, specs, targets, key: singletons[index], }) if (!isDryRun) { - utils.saveAddresses(addresses) + await utils.saveAddresses(network, addresses) } } } async function deploy (target) { - const { from, ecosystem, network, key, specs, targets } = target + const { addresses, from, key, specs, targets } = target const mutables = specs[key].mutables const proxy = artifacts.require(key) @@ -56,7 +50,7 @@ async function deploy (target) { ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(specs[key].vanity), 32).toString("hex") : "0x0" - if (utils.isNullAddress(addresses[ecosystem][network][key])) { + if (utils.isNullAddress(addresses[key])) { utils.traceHeader(`Deploying '${key}'...`) console.info(" ", "> account: ", from) console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") @@ -90,13 +84,13 @@ async function deploy (target) { } } if ((await web3.eth.getCode(proxyAddr)).length > 3) { - addresses[ecosystem][network][key] = proxyAddr + addresses[key] = proxyAddr } else { console.info(`Error: Contract was not deployed on expected address: ${proxyAddr}`) process.exit(1) } } else { - const oldAddr = await getProxyImplementation(from, addresses[ecosystem][network][key]) + const oldAddr = await getProxyImplementation(from, addresses[key]) const oldImpl = await artifacts.require(targets[key]).at(oldAddr) const newImpl = await artifacts.require(targets[key]).deployed() if (oldAddr !== newImpl.address) { @@ -124,7 +118,7 @@ async function deploy (target) { utils.traceHeader(`Skipped '${key}'`) } } - proxy.address = addresses[ecosystem][network][key] + proxy.address = addresses[key] 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))) diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 9ab708c55..69c3e4ab9 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -1,4 +1,3 @@ -const addresses = require("../witnet.addresses") const ethUtils = require("ethereumjs-util") const settings = require("../../settings") const utils = require("../../src/utils") @@ -6,22 +5,17 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [,,, from]) { - const isDryRun = network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - const ecosystem = utils.getRealmNetworkFromArgs()[0] - network = network.split("-")[0] - - if (!addresses[ecosystem]) addresses[ecosystem] = {} - if (!addresses[ecosystem][network]) addresses[ecosystem][network] = {} + const isDryRun = utils.isDryRun(network); + const addresses = await utils.readAddresses(network); const specs = settings.getSpecs(network); const targets = settings.getArtifacts(network); // Deploy the WitnetPriceFeeds oracle, if required { await deploy({ + addresses, from, - ecosystem, - network, targets, key: targets.WitnetPriceFeeds, libs: specs.WitnetPriceFeeds.libs, @@ -35,14 +29,12 @@ module.exports = async function (_, network, [,,, from]) { ], }, }) - if (!isDryRun) utils.saveAddresses(addresses) } // Deploy the WitnetRandomness oracle, if required { await deploy({ + addresses, from, - ecosystem, - network, targets, key: targets.WitnetRandomness, libs: specs.WitnetRandomness?.libs, @@ -56,15 +48,19 @@ module.exports = async function (_, network, [,,, from]) { ], }, }) - if (!isDryRun) utils.saveAddresses(addresses) + } + + // save addresses file if required + if (!isDryRun) { + await utils.saveAddresses(network, addresses) } } async function deploy (specs) { - const { from, ecosystem, network, key, libs, intrinsics, immutables, targets, vanity } = specs + const { addresses, from, key, libs, intrinsics, immutables, targets, vanity } = specs const artifact = artifacts.require(key) const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" - if (utils.isNullAddress(addresses[ecosystem][network][key])) { + if (utils.isNullAddress(addresses[key])) { utils.traceHeader(`Deploying '${key}'...`) const deployer = await WitnetDeployer.deployed() let { types, values } = intrinsics @@ -88,7 +84,7 @@ async function deploy (specs) { const tx = await deployer.deploy(dappInitCode, salt, { from }) utils.traceTx(tx) if ((await web3.eth.getCode(dappAddr)).length > 3) { - addresses[ecosystem][network][key] = dappAddr + addresses[key] = dappAddr // save/overwrite exportable abi file utils.saveJsonArtifact(key, artifact) } else { @@ -99,7 +95,7 @@ async function deploy (specs) { } else { utils.traceHeader(`Skipped '${key}'`) } - artifact.address = addresses[ecosystem][network][key] + artifact.address = addresses[key] console.info(" ", "> contract address: ", artifact.address) console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) console.info() diff --git a/migrations/witnet.addresses.json b/migrations/witnet.addresses.json index 0c8ffa9cc..c976a5d67 100644 --- a/migrations/witnet.addresses.json +++ b/migrations/witnet.addresses.json @@ -1,908 +1,710 @@ { "default": { - "ethereum.goerli": { - "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x1cF3Aa9DBF4880d797945726B94B9d29164211BE", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xb58D05247d16b3F1BD6B59c52f7f61fFef02BeC8", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRandomnessImplementationV061": "0x6Eb87EcCe6218Cd0e97299331D2aa5d2e53da5cD", - "WitnetRequestBoardImplementation": "0x0e86a89D9Ae5D6182a853375F19dB23e5c600268", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" - }, - "ethereum.sepolia": { - "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomness": "0x012345000Db5417269d8c70B0142Ae3eF36d7f3e", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", - "WitnetEncodingLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", - "WitnetPriceFeedsImplementation": "0x7a56A80A9B169c046EdD1d8f584455a394bc9C71", - "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" - }, - "ethereum.mainnet": { - "WitnetBytecodes": "0xB8CdB2577dA632a77D6b90526aB53Eb5694Ed2D1", - "WitnetBytecodesImplementation": "", - "WitnetEncodingLib": "", - "WitnetLib": "0xaD18Fd3CC724A11c2B0D8cc7f1B108d8A3388416", - "WitnetPriceRouter": "0x83A757eAe821Ad7B520D9A74952337138A80b2AF", - "WitnetRandomness": "0x894907c7Ab64C1092620B5c8Ba039BB6E611eba8", - "WitnetRequestBoard": "0x9E4fae1c7ac543a81E4E2a5486a0dDaad8194bdA", - "WitnetRequestFactory": "0xdABE9E1B328d5Dd6b96271e5562ee3f7D8D035c4", - "WitnetRequestFactoryImplementation": "0xBfe9473720CC8DCa9615b8B6CFE228C7e1089396" - } - }, - "arbitrum": { - "arbitrum.goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xAafb2D27E2E0f83dcE501a2879aaD710ec377403", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xa6a6b2cBE9Ce5B8fF94729F1eC402efc5042AbBF", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", - "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", - "WitnetRandomnessImplementationV061": "0xB0C5d40A7658b2ab28360aFa6eB5bAeb2fFe86c3", - "WitnetRequestBoardImplementation": "0x7ab66AB288A143D4e07Aff9b729165bFb71DB73a", - "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2", - "WitnetPriceFeedsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "arbitrum.one": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetRequestRandomness": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - } - }, - "avalanche": { - "avalanche.testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x99Af0CF37d1C6b9Bdfe33cc0A89C00D97D3c42F4", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", - "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRandomnessImplementationV061": "0xD47fc24C99fD94f33bD2f33FE373b1447bB10724", - "WitnetRequestBoardImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "avalanche.mainnet": { - "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetPriceRouter": "0xBaaF31F4AAc5ab5334b6E239a83bf4E855C55ea7", - "WitnetRandomness": "0xa4A73a2A32320282a4d7dDe6a7467AeFA3B7950F", - "WitnetRequestBoard": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079" - } - }, - "boba": { - "boba.bnb.testnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x8D20457d968c937b7cb65be6B8cC766613fBcF28", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x5c1dD29563203883A5D5C3136783D3119B2C4e57", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", - "WitnetRandomnessImplementation": "0x08a6a53B8bCE95677fFA85813C32Bb8228cd114c", - "WitnetRequestBoardImplementation": "0x276Da4D5720EFaD1fBE417d27BD838707e61ba8C", - "WitnetRequestFactoryImplementation": "0xce66333c9D7BE37D61d3c5b57D6D41ff082Ca92f" - }, - "boba.bnb.mainnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xc45c93083F7B97Cdb700D4D2ADE6a727E04793ff", - "WitnetRandomnessImplementation": "0xC467B6E0F700D3E044C9F20BB76957eEC0B33c8C", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRequestRandomness": "0xA99B485363DBAe90D17B10F988C4e1Ae895048e0" - }, - "boba.ethereum.goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomnessImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "boba.ethereum.mainnet": { - "WitnetLib": "0x6473063EBEabC0606A4159b7d9F79BB306ED0D2A", - "WitnetPriceRouter": "0x93f61D0D5F623144e7C390415B70102A9Cc90bA5", - "WitnetRandomness": "0x3D7Ccf6518deBE3d2fd20c4b6AEc3FD904c0Ad29", - "WitnetRequestBoard": "0xd3AD9a4b26527E3bA5Fc60B75Eb002D47D98e292" - } - }, - "celo": { - "celo.alfajores": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x6f8A7E2bBc1eDb8782145cD1089251f6e2C738AE", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x99a0B5eb260Fe3BfcF9d658850e3dD6d6B69183A", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x364E2b91a4C7563288C3ccF7256BA172935CC550", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x654B79823f244c2476907F21EBD20cFebC04D0A5", - "WitnetRandomnessImplementation": "0xFB36b14df6D319A5A7F418C80b0700664A4f9e6a", - "WitnetRandomnessImplementationV061": "0xbD804467270bCD832b4948242453CA66972860F5", - "WitnetRequestBoardImplementation": "0xe381f706f2932049A844791f41b2863884c4e6CA", - "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "celo.mainnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x931673904eB6E69D775e35F522c0EA35575297Cb", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x03E709E6422E30C033456FCde38C70A12553E468", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x760C146699B76c84Cc8050f57728F2Dc374cbf25", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x76ffF94D527504e90DaCB12d710590ba8227299E", - "WitnetRandomnessImplementation": "0x6Af31B632A20185ff96FC47a8576a6980Cd99FEC", - "WitnetRandomnessImplementationV061": "0x6023fF93A3b37791a94B15D6AEaD488933b01Db3", - "WitnetRequestBoardImplementation": "0x5A13430A283701BE24cE7E1712B38F31d4B9ac58", - "WitnetRequestFactoryImplementation": "0x0d13c6058DDE86da77565ED6038C065Af71e9208" - } - }, - "conflux": { - "conflux.core.testnet": { - "WitnetProxy": "0x8E077eBf150a5f09e26805F1CB1d14671834b63A", - "Create2Factory": "0x8644e9b7306cD4e6E5a3dB2aA7DFDE2744eAE676", - "WitnetBytecodes": "0x8E6AEaC77a18DF3e90B1446BB2210013A331Cb12", - "WitnetPriceFeeds": "0x8FDD679F4D1d2bfb97B5e5fD90c8E3E6ce0ce75c", - "WitnetPriceRouter": "0x8F61C7b18F69bB87D6151B8a5D733E1945ea6c25", - "WitnetRandomness": "0x882D16154E7190eDA27ed4CE6606d204Aa70EC90", - "WitnetRequestBoard": "0x8aB653B73a0e0552dDdce8c76F97c6AA826EFbD4", - "WitnetRequestFactory": "0x83eFF90a51D7da324AE1580eab6Ee0c9D45ad509", - "WitnetErrorsLib": "0x8d5Fda8c48dF35f321301e69c3c605AABCA474b1", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x81f3EB9a7853F8e1357f6BB61E7BB610F73605F1", - "WitnetRandomnessImplementationV061": "0x887bC8Db7D91413D1575071925Ee8d77fE2CBc81", - "WitnetRequestBoardImplementation": "0x8d19a968CeAA0d31cD9E0434574C8dC5710ddBac", - "WitnetRequestFactoryImplementation": "0x89a49b46864049b16dFcf185740Ac89Eec8Fd670", - "WitnetPriceFeedsLib": "0x87cA78592Cb691BA3a1919c2d83Ed578e8E0Ae0a" - }, - "conflux.core.mainnet": { - "WitnetLib": "0x8A026e6956B4DB3E81bb113401798e59cFBEA4C6", - "WitnetPriceRouter": "0x806c8dFd322EE2d52b188CC472e0814F64304C32", - "WitnetRandomness": "0x8C3824A9A6C3F5B0ac107E2c7dBc8d88c14aF6D9", - "WitnetRequestBoard": "0x84C708bfd79bBC83Ad8753dAb1852EfE9D6712CC" - }, - "conflux.espace.testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x49C0BCce51a8B28f92d008394F06d5B259657F33", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x0C4be6AA667df48de54BA174bE7948875fdf152B", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", - "WitnetRandomnessImplementationV061": "0xa784093826e2894Ab3Db315f4e05F0F26407BBfF", - "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" - }, - "conflux.espace.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "cronos": { - "cronos.testnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xB1Ee13a85B2593D5191f3a2A08f175b1c918B9bb", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7538f6Bff94B0F7F0A0802376238Aab0D2528521", - "WitnetRandomnessImplementation": "0xe145A4D3335D5F78d7e9cB6a3C1832155cB4Be01", - "WitnetRandomnessImplementationV061": "0x0017A464A86f48B342Cae3b8Fe29cFCDaA7b0643", - "WitnetRequestBoardImplementation": "0x3093731aECf4d9Be53b153E27A36D2E02647479F", - "WitnetRequestFactoryImplementation": "0xA8767A6EA3099De344499B35f725A38E3cD15562" - }, - "cronos.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x3737be6FcFf5B3B0f9DCc9a9ae1Da56561D0d0d3", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "cube": { - "cube.testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "cube.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "dogechain": { - "dogechain.testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomnessImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", - "WitnetRandomnessImplementationV061": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetRequestBoardImplementation": "0xb6E0e5a64C7c02Fa477A5254dca35ED967570DF5", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "dogechain.mainnet": { - "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetPriceRouter": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", - "WitnetRandomness": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", - "WitnetRequestBoard": "0xF2712e7114A237625EFC8bBA6a6ed1Bb8b6029c9" - } - }, - "elastos": { - "elastos.testnet": { - "WitnetProxy": "0x840bafDC40D88F54Db41327fe1C85241f9151243", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xEdb5535994bF19d56c30F5BEa0937232E198F671", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xC1266fA3D24f5d63E2e34633b3F829E9156be0d6", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdA489690BDfd6e4d76DE3b937f40342bAd281bc9", - "WitnetRandomnessImplementation": "0x83587BcfD1f75B5D08c4e27F098F99783cc693cb", - "WitnetRandomnessImplementationV079": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", - "WitnetRequestBoardImplementation": "0xfC62b6B0ec3eCF1Fa031B31b468be51E025a36f1", - "WitnetRequestFactoryImplementation": "0x4779A692aC089E02FD1301B0b53Fa1a02985a83F" - }, - "elastos.mainnet": { - "WitnetProxy": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x0Aa147F25CE8BfaA4E6B4B2CCa91f595bD732CD4", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x79c27c0555C95DBfd38e97023c3257376aaa154d", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", - "WitnetRequestRandomness": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", - "WitnetPriceFeedsLib": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D" - } - }, - "fuse": { - "fuse.testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x123a7AcE0879C4645b19A69c2ba8B3E4d01fBfD6", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xEeA1423D8cAf1e9440495842613Ec042046065aC", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x3280539A77C578C3eF698f53f29CDba00eC9B72E", - "WitnetRandomnessImplementation": "0x1e7e21B4b1102cf3b8bD5e110bbBdc80D43A9dEa", - "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", - "WitnetRequestFactoryImplementation": "0x83e8f5B6D4D94CAC5943689616B96786c2465c9A" - } - }, - "gnosis": { - "gnosis.testnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xA8767A6EA3099De344499B35f725A38E3cD15562", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x9F026F081b5E1f60d583CE380f30A0a4eF0AB97a", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x69891cE36F6dFbef4A7BdD0E95A15CBA916f206b", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRandomnessImplementation": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", - "WitnetRandomnessImplementationv079": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRequestBoardImplementation": "0xF58115533e681295CC1F07A135539E72c5116855", - "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" - } - }, - "kava": { - "kava.testnet": { - "WitnetProxy": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0xA9cC3101735b248964e90fA8506219A9CF0b1091", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x8684d396366C21AA01B120F69df2070f840aC134", - "WitnetRequestFactoryImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF" - }, - "kava.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "kcc": { - "kcc.testnet": { - "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xba7CF62498340fa3734EC51Ca8A69928F0d9E03a", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomnessImplementation": "0x98DbB216138aA6a0b3ff2ae9bBdeC254398E5B2E", - "WitnetRandomnessImplementationV061": "0x76c72518060952FAec3f90666F047e39E3333f7E", - "WitnetRequestBoardImplementation": "0xeF262eCBF9c61A0e71688D90d8fe75B0C3a48901", - "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" - }, - "kcc.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "klaytn": { - "klaytn.testnet": { - "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomnessImplementation": "0xd6d4B24219751A7725ce972E68B1067Ee57CC85a", - "WitnetRandomnessImplementationV061": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" - }, - "klaytn.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "mantle": { - "mantle.testnet": { - "WitnetProxy": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", - "WitnetRandomnessImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", - "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", - "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2" - }, - "mantle.mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "0x3eA2fa27D997A938925299f91e49215218Ec4f7d", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - } - }, - "meter": { - "meter.testnet": { - "WitnetProxy": "0xc6BdB5fd0113358Aaa6e9B56D6bA3A689cAbf65C", - "Create2Factory": "0x2d9dD590b8ebfEe76285f4398dC718D687A4B3e2", - "WitnetBytecodes": "0x1C116937844d705C4b0252C5340D4281C5D8D555", - "WitnetPriceFeeds": "0x7BBA94e4f3a596AD0E528e51d49CaD789Bd6a22D", - "WitnetPriceRouter": "0xBbDB82a16d7b66bb076879f766042b914F1C7572", - "WitnetRandomness": "0x8D416B786Ae7F5c583df36a6952E53834BDFf386", - "WitnetRequestBoard": "0xF99883aa51Fb76E37De6aC37854230d2337D2752", - "WitnetRequestFactory": "0x693cC8829Cb9AC14F75E6EbE5878652817C9e6a4", - "WitnetErrorsLib": "0x34AD22616E4FfED3EB1e9580C9D7156E1bF8ea7C", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xaB7FEec38465EA6E1Cf216E188F3Bd11355824dc", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xD62848a74c0d08BA233D625d8691ea5Fee7d7719", - "WitnetRandomnessImplementation": "0xde9988f1397C0a7D4887707ec8A2Ea265D4E0572", - "WitnetRandomnessImplementationV061": "0xa254632ae454bae18ff0221c2040aa387f044f0e", - "WitnetRequestBoardImplementation": "0x7a624e7742F7A26f7BddDde06Ad7d9e7A6804298", - "WitnetRequestFactoryImplementation": "0xf1fb7170cB8832213Fb4C506f883bca0a910861D" - }, - "meter.mainnet": { - "WitnetLib": "0x60507Ef497EC61d407cD6Fa1c65FE820620bfA88", - "WitnetPriceRouter": "0xA0Ea8C99159843afdAE9eD092E8eaec0368e8A20", - "WitnetRandomness": "0xE189B1D26dAAB45cd344452f29Db8E93B5C7FaF1", - "WitnetRequestBoard": "0x4e645446799776B9670D18E1ecBCad059987eaCa" - } - }, - "metis": { - "metis.goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xc229345B9B95515C69A64842182e37cAdB52A00d", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x4a0264714E368A6888c5D755F47Bd924549Fd625", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", - "WitnetRandomnessImplementation": "0x4326d5b067EC4Bb5c2F71909E278Def8e4906B19", - "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0x7833F9B08F4236D77ec6287d667F533bc2F1c1EE", - "WitnetRequestFactoryImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08" - }, - "metis.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0xB280e3B785f615C000A8BeBb55C35eCD2376F2eb", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "moonbeam": { - "moonbeam.moonbase": { - "WitnetProxy": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x02Cd4089679EAA9431a88170fd784e7dE78A2425", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x2163DBCBdbBeC066EF8d8Adab75Af8b0B9A5cfAA", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6f0da7F65Aaa090C48B371ADEfA1997e4e3cE39a", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", - "WitnetRandomnessImplementation": "0xcf9F6DD90221d5A23a6c4E2252bF690acdf6eedC", - "WitnetRandomnessImplementationv079": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetRequestBoardImplementation": "0xCA9e7861643febcEa7C657eA8F012645D6acceC4", - "WitnetRequestFactoryImplementation": "0x6395d83C9Aa803498980A5ab78217785d4db7bE7" - }, - "moonbeam.moonriver": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "moonbeam.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "okxchain": { - "okxchain.testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "okxchain.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "optimism": { - "optimism.goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x0985FDe9f424fe4f5AC516F66bAf5591e18aCBEb", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRandomnessImplementation": "0x12E5FBdaB02cC2336114353CA7BE9e2cc8E4Cc25", - "WitnetRandomnessImplementationV061": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "optimism.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } - }, - "polygon": { - "polygon.goerli": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0xF9bC9c1d66e4B28F56069c98A8c5373ec0200a25", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x6d5544ca5b35bf2e7a78ace4E7B8d191fe5C9FAb", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xA7389B84D6ABC46b40e88aAD2bbDAf9921649E9E", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xA149B0ED1D7d506AAB4B48275B9F761336aD916A", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x632147c657743906F332EB05E5C775B738254e1b", - "WitnetRandomnessImplementation": "0xD7C67eA4BFB2e85b5a8a07E295c640F2d1811e41", - "WitnetRandomnessImplementationv079": "0x24Cc52D0603F161E16c3DB29Da4c2bCc07d17C4b", - "WitnetRequestBoardImplementation": "0x2bD210b8193780A9A74A2864E6Eb007745244092", - "WitnetRequestFactoryImplementation": "0x5Acb0fEf96A307660c6B2fBdB271af12Dcdb3E68" - }, - "polygon.mainnet": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x3806311c7138ddF2bAF2C2093ff3633E5A73AbD4", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", - "WitnetRandomnessImplementation": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetRandomnessImplementationv061": "0xc8c0d4dB2D7801D6E2A863934597cFD31689f7D5", - "WitnetRequestBoardImplementation": "0xF395CEeb77cE9cDc44Fd276bE5Ff307B1902D3f7", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - }, - "polygon.zkevm.goerli": { - "WitnetProxy": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xc2462eE5d9F8C70f3E0C4CE5881dFFF291Ff2205", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRandomnessV079": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", - "WitnetEncodingLib": "0x6D198FC7F1573E3bf4AEd1f9307fff6b2A05e38e", - "WitnetPriceFeedsLib": "0xFB2A291CaE095a63f50846a63aE729506A3D1C40", - "WitnetBytecodesImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", - "WitnetPriceFeedsImplementation": "0xA14a1fD9b1C6023f87f3A7E97DbdFdf1a9413D0A", - "WitnetRandomnessImplementation": "0x89A0EF4eDEEfA128931b353bdf494Bad97a3D448", - "WitnetRandomnessImplementationV079": "0x3f189fAc162d3CC6d84EF72c8177afAd8f3DBeE1", - "WitnetRequestBoardImplementation": "0x49030E216d49Fbf443CBe3692De5A6B97AEcFFCA", - "WitnetRequestFactoryImplementation": "0xB740E58D185558FF4FaaBf430fc87a6801208f38" - }, - "polygon.zkevm.mainnet": { - "WitnetProxy": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xb99FA0430C73E7B82604Aa99d351d6aFdCe46A16", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", - "WitnetEncodingLib": "0x9a83a23066766991E6cA113eB425fFe806f62ecF", - "WitnetPriceFeedsLib": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetBytecodesImplementation": "0xD038E50cD189BF94CC0393C19606688A38D63D77", - "WitnetPriceFeedsImplementation": "0xe936a946FA591eCed937996Ef3df5c89d59f4dbb", - "WitnetRandomnessImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRequestBoardImplementation": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", - "WitnetRequestFactoryImplementation": "0x5FB499336aee67EC1183F49A8265CC3E2599C2ae" - } - }, - "reef": { - "reef.testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "", - "WitnetRandomness": "", - "WitnetRequestBoard": "", - "WitnetRequestFactory": "", - "WitnetRequestRandomness": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "reef.mainnet": { - "WitnetParserLib": "0xD3e5A6F4653C5D596d16c947cfA30973C5aa9f34", - "WitnetPriceRouter": "0xa22AbF47Fd1eDDf7C0967C9d7fF06FB3c42B26E2", - "WitnetRandomness": "0x03e82c280ae03af908edb250d3d187db0018e501", - "WitnetRequestBoard": "0x61E11e5f496936Ef7f9600f6D1E81b1E7c12b172" - } - }, - "scroll": { - "scroll.sepolia": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", - "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" - }, - "scroll.mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", - "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", - "WitnetBytecodesImplementation": "0x5832e99368877a63dd1c2cea941C2b43E1F6b16A", - "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "0x0e4F5763f417BB13AF759da4d36af50d13F02730", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - } - }, - "syscoin": { - "syscoin.testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRandomness": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "syscoin.mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "syscoin.rollux.testnet": { - "WitnetProxy": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomnessImplementation": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetRequestBoardImplementation": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetRequestFactoryImplementation": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93" - } - }, - "ultron": { - "ultron.testnet": { - "WitnetProxy": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865", - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", - "WitnetRandomnessImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", - "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "ultron.mainnet": { - "WitnetParserLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - } + "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", + "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", + "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", + "WitnetRandomness": "0x012345000Db5417269d8c70B0142Ae3eF36d7f3e", + "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", + "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63" + }, + "arbitrum:goerli": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xAafb2D27E2E0f83dcE501a2879aaD710ec377403", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0xa6a6b2cBE9Ce5B8fF94729F1eC402efc5042AbBF", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", + "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", + "WitnetRandomnessImplementationV061": "0xB0C5d40A7658b2ab28360aFa6eB5bAeb2fFe86c3", + "WitnetRequestBoardImplementation": "0x7ab66AB288A143D4e07Aff9b729165bFb71DB73a", + "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2", + "WitnetPriceFeedsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" + }, + "arbitrum:one": { + "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", + "WitnetPriceRouter": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", + "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", + "WitnetRequestRandomness": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "", + "WitnetRandomnessImplementation": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" + }, + "avalanche:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0x99Af0CF37d1C6b9Bdfe33cc0A89C00D97D3c42F4", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", + "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", + "WitnetRandomnessImplementationV061": "0xD47fc24C99fD94f33bD2f33FE373b1447bB10724", + "WitnetRequestBoardImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", + "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" + }, + "avalanche:mainnet": { + "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetPriceRouter": "0xBaaF31F4AAc5ab5334b6E239a83bf4E855C55ea7", + "WitnetRandomness": "0xa4A73a2A32320282a4d7dDe6a7467AeFA3B7950F", + "WitnetRequestBoard": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079" + }, + "boba:bnb:testnet": { + "WitnetProxy": "0xc71A87657b13A370594967A04b4301a3AcEAF007", + "WitnetPriceRouter": "0x8D20457d968c937b7cb65be6B8cC766613fBcF28", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetErrorsLib": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x5c1dD29563203883A5D5C3136783D3119B2C4e57", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", + "WitnetRandomnessImplementation": "0x08a6a53B8bCE95677fFA85813C32Bb8228cd114c", + "WitnetRequestBoardImplementation": "0x276Da4D5720EFaD1fBE417d27BD838707e61ba8C", + "WitnetRequestFactoryImplementation": "0xce66333c9D7BE37D61d3c5b57D6D41ff082Ca92f" + }, + "boba:bnb:mainnet": { + "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", + "WitnetPriceRouter": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D", + "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xc45c93083F7B97Cdb700D4D2ADE6a727E04793ff", + "WitnetRandomnessImplementation": "0xC467B6E0F700D3E044C9F20BB76957eEC0B33c8C", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", + "WitnetRequestRandomness": "0xA99B485363DBAe90D17B10F988C4e1Ae895048e0" + }, + "boba:ethereum:goerli": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetRandomnessImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", + "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRequestBoardImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", + "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" + }, + "boba:ethereum:mainnet": { + "WitnetLib": "0x6473063EBEabC0606A4159b7d9F79BB306ED0D2A", + "WitnetPriceRouter": "0x93f61D0D5F623144e7C390415B70102A9Cc90bA5", + "WitnetRandomness": "0x3D7Ccf6518deBE3d2fd20c4b6AEc3FD904c0Ad29", + "WitnetRequestBoard": "0xd3AD9a4b26527E3bA5Fc60B75Eb002D47D98e292" + }, + "celo:alfajores": { + "WitnetProxy": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93", + "WitnetPriceRouter": "0x6f8A7E2bBc1eDb8782145cD1089251f6e2C738AE", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x99a0B5eb260Fe3BfcF9d658850e3dD6d6B69183A", + "WitnetErrorsLib": "0x364E2b91a4C7563288C3ccF7256BA172935CC550", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x654B79823f244c2476907F21EBD20cFebC04D0A5", + "WitnetRandomnessImplementation": "0xFB36b14df6D319A5A7F418C80b0700664A4f9e6a", + "WitnetRandomnessImplementationV061": "0xbD804467270bCD832b4948242453CA66972860F5", + "WitnetRequestBoardImplementation": "0xe381f706f2932049A844791f41b2863884c4e6CA", + "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" + }, + "celo:mainnet": { + "WitnetProxy": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", + "WitnetPriceRouter": "0x931673904eB6E69D775e35F522c0EA35575297Cb", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x03E709E6422E30C033456FCde38C70A12553E468", + "WitnetErrorsLib": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x760C146699B76c84Cc8050f57728F2Dc374cbf25", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x76ffF94D527504e90DaCB12d710590ba8227299E", + "WitnetRandomnessImplementation": "0x6Af31B632A20185ff96FC47a8576a6980Cd99FEC", + "WitnetRandomnessImplementationV061": "0x6023fF93A3b37791a94B15D6AEaD488933b01Db3", + "WitnetRequestBoardImplementation": "0x5A13430A283701BE24cE7E1712B38F31d4B9ac58", + "WitnetRequestFactoryImplementation": "0x0d13c6058DDE86da77565ED6038C065Af71e9208" + }, + "conflux:core:testnet": { + "WitnetProxy": "0x8E077eBf150a5f09e26805F1CB1d14671834b63A", + "Create2Factory": "0x8644e9b7306cD4e6E5a3dB2aA7DFDE2744eAE676", + "WitnetBytecodes": "0x8E6AEaC77a18DF3e90B1446BB2210013A331Cb12", + "WitnetPriceFeeds": "0x8FDD679F4D1d2bfb97B5e5fD90c8E3E6ce0ce75c", + "WitnetPriceRouter": "0x8F61C7b18F69bB87D6151B8a5D733E1945ea6c25", + "WitnetRandomness": "0x882D16154E7190eDA27ed4CE6606d204Aa70EC90", + "WitnetRequestBoard": "0x8aB653B73a0e0552dDdce8c76F97c6AA826EFbD4", + "WitnetRequestFactory": "0x83eFF90a51D7da324AE1580eab6Ee0c9D45ad509", + "WitnetErrorsLib": "0x8d5Fda8c48dF35f321301e69c3c605AABCA474b1", + "WitnetEncodingLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x81f3EB9a7853F8e1357f6BB61E7BB610F73605F1", + "WitnetRandomnessImplementationV061": "0x887bC8Db7D91413D1575071925Ee8d77fE2CBc81", + "WitnetRequestBoardImplementation": "0x8d19a968CeAA0d31cD9E0434574C8dC5710ddBac", + "WitnetRequestFactoryImplementation": "0x89a49b46864049b16dFcf185740Ac89Eec8Fd670", + "WitnetPriceFeedsLib": "0x87cA78592Cb691BA3a1919c2d83Ed578e8E0Ae0a" + }, + "conflux:core:mainnet": { + "WitnetLib": "0x8A026e6956B4DB3E81bb113401798e59cFBEA4C6", + "WitnetPriceRouter": "0x806c8dFd322EE2d52b188CC472e0814F64304C32", + "WitnetRandomness": "0x8C3824A9A6C3F5B0ac107E2c7dBc8d88c14aF6D9", + "WitnetRequestBoard": "0x84C708bfd79bBC83Ad8753dAb1852EfE9D6712CC" + }, + "conflux:espace:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0x49C0BCce51a8B28f92d008394F06d5B259657F33", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x0C4be6AA667df48de54BA174bE7948875fdf152B", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", + "WitnetRandomnessImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", + "WitnetRandomnessImplementationV061": "0xa784093826e2894Ab3Db315f4e05F0F26407BBfF", + "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", + "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" + }, + "conflux:espace:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "cronos:testnet": { + "WitnetProxy": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xB1Ee13a85B2593D5191f3a2A08f175b1c918B9bb", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x7538f6Bff94B0F7F0A0802376238Aab0D2528521", + "WitnetRandomnessImplementation": "0xe145A4D3335D5F78d7e9cB6a3C1832155cB4Be01", + "WitnetRandomnessImplementationV061": "0x0017A464A86f48B342Cae3b8Fe29cFCDaA7b0643", + "WitnetRequestBoardImplementation": "0x3093731aECf4d9Be53b153E27A36D2E02647479F", + "WitnetRequestFactoryImplementation": "0xA8767A6EA3099De344499B35f725A38E3cD15562" + }, + "cronos:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x3737be6FcFf5B3B0f9DCc9a9ae1Da56561D0d0d3", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "cube:testnet": { + "WitnetProxy": "", + "Create2Factory": "", + "WitnetBytecodes": "", + "WitnetPriceFeeds": "", + "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRandomness": "", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetRequestFactory": "", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "", + "WitnetRandomnessImplementation": "", + "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "" + }, + "cube:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", + "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "dogechain:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", + "WitnetRandomnessImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", + "WitnetRandomnessImplementationV061": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", + "WitnetRequestBoardImplementation": "0xb6E0e5a64C7c02Fa477A5254dca35ED967570DF5", + "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" + }, + "dogechain:mainnet": { + "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetPriceRouter": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", + "WitnetRandomness": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", + "WitnetRequestBoard": "0xF2712e7114A237625EFC8bBA6a6ed1Bb8b6029c9" + }, + "elastos:testnet": { + "WitnetProxy": "0x840bafDC40D88F54Db41327fe1C85241f9151243", + "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetErrorsLib": "0xEdb5535994bF19d56c30F5BEa0937232E198F671", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xC1266fA3D24f5d63E2e34633b3F829E9156be0d6", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xdA489690BDfd6e4d76DE3b937f40342bAd281bc9", + "WitnetRandomnessImplementation": "0x83587BcfD1f75B5D08c4e27F098F99783cc693cb", + "WitnetRandomnessImplementationV079": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", + "WitnetRequestBoardImplementation": "0xfC62b6B0ec3eCF1Fa031B31b468be51E025a36f1", + "WitnetRequestFactoryImplementation": "0x4779A692aC089E02FD1301B0b53Fa1a02985a83F" + }, + "elastos:mainnet": { + "WitnetProxy": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", + "WitnetPriceRouter": "0x0Aa147F25CE8BfaA4E6B4B2CCa91f595bD732CD4", + "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x79c27c0555C95DBfd38e97023c3257376aaa154d", + "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", + "WitnetRequestRandomness": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", + "WitnetPriceFeedsLib": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D" + }, + "ethereum:goerli": { + "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", + "WitnetPriceRouter": "0x1cF3Aa9DBF4880d797945726B94B9d29164211BE", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0xb58D05247d16b3F1BD6B59c52f7f61fFef02BeC8", + "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", + "WitnetRandomnessImplementationV061": "0x6Eb87EcCe6218Cd0e97299331D2aa5d2e53da5cD", + "WitnetRequestBoardImplementation": "0x0e86a89D9Ae5D6182a853375F19dB23e5c600268", + "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" + }, + "ethereum:sepolia": { + "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", + "WitnetErrorsLib": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", + "WitnetEncodingLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", + "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetBytecodesImplementation": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", + "WitnetPriceFeedsImplementation": "0x7a56A80A9B169c046EdD1d8f584455a394bc9C71", + "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRequestBoardImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", + "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" + }, + "ethereum:mainnet": { + "WitnetBytecodes": "0xB8CdB2577dA632a77D6b90526aB53Eb5694Ed2D1", + "WitnetBytecodesImplementation": "", + "WitnetEncodingLib": "", + "WitnetLib": "0xaD18Fd3CC724A11c2B0D8cc7f1B108d8A3388416", + "WitnetPriceRouter": "0x83A757eAe821Ad7B520D9A74952337138A80b2AF", + "WitnetRandomness": "0x894907c7Ab64C1092620B5c8Ba039BB6E611eba8", + "WitnetRequestBoard": "0x9E4fae1c7ac543a81E4E2a5486a0dDaad8194bdA", + "WitnetRequestFactory": "0xdABE9E1B328d5Dd6b96271e5562ee3f7D8D035c4", + "WitnetRequestFactoryImplementation": "0xBfe9473720CC8DCa9615b8B6CFE228C7e1089396" + }, + "fuse:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", + "WitnetErrorsLib": "0x123a7AcE0879C4645b19A69c2ba8B3E4d01fBfD6", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xEeA1423D8cAf1e9440495842613Ec042046065aC", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x3280539A77C578C3eF698f53f29CDba00eC9B72E", + "WitnetRandomnessImplementation": "0x1e7e21B4b1102cf3b8bD5e110bbBdc80D43A9dEa", + "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRequestBoardImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", + "WitnetRequestFactoryImplementation": "0x83e8f5B6D4D94CAC5943689616B96786c2465c9A" + }, + "gnosis:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xA8767A6EA3099De344499B35f725A38E3cD15562", + "WitnetErrorsLib": "0x9F026F081b5E1f60d583CE380f30A0a4eF0AB97a", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x69891cE36F6dFbef4A7BdD0E95A15CBA916f206b", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", + "WitnetRandomnessImplementation": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", + "WitnetRandomnessImplementationv079": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetRequestBoardImplementation": "0xF58115533e681295CC1F07A135539E72c5116855", + "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" + }, + "kava:testnet": { + "WitnetProxy": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", + "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", + "WitnetRandomnessImplementation": "0xA9cC3101735b248964e90fA8506219A9CF0b1091", + "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRequestBoardImplementation": "0x8684d396366C21AA01B120F69df2070f840aC134", + "WitnetRequestFactoryImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF" + }, + "kava:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "kcc:testnet": { + "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetPriceRouter": "0xba7CF62498340fa3734EC51Ca8A69928F0d9E03a", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetRandomnessImplementation": "0x98DbB216138aA6a0b3ff2ae9bBdeC254398E5B2E", + "WitnetRandomnessImplementationV061": "0x76c72518060952FAec3f90666F047e39E3333f7E", + "WitnetRequestBoardImplementation": "0xeF262eCBF9c61A0e71688D90d8fe75B0C3a48901", + "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" + }, + "kcc:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "klaytn:testnet": { + "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", + "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetRandomnessImplementation": "0xd6d4B24219751A7725ce972E68B1067Ee57CC85a", + "WitnetRandomnessImplementationV061": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", + "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" + }, + "klaytn:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "mantle:testnet": { + "WitnetProxy": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", + "WitnetPriceRouter": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", + "WitnetRandomnessImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", + "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", + "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2" + }, + "mantle:mainnet": { + "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", + "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", + "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", + "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", + "WitnetRequestBoardImplementation": "0x3eA2fa27D997A938925299f91e49215218Ec4f7d", + "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" + }, + "meter:testnet": { + "WitnetProxy": "0xc6BdB5fd0113358Aaa6e9B56D6bA3A689cAbf65C", + "Create2Factory": "0x2d9dD590b8ebfEe76285f4398dC718D687A4B3e2", + "WitnetBytecodes": "0x1C116937844d705C4b0252C5340D4281C5D8D555", + "WitnetPriceFeeds": "0x7BBA94e4f3a596AD0E528e51d49CaD789Bd6a22D", + "WitnetPriceRouter": "0xBbDB82a16d7b66bb076879f766042b914F1C7572", + "WitnetRandomness": "0x8D416B786Ae7F5c583df36a6952E53834BDFf386", + "WitnetRequestBoard": "0xF99883aa51Fb76E37De6aC37854230d2337D2752", + "WitnetRequestFactory": "0x693cC8829Cb9AC14F75E6EbE5878652817C9e6a4", + "WitnetErrorsLib": "0x34AD22616E4FfED3EB1e9580C9D7156E1bF8ea7C", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xaB7FEec38465EA6E1Cf216E188F3Bd11355824dc", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xD62848a74c0d08BA233D625d8691ea5Fee7d7719", + "WitnetRandomnessImplementation": "0xde9988f1397C0a7D4887707ec8A2Ea265D4E0572", + "WitnetRandomnessImplementationV061": "0xa254632ae454bae18ff0221c2040aa387f044f0e", + "WitnetRequestBoardImplementation": "0x7a624e7742F7A26f7BddDde06Ad7d9e7A6804298", + "WitnetRequestFactoryImplementation": "0xf1fb7170cB8832213Fb4C506f883bca0a910861D" + }, + "meter:mainnet": { + "WitnetLib": "0x60507Ef497EC61d407cD6Fa1c65FE820620bfA88", + "WitnetPriceRouter": "0xA0Ea8C99159843afdAE9eD092E8eaec0368e8A20", + "WitnetRandomness": "0xE189B1D26dAAB45cd344452f29Db8E93B5C7FaF1", + "WitnetRequestBoard": "0x4e645446799776B9670D18E1ecBCad059987eaCa" + }, + "metis:goerli": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetErrorsLib": "0xc229345B9B95515C69A64842182e37cAdB52A00d", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x4a0264714E368A6888c5D755F47Bd924549Fd625", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", + "WitnetRandomnessImplementation": "0x4326d5b067EC4Bb5c2F71909E278Def8e4906B19", + "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRequestBoardImplementation": "0x7833F9B08F4236D77ec6287d667F533bc2F1c1EE", + "WitnetRequestFactoryImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08" + }, + "metis:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0xB280e3B785f615C000A8BeBb55C35eCD2376F2eb", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "moonbeam:moonbase": { + "WitnetProxy": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", + "WitnetPriceRouter": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x02Cd4089679EAA9431a88170fd784e7dE78A2425", + "WitnetErrorsLib": "0x2163DBCBdbBeC066EF8d8Adab75Af8b0B9A5cfAA", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6f0da7F65Aaa090C48B371ADEfA1997e4e3cE39a", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", + "WitnetRandomnessImplementation": "0xcf9F6DD90221d5A23a6c4E2252bF690acdf6eedC", + "WitnetRandomnessImplementationv079": "0x65772461641A4A6E8B10c81bae1a132E04e77262", + "WitnetRequestBoardImplementation": "0xCA9e7861643febcEa7C657eA8F012645D6acceC4", + "WitnetRequestFactoryImplementation": "0x6395d83C9Aa803498980A5ab78217785d4db7bE7" + }, + "moonbeam:moonriver": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", + "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "moonbeam:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "okxchain:testnet": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", + "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRequestBoardImplementation": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", + "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" + }, + "okxchain:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "optimism:goerli": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x0985FDe9f424fe4f5AC516F66bAf5591e18aCBEb", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRandomnessImplementation": "0x12E5FBdaB02cC2336114353CA7BE9e2cc8E4Cc25", + "WitnetRandomnessImplementationV061": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", + "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", + "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" + }, + "optimism:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "polygon:goerli": { + "WitnetProxy": "0xF9bC9c1d66e4B28F56069c98A8c5373ec0200a25", + "WitnetPriceRouter": "0x6d5544ca5b35bf2e7a78ace4E7B8d191fe5C9FAb", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xA7389B84D6ABC46b40e88aAD2bbDAf9921649E9E", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xA149B0ED1D7d506AAB4B48275B9F761336aD916A", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x632147c657743906F332EB05E5C775B738254e1b", + "WitnetRandomnessImplementation": "0xD7C67eA4BFB2e85b5a8a07E295c640F2d1811e41", + "WitnetRandomnessImplementationv079": "0x24Cc52D0603F161E16c3DB29Da4c2bCc07d17C4b", + "WitnetRequestBoardImplementation": "0x2bD210b8193780A9A74A2864E6Eb007745244092", + "WitnetRequestFactoryImplementation": "0x5Acb0fEf96A307660c6B2fBdB271af12Dcdb3E68" + }, + "polygon:mainnet": { + "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", + "WitnetPriceRouter": "0x3806311c7138ddF2bAF2C2093ff3633E5A73AbD4", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a", + "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", + "WitnetRandomnessImplementation": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", + "WitnetRandomnessImplementationv061": "0xc8c0d4dB2D7801D6E2A863934597cFD31689f7D5", + "WitnetRequestBoardImplementation": "0xF395CEeb77cE9cDc44Fd276bE5Ff307B1902D3f7", + "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" + }, + "polygon:zkevm:goerli": { + "WitnetProxy": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", + "WitnetPriceRouter": "0xc2462eE5d9F8C70f3E0C4CE5881dFFF291Ff2205", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRandomnessV079": "0x88888885966F8F77cC6E797aE263C4d091e44A55", + "WitnetErrorsLib": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", + "WitnetEncodingLib": "0x6D198FC7F1573E3bf4AEd1f9307fff6b2A05e38e", + "WitnetPriceFeedsLib": "0xFB2A291CaE095a63f50846a63aE729506A3D1C40", + "WitnetBytecodesImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", + "WitnetPriceFeedsImplementation": "0xA14a1fD9b1C6023f87f3A7E97DbdFdf1a9413D0A", + "WitnetRandomnessImplementation": "0x89A0EF4eDEEfA128931b353bdf494Bad97a3D448", + "WitnetRandomnessImplementationV079": "0x3f189fAc162d3CC6d84EF72c8177afAd8f3DBeE1", + "WitnetRequestBoardImplementation": "0x49030E216d49Fbf443CBe3692De5A6B97AEcFFCA", + "WitnetRequestFactoryImplementation": "0xB740E58D185558FF4FaaBf430fc87a6801208f38" + }, + "polygon:zkevm:mainnet": { + "WitnetProxy": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", + "WitnetPriceRouter": "0xb99FA0430C73E7B82604Aa99d351d6aFdCe46A16", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetErrorsLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", + "WitnetEncodingLib": "0x9a83a23066766991E6cA113eB425fFe806f62ecF", + "WitnetPriceFeedsLib": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", + "WitnetBytecodesImplementation": "0xD038E50cD189BF94CC0393C19606688A38D63D77", + "WitnetPriceFeedsImplementation": "0xe936a946FA591eCed937996Ef3df5c89d59f4dbb", + "WitnetRandomnessImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", + "WitnetRequestBoardImplementation": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", + "WitnetRequestFactoryImplementation": "0x5FB499336aee67EC1183F49A8265CC3E2599C2ae" + }, + "reef:testnet": { + "WitnetProxy": "", + "Create2Factory": "", + "WitnetBytecodes": "", + "WitnetPriceFeeds": "", + "WitnetPriceRouter": "", + "WitnetRandomness": "", + "WitnetRequestBoard": "", + "WitnetRequestFactory": "", + "WitnetRequestRandomness": "", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "", + "WitnetRandomnessImplementation": "", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "" + }, + "reef:mainnet": { + "WitnetParserLib": "0xD3e5A6F4653C5D596d16c947cfA30973C5aa9f34", + "WitnetPriceRouter": "0xa22AbF47Fd1eDDf7C0967C9d7fF06FB3c42B26E2", + "WitnetRandomness": "0x03e82c280ae03af908edb250d3d187db0018e501", + "WitnetRequestBoard": "0x61E11e5f496936Ef7f9600f6D1E81b1E7c12b172" + }, + "scroll:sepolia": { + "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", + "WitnetEncodingLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", + "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetBytecodesImplementation": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", + "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", + "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", + "WitnetRequestBoardImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", + "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" + }, + "scroll:mainnet": { + "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", + "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", + "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", + "WitnetEncodingLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", + "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", + "WitnetBytecodesImplementation": "0x5832e99368877a63dd1c2cea941C2b43E1F6b16A", + "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", + "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", + "WitnetRequestBoardImplementation": "0x0e4F5763f417BB13AF759da4d36af50d13F02730", + "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" + }, + "syscoin:testnet": { + "WitnetProxy": "", + "Create2Factory": "", + "WitnetBytecodes": "", + "WitnetPriceFeeds": "", + "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", + "WitnetRandomness": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetRequestFactory": "", + "WitnetErrorsLib": "", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "", + "WitnetRequestBoardImplementation": "", + "WitnetRequestFactoryImplementation": "" + }, + "syscoin:mainnet": { + "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", + "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + }, + "syscoin:rollux:testnet": { + "WitnetProxy": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", + "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", + "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", + "WitnetRandomnessImplementation": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", + "WitnetRequestBoardImplementation": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", + "WitnetRequestFactoryImplementation": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93" + }, + "ultron:testnet": { + "WitnetProxy": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865", + "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", + "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", + "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", + "WitnetErrorsLib": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D", + "WitnetEncodingLib": "", + "WitnetPriceFeedsLib": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", + "WitnetBytecodesImplementation": "", + "WitnetPriceFeedsImplementation": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", + "WitnetRandomnessImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", + "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", + "WitnetRequestBoardImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", + "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" + }, + "ultron:mainnet": { + "WitnetParserLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", + "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", + "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", + "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" } } \ No newline at end of file diff --git a/package.json b/package.json index 7422bae60..dff5c9032 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "js-sha256": "^0.11.0", "lodash": "^4.17.21", "nanoassert": "^2.0.0", + "proper-lockfile": "^4.1.2", "sha3-wasm": "^1.0.0", "solhint": "^4.1.1", "truffle": "^5.11.5", diff --git a/src/index.js b/src/index.js index 4039c8325..09f1850e5 100644 --- a/src/index.js +++ b/src/index.js @@ -1,5 +1,22 @@ +const addresses = require("./migrations/witnet.addresses.json"); +const { merge } = require("lodash") module.exports = { - addresses: require("../migrations/witnet.addresses.json"), + getAddresses: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network); + return merge( + addresses.default, + addresses[eco], + addresses[net], + ); + }, + getNetworks: () => { + return Object(addresses).entries.map(entry => { + if (entry[0].indexOf(":") > -1) { + return entry[1] + } + }); + }, artifacts: require("../artifacts"), + settings: require("../settings"), utils: require("./utils"), } \ No newline at end of file diff --git a/src/utils/index.js b/src/utils/index.js index dbdfc162c..02b2a8c09 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,6 +1,7 @@ const fs = require("fs") require("dotenv").config() const { isEqual } = require("lodash") +const lockfile = require('proper-lockfile'); const readline = require("readline") const web3 = require("web3") @@ -11,9 +12,11 @@ module.exports = { fromAscii, getRealmNetworkFromArgs, getRealmNetworkFromString, + isDryRun, isNullAddress, padLeft, prompt, + readAddresses: readAddresses, saveAddresses, saveJsonArtifact, traceHeader, @@ -49,6 +52,10 @@ function getRealmNetworkFromString (network) { } } +function isDryRun (network) { + return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop"; +} + function isNullAddress (addr) { return !addr || addr === "0x0000000000000000000000000000000000000000" || @@ -83,12 +90,21 @@ async function prompt (text) { return answer } -function saveAddresses (addrs) { - fs.writeFileSync( - "./migrations/witnet.addresses.json", - JSON.stringify(addrs, null, 4), - { flag: "w+" } - ) +async function readAddresses (network) { + const filename = "./migrations/witnet.addresses.json" + lockfile.lockSync(filename); + const addrs = JSON.parse(await fs.readFileSync(filename)) + lockfile.unlockSync(filename); + return addrs[network] || {}; +} + +async function saveAddresses (network, addrs) { + const filename = "./migrations/witnet.addresses.json" + lockfile.lockSync(filename); + const json = JSON.parse(fs.readFileSync(filename)) + json[network] = addrs + fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }); + lockfile.unlockSync(filename); } function saveJsonArtifact (key, artifact) { From ba07f22302f24d0a68ff5a3036ce1fb47d12c3d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:17:56 +0100 Subject: [PATCH 094/149] chore: upgrade contracts to openzeppelin v5.0.1 Where required. --- contracts/apps/WitnetPriceFeeds.sol | 2 +- contracts/apps/WitnetRandomness.sol | 2 +- .../core/defaults/WitnetBytecodesDefault.sol | 1 + .../defaults/WitnetRequestBoardTrustableBase.sol | 1 + .../defaults/WitnetRequestFactoryDefault.sol | 16 ++++++++++------ contracts/libs/WitnetV2.sol | 2 +- contracts/patterns/ReentrancyGuard.sol | 2 +- 7 files changed, 16 insertions(+), 10 deletions(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 7c6de97a6..5fa107a1b 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -34,12 +34,12 @@ contract WitnetPriceFeeds WitnetRequestBoard immutable public override witnet; constructor(address _operator, WitnetRequestBoard _wrb) + Ownable(_operator) WitnetFeeds( Witnet.RadonDataTypes.Integer, "Price-" ) { - _transferOwnership(_operator); require( _wrb.specs() == type(IWitnetRequestBoard).interfaceId, "WitnetPriceFeeds: uncompliant request board" diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol index 7947ef024..05cdff2f0 100644 --- a/contracts/apps/WitnetRandomness.sol +++ b/contracts/apps/WitnetRandomness.sol @@ -41,9 +41,9 @@ contract WitnetRandomness } constructor(address _operator, WitnetRequestBoard _wrb) + Ownable(_operator) UsingWitnet(_wrb) { - _transferOwnership(_operator); assert(_wrb.specs() == type(IWitnetRequestBoard).interfaceId); WitnetRequestFactory _factory = witnet().factory(); WitnetBytecodes _registry = witnet().registry(); diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetBytecodesDefault.sol index 636a5fe66..3961e072d 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetBytecodesDefault.sol @@ -31,6 +31,7 @@ contract WitnetBytecodesDefault bytes4 public immutable override specs = type(IWitnetBytecodes).interfaceId; constructor(bool _upgradable, bytes32 _versionTag) + Ownable(address(msg.sender)) WitnetUpgradableBase( _upgradable, _versionTag, diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index f8056eb5e..b924b4c8b 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -69,6 +69,7 @@ abstract contract WitnetRequestBoardTrustableBase bytes32 _versionTag, address _currency ) + Ownable(address(msg.sender)) Payable(_currency) WitnetUpgradableBase( _upgradable, diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 6bc54b6fb..792e21ff8 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -54,6 +54,7 @@ contract WitnetRequestFactoryDefault bool _upgradable, bytes32 _versionTag ) + Ownable(address(msg.sender)) WitnetUpgradableBase( _upgradable, _versionTag, @@ -88,23 +89,26 @@ contract WitnetRequestFactoryDefault // and they all return the same data type bool _parameterized; for (uint _ix = 0; _ix < _retrievalsIds.length; _ix ++) { + bytes32 _retrievalHash = _retrievalsIds[_ix]; if (_ix == 0) { - _resultDataType = registry.lookupRadonRetrievalResultDataType(_retrievalsIds[_ix]); + _resultDataType = registry.lookupRadonRetrievalResultDataType(_retrievalHash); } else { require( - _resultDataType == registry.lookupRadonRetrievalResultDataType(_retrievalsIds[_ix]), + _resultDataType == registry.lookupRadonRetrievalResultDataType(_retrievalHash), "WitnetRequestTemplate: mismatching retrievals" ); } if (!_parameterized) { // check whether at least one of the retrievals is parameterized - _parameterized = registry.lookupRadonRetrievalArgsCount(_retrievalsIds[_ix]) > 0; + _parameterized = registry.lookupRadonRetrievalArgsCount(_retrievalHash) > 0; } } - // check that the aggregator and tally reducers actually exist in the registry - registry.lookupRadonReducer(_aggregatorId); - registry.lookupRadonReducer(_tallyId); { + // check that the aggregator and tally reducers actually exist in the registry + registry.lookupRadonReducer(_aggregatorId); + registry.lookupRadonReducer(_tallyId); + + // write data into storage: WitnetRequestTemplateSlot storage __data = __witnetRequestTemplate(); __data.aggregator = _aggregatorId; __data.factory = WitnetRequestFactory(msg.sender); diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 13e0f1285..270825626 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -42,7 +42,7 @@ library WitnetV2 { bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. } - /// Final query's result status from a requester's point of view. + /// Final query's result status from a requester's point of view. enum ResultStatus { Void, Awaiting, diff --git a/contracts/patterns/ReentrancyGuard.sol b/contracts/patterns/ReentrancyGuard.sol index 56ff2e0ba..497a698f0 100644 --- a/contracts/patterns/ReentrancyGuard.sol +++ b/contracts/patterns/ReentrancyGuard.sol @@ -1,3 +1,3 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; From 48849a816629803489721cfeccac97e6f5161719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:18:22 +0100 Subject: [PATCH 095/149] chore: temporary remove unadapted tests --- test/TestWitnetErrorsLib.sol | 310 ------- test/helpers/UsingWitnetTestHelper.sol | 71 -- test/helpers/WitnetRequestBoardTestHelper.sol | 51 -- ...netRequestBoardTrojanHorseBadProxiable.sol | 60 -- ...etRequestBoardTrojanHorseNotUpgradable.sol | 57 -- test/helpers/WitnetRequestTestHelper.sol | 30 - test/helpers/WrbProxyTestHelper.sol | 25 - test/using_witnet.test.js | 293 ------- test/wrb.test.js | 759 ------------------ test/wrb_proxy.test.js | 258 ------ 10 files changed, 1914 deletions(-) delete mode 100644 test/TestWitnetErrorsLib.sol delete mode 100644 test/helpers/UsingWitnetTestHelper.sol delete mode 100644 test/helpers/WitnetRequestBoardTestHelper.sol delete mode 100644 test/helpers/WitnetRequestBoardTrojanHorseBadProxiable.sol delete mode 100644 test/helpers/WitnetRequestBoardTrojanHorseNotUpgradable.sol delete mode 100644 test/helpers/WitnetRequestTestHelper.sol delete mode 100644 test/helpers/WrbProxyTestHelper.sol delete mode 100644 test/using_witnet.test.js delete mode 100644 test/wrb.test.js delete mode 100644 test/wrb_proxy.test.js diff --git a/test/TestWitnetErrorsLib.sol b/test/TestWitnetErrorsLib.sol deleted file mode 100644 index a7fd530a3..000000000 --- a/test/TestWitnetErrorsLib.sol +++ /dev/null @@ -1,310 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "truffle/Assert.sol"; -import "../contracts/libs/WitnetErrorsLib.sol"; - -contract TestWitnetErrorsLib { - - using Witnet for Witnet.Result; - - event Log(bytes data, uint256 length); - event Error(Witnet.ResultError log); - - // Test decoding of `RadonError` error codes - function testErrorCodes1() external { - Witnet.ResultError memory errorEmpty = WitnetErrorsLib.resultErrorFromCborBytes(hex"D82780"); - Witnet.ResultError memory error0x00 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278100"); - Witnet.ResultError memory error0x01 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278101"); - Witnet.ResultError memory error0x02 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278102"); - Witnet.ResultError memory error0x03 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278103"); - Witnet.ResultError memory error0x10 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278110"); - Witnet.ResultError memory error0x11 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278111"); - Witnet.ResultError memory error0x20 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811820"); - Witnet.ResultError memory error0x30 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811830"); - Witnet.ResultError memory error0x31 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811831"); - Witnet.ResultError memory error0x40 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811840"); - Witnet.ResultError memory error0x41 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811841"); - Witnet.ResultError memory error0x42 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811842"); - Assert.equal( - uint(errorEmpty.code), - uint(Witnet.ResultErrorCodes.Unknown), - "empty error code `[]` should be `Witnet.ResultErrorCodes.Unknown`" - ); - Assert.equal( - uint(error0x00.code), - uint(Witnet.ResultErrorCodes.Unknown), - "error code `0x00` should be `Witnet.ResultErrorCodes.Unknown`" - ); - Assert.equal( - uint(error0x01.code), - uint(Witnet.ResultErrorCodes.SourceScriptNotCBOR), - "error code `0x01` should be `Witnet.ResultErrorCodes.SourceScriptNotCBOR`" - ); - Assert.equal( - uint(error0x02.code), - uint(Witnet.ResultErrorCodes.SourceScriptNotArray), - "error code `0x02` should be `Witnet.ResultErrorCodes.SourceScriptNotArray`" - ); - Assert.equal( - uint(error0x03.code), - uint(Witnet.ResultErrorCodes.SourceScriptNotRADON), - "error code `0x03` should be `Witnet.ResultErrorCodes.SourceScriptNotRADON`" - ); - Assert.equal( - uint(error0x10.code), - uint(Witnet.ResultErrorCodes.RequestTooManySources), - "error code `0x10` should be `Witnet.ResultErrorCodes.RequestTooManySources`" - ); - Assert.equal( - uint(error0x11.code), - uint(Witnet.ResultErrorCodes.ScriptTooManyCalls), - "error code `0x11` should be `Witnet.ResultErrorCodes.ScriptTooManyCalls`" - ); - Assert.equal( - uint(error0x20.code), - uint(Witnet.ResultErrorCodes.UnsupportedOperator), - "error code `0x20` should be `Witnet.ResultErrorCodes.UnsupportedOperator`" - ); - Assert.equal( - uint(error0x30.code), - uint(Witnet.ResultErrorCodes.HTTP), - "error code `0x30` should be `Witnet.ResultErrorCodes.HTTP`" - ); - Assert.equal( - uint(error0x31.code), - uint(Witnet.ResultErrorCodes.RetrievalTimeout), - "Error code 0x31 should be `Witnet.ResultErrorCodes.RetrievalTimeout`" - ); - Assert.equal( - uint(error0x40.code), - uint(Witnet.ResultErrorCodes.Underflow), - "error code `0x40` should be `Witnet.ResultErrorCodes.Underflow`" - ); - Assert.equal( - uint(error0x41.code), - uint(Witnet.ResultErrorCodes.Overflow), - "error code `0x41` should be `Witnet.ResultErrorCodes.Overflow`" - ); - Assert.equal( - uint(error0x42.code), - uint(Witnet.ResultErrorCodes.DivisionByZero), - "Error code #0x42 should be `Witnet.ResultErrorCodes.DivisionByZero`" - ); - } - - function testErrorCodes2() external { - Witnet.ResultError memory error0x50 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811850"); - Witnet.ResultError memory error0x51 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811851"); - Witnet.ResultError memory error0x52 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811852"); - Witnet.ResultError memory error0x53 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811853"); - Witnet.ResultError memory error0x60 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811860"); - Witnet.ResultError memory error0x70 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811870"); - Witnet.ResultError memory error0x71 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811871"); - Witnet.ResultError memory error0xe0 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E0"); - Witnet.ResultError memory error0xe1 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E1"); - Witnet.ResultError memory error0xe2 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E2"); - Witnet.ResultError memory error0xff = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118FF"); - Assert.equal( - uint(error0x50.code), - uint(Witnet.ResultErrorCodes.InsufficientQuorum), - "Error code #0x50 should be `Witnet.ResultErrorCodes.InsufficientQuorum`" - ); - Assert.equal( - uint(error0x51.code), - uint(Witnet.ResultErrorCodes.InsufficientMajority), - "Error code #0x51 should be `Witnet.ResultErrorCodes.InsufficientMajority`" - ); - Assert.equal( - uint(error0x52.code), - uint(Witnet.ResultErrorCodes.InsufficientCommits), - "Error code #0x52 should be `Witnet.ResultErrorCodes.InsufficientCommits`" - ); - Assert.equal( - uint(error0x53.code), - uint(Witnet.ResultErrorCodes.TallyExecution), - "Error code #0x53 should be `Witnet.ResultErrorCodes.TallyExecution`" - ); - Assert.equal( - uint(error0x60.code), - uint(Witnet.ResultErrorCodes.MalformedReveal), - "Error code #0x60 should be `Witnet.ResultErrorCodes.MalformedReveal`" - ); - Assert.equal( - uint(error0x70.code), - uint(Witnet.ResultErrorCodes.ArrayIndexOutOfBounds), - "Error code #0x70 should be `Witnet.ResultErrorCodes.ArrayIndexOutOfBounds`" - ); - Assert.equal( - uint(error0x71.code), - uint(Witnet.ResultErrorCodes.MapKeyNotFound), - "Error code #0x71 should be `Witnet.ResultErrorCodes.MapKeyNotFound`" - ); - Assert.equal( - uint(error0xe0.code), - uint(Witnet.ResultErrorCodes.BridgeMalformedDataRequest), - "Error code #0xE0 should be `Witnet.ResultErrorCodes.BridgeMalformedDataRequest`" - ); - Assert.equal( - uint(error0xe1.code), - uint(Witnet.ResultErrorCodes.BridgePoorIncentives), - "Error code #0xE1 should be `Witnet.ResultErrorCodes.BridgePoorIncentives`" - ); - Assert.equal( - uint(error0xe2.code), - uint(Witnet.ResultErrorCodes.BridgeOversizedTallyResult), - "Error code #0xE2 should be `Witnet.ResultErrorCodes.BridgeOversizedTallyResult`" - ); - Assert.equal( - uint(error0xff.code), - uint(Witnet.ResultErrorCodes.UnhandledIntercept), - "Error code #0xFF should be `Witnet.ResultErrorCodes.UnhandledIntercept`" - ); - } - - // Test decoding of `RadonError` error messages - function testErrorMessages() external { - Witnet.ResultError memory errorEmpty = WitnetErrorsLib.resultErrorFromCborBytes(hex"D82780"); - Witnet.ResultError memory error0x00 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278100"); - Witnet.ResultError memory error0x01 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278101"); - Witnet.ResultError memory error0x02 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278102"); - Witnet.ResultError memory error0x03 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278103"); - Witnet.ResultError memory error0x10 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278110"); - Witnet.ResultError memory error0x11 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278111"); - Witnet.ResultError memory error0x20 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278418206b5261646f6e537472696e676a496e74656765724164648101"); - Witnet.ResultError memory error0x30 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827821830190194"); - Witnet.ResultError memory error0x31 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811831"); - Witnet.ResultError memory error0x40 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811840"); - Witnet.ResultError memory error0x41 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811841"); - Witnet.ResultError memory error0x42 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811842"); - Assert.equal( - errorEmpty.reason, - "Unknown error: no error code was found.", - "Empty error message `[]` should be properly formatted" - ); - Assert.equal( - error0x00.reason, - "Unhandled error: 0x00.", - "Error message 0x00 should be properly formatted" - ); - Assert.equal( - error0x01.reason, - "Witnet: Radon: invalid CBOR value.", - "Error message for error code `0x01` (`Witnet.ResultErrorCodes.SourceScriptNotCBOR`) should be properly formatted" - ); - Assert.equal( - error0x02.reason, - "Witnet: Radon: CBOR value expected to be an array of calls.", - "Error message for error code `0x02` (`Witnet.ResultErrorCodes.SourceScriptNotArray`) should be properly formatted" - ); - Assert.equal( - error0x03.reason, - "Witnet: Radon: CBOR value expected to be a data request.", - "Error message for error code `0x03` (`Witnet.ResultErrorCodes.SourceScriptNotRADON`) should be properly formatted" - ); - Assert.equal( - error0x10.reason, - "Witnet: Radon: too many sources.", - "Error message for error code `0x10` (`Witnet.ResultErrorCodes.RequestTooManySources`) should be properly formatted" - ); - Assert.equal( - error0x11.reason, - "Witnet: Radon: too many calls.", - "Error message for error code `0x11` (`Witnet.ResultErrorCodes.ScriptTooManyCalls`) should be properly formatted" - ); - Assert.equal( - error0x20.reason, - "Witnet: Radon: unsupported 'IntegerAdd' for input type 'RadonString'.", - "Error message for error code `0x20` (`Witnet.ResultErrorCodes.UnsupportedOperator`) should be properly formatted" - ); - Assert.equal( - error0x30.reason, - "Witnet: Retrieval: HTTP/404 error.", - "Error message for error code `0x30` (`Witnet.ResultErrorCodes.HTTP`) should be properly formatted" - ); - Assert.equal( - error0x31.reason, - "Witnet: Retrieval: timeout.", - "Error message for error code `0x31` (`Witnet.ResultErrorCodes.RetrievalTimeout`) should be properly formatted" - ); - Assert.equal( - error0x40.reason, - "Witnet: Aggregation: math underflow.", - "Error message for error code `0x40` (`Witnet.ResultErrorCodes.Underflow`) should be properly formatted" - ); - Assert.equal( - error0x41.reason, - "Witnet: Aggregation: math overflow.", - "Error message for error code `0x41` (`Witnet.ResultErrorCodes.Overflow`) should be properly formatted" - ); - Assert.equal( - error0x42.reason, - "Witnet: Aggregation: division by zero.", - "Error message for e rror code `0x42` (`Witnet.ResultErrorCodes.DivisionByZero`) should be properly formatted" - ); - } - - function testBridgeErrorMessages() external { - Witnet.ResultError memory error0xe0 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E0"); - Witnet.ResultError memory error0xe1 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E1"); - Witnet.ResultError memory error0xe2 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118E2"); - - Assert.equal( - error0xe0.reason, - "Witnet: Bridge: malformed data request cannot be processed.", - "Error message failed (0xE0)" - ); - Assert.equal( - error0xe1.reason, - "Witnet: Bridge: rejected due to poor witnessing incentives.", - "Error message failed (0xE1)" - ); - Assert.equal( - error0xe2.reason, - "Witnet: Bridge: rejected due to poor bridging incentives.", - "Error message failed (0xE2)" - ); - } - - function testTallyErrorMessages() external { - Witnet.ResultError memory error0x50 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811850"); - Witnet.ResultError memory error0x51 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827831851fb400aaaaaaaaaaaabf95260"); - Witnet.ResultError memory error0x51b = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827831851f95220f95260"); - Witnet.ResultError memory error0x52 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811852"); - Witnet.ResultError memory error0x60 = WitnetErrorsLib.resultErrorFromCborBytes(hex"D827811860"); - Witnet.ResultError memory error0xff = WitnetErrorsLib.resultErrorFromCborBytes(hex"D8278118ff"); - Assert.equal( - error0x50.reason, - "Witnet: Tally: no reveals.", - "Error message for error code `0x50` (`Witnet.ResultErrorCodes.NoReveals`) should be properly formatted" - ); - Assert.equal( - error0x51.reason, - "Witnet: Tally: insufficient consensus: 3% <= 51%.", - "Error message for error code `0x51` (`Witnet.ResultErrorCodes.InsufficientConsensus`) should be properly formatted" - ); - Assert.equal( - error0x51b.reason, - "Witnet: Tally: insufficient consensus: 49% <= 51%.", - "Error message for error code `0x51` (`Witnet.ResultErrorCodes.InsufficientConsensus`) should be properly formatted" - ); - Assert.equal( - error0x52.reason, - "Witnet: Tally: insufficient commits.", - "Error message for error code `0x52` (`Witnet.ResultErrorCodes.InsufficientCommits`) should be properly formatted" - ); - Assert.equal( - error0x60.reason, - "Witnet: Tally: malformed reveal.", - "Error message for error code `0x60` (`Witnet.ResultErrorCodes.MalformedReveal`) should be properly formatted" - ); - Assert.equal( - error0xff.reason, - "Witnet: Tally: unhandled intercept.", - "Error message for error code `0xFF` (`Witnet.ResultErrorCodes.UnhandledIntercept`) should be properly formatted" - ); - } - -} diff --git a/test/helpers/UsingWitnetTestHelper.sol b/test/helpers/UsingWitnetTestHelper.sol deleted file mode 100644 index f5c2429e7..000000000 --- a/test/helpers/UsingWitnetTestHelper.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../../contracts/UsingWitnet.sol"; - -/** - * @title Test Helper for the UsingWitnet contract - * @dev The aim of this contract is: - * 1. Raise the visibility modifier of UsingWitnet contract functions for testing purposes - * @author Witnet Foundation - */ -contract UsingWitnetTestHelper is UsingWitnet { - - Witnet.Result public result; - - constructor (WitnetRequestBoard _wrb) - UsingWitnet(_wrb) - {} - - receive() external payable {} - - function witnetPostRequest(IWitnetRequest _request) - external payable - returns(uint256 _id) - { - uint256 _reward; - (_id, _reward) = _witnetPostRequest(_request); - if (_reward < msg.value) { - payable(msg.sender).transfer(msg.value - _reward); - } - } - - function witnetUpgradeReward(uint256 _id) - external payable - { - uint256 _value = msg.value; - uint256 _used = _witnetUpgradeReward(_id); - if (_used < _value) { - payable(msg.sender).transfer(_value - _used); - } - } - - function witnetReadResult(uint256 _requestId) - external - returns (Witnet.Result memory) - { - result = _witnetReadResult(_requestId); - return result; - } - - function witnetCurrentReward(uint256 _requestId) - external view - returns (uint256) - { - return witnet.readRequestReward(_requestId); - } - - function witnetEstimateReward(uint256 _gasPrice) external view returns (uint256) { - return witnet.estimateReward(_gasPrice); - } - - function witnetAsUint64() external view returns (uint) { - return witnet.asUint64(result); - } - - function witnetCheckRequestResolved(uint256 _id) external view returns (bool) { - return _witnetCheckResultAvailability(_id); - } -} diff --git a/test/helpers/WitnetRequestBoardTestHelper.sol b/test/helpers/WitnetRequestBoardTestHelper.sol deleted file mode 100644 index ec3b05537..000000000 --- a/test/helpers/WitnetRequestBoardTestHelper.sol +++ /dev/null @@ -1,51 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../../contracts/impls/boards/trustable/WitnetRequestBoardTrustableDefault.sol"; - -/** - * @title Witnet Requests Board Version 1 - * @notice Contract to bridge requests to Witnet - * @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. - * The contract has been created for testing purposes - * @author Witnet Foundation - */ -contract WitnetRequestBoardTestHelper - is - WitnetRequestBoardTrustableDefault -{ - address public witnet; - - constructor (address[] memory _committee, bool _upgradable) - WitnetRequestBoardTrustableDefault(_upgradable, "WitnetRequestBoardTestHelper", 120547) - { - witnet = msg.sender; - setReporters(_committee); - } - - /// @dev Estimate the amount of reward we need to insert for a given gas price. - /// @return The rewards to be included for the given gas price as inclusionReward, resultReward, blockReward. - function estimateReward(uint256) - public pure - override - returns(uint256) - { - return 0; - } - - /// @dev Posts a data request into the WRB, with immediate mock result. - /// @param _request The contract containing the Witnet Witnet data request actual bytecode. - /// @return _id The unique identifier of the data request. - function postRequest(IWitnetRequest _request) - public payable - override - returns(uint256 _id) - { - _id = super.postRequest(_request); - __storage().queries[_id].response.drTxHash = keccak256("hello"); - __storage().queries[_id].response.cborBytes = "hello"; - } -} diff --git a/test/helpers/WitnetRequestBoardTrojanHorseBadProxiable.sol b/test/helpers/WitnetRequestBoardTrojanHorseBadProxiable.sol deleted file mode 100644 index 88cafe84b..000000000 --- a/test/helpers/WitnetRequestBoardTrojanHorseBadProxiable.sol +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/* solhint-disable var-name-mixedcase */ - -import "../../contracts/patterns/Initializable.sol"; -import "../../contracts/patterns/Proxiable.sol"; - -/** - * @title Witnet Requests Board Trojan Horse: Proxiable with a bad `proxiableUUID()`. - * @notice Contract to test proxy upgrade assertions. - * @dev Upgrading an existing WitnetRequestBoard implementation with an instance of - * this kind (i.e. Proxiable and Upgradeable) but with a `proxiableUUID()` value different - * to the one required for WitnetRequestBoards, should not be permitted by the WitnetProxy. - * The contract has been created for testing purposes. - * @author Witnet Foundation - */ -contract WitnetRequestBoardTrojanHorseBadProxiable is Initializable, Proxiable { - address internal immutable _BASE; - bytes32 internal immutable _CODEHASH; - address internal immutable _OWNER; - - constructor() { - address _base = address(this); - bytes32 _codehash; - assembly { - _codehash := extcodehash(_base) - } - _BASE = _base; - _CODEHASH = _codehash; - _OWNER = msg.sender; - } - - modifier onlyOwner { - if (msg.sender == _OWNER) { - _; - } - } - - function initialize(bytes calldata) external { - // WATCH OUT: any one could reset storage context after - // upgrading the WRB to this implementation. - } - - function isUpgradable() external pure returns (bool) { - return false; - } - - function isUpgradableFrom(address) external pure returns (bool) { - return true; - } - - function proxiableUUID() external pure override returns (bytes32) { - return ( - /* On purpose: keccak256("WitnetRequestBoardTrojanHorseBadProxiable") */ - 0x4d3080726a91bfa6730c817863d1d6dc232091b814f64e60803244379b522d7d - ); - } -} diff --git a/test/helpers/WitnetRequestBoardTrojanHorseNotUpgradable.sol b/test/helpers/WitnetRequestBoardTrojanHorseNotUpgradable.sol deleted file mode 100644 index 25ee71d4a..000000000 --- a/test/helpers/WitnetRequestBoardTrojanHorseNotUpgradable.sol +++ /dev/null @@ -1,57 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/* solhint-disable var-name-mixedcase */ - -import "../../contracts/patterns/Initializable.sol"; -import "../../contracts/patterns/Proxiable.sol"; - -/** - * @title Witnet Requests Board Trojan Horse: Proxiable but not-Upgradeable - * @notice Contract to test proxy upgrade assertions. - * @dev Upgrading an existing WitnetRequestBoard implementation with an instance of - * this kind (i.e. Proxiable but not-Upgradeable), should not be permitted by the WitnetProxy. - * The contract has been created for testing purposes. - * @author Witnet Foundation - */ -contract WitnetRequestBoardTrojanHorseNotUpgradable is Initializable, Proxiable { - address internal immutable _BASE; - bytes32 internal immutable _CODEHASH; - address internal immutable _OWNER; - - constructor() { - address _base = address(this); - bytes32 _codehash; - assembly { - _codehash := extcodehash(_base) - } - _BASE = _base; - _CODEHASH = _codehash; - _OWNER = msg.sender; - } - - modifier onlyOwner { - if (msg.sender == _OWNER) { - _; - } - } - - function initialize(bytes calldata) external { - // WATCH OUT: any one could reset storage context after - // upgrading the WRB to this implementation. - } - - function isUpgradableFrom(address) external pure returns (bool) { - return true; - } - - function proxiableUUID() external pure override returns (bytes32) { - return ( - /* keccak256("io.witnet.proxiable.board") */ - 0x9969c6aff411c5e5f0807500693e8f819ce88529615cfa6cab569b24788a1018 - ); - } - - /* On purpose: isUpgradable(bool) not to be implemented */ -} diff --git a/test/helpers/WitnetRequestTestHelper.sol b/test/helpers/WitnetRequestTestHelper.sol deleted file mode 100644 index 66daf60ee..000000000 --- a/test/helpers/WitnetRequestTestHelper.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -import "../../contracts/libs/Witnet.sol"; - -/** - * @title The serialized form of a Witnet data request - */ -contract WitnetRequestTestHelper is IWitnetRequest { - - using Witnet for bytes; - - constructor(bytes memory _bytecode) { - bytecode = _bytecode; - } - - /// Contains a well-formed Witnet Data Request, encoded using Protocol Buffers. - bytes public override bytecode; - - /// Applies Witnet-compatible hash function over the `bytecode()` in order to - /// uniquely identify every possible well-formed Data Request. - function hash() public view override returns (bytes32) { - return bytecode.hash(); - } - - /// Modifies the Witnet Data Request bytecode. - function modifyBytecode(bytes memory _bytecode) public { - bytecode = _bytecode; - } -} diff --git a/test/helpers/WrbProxyTestHelper.sol b/test/helpers/WrbProxyTestHelper.sol deleted file mode 100644 index 05dd2325b..000000000 --- a/test/helpers/WrbProxyTestHelper.sol +++ /dev/null @@ -1,25 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -import "../../contracts/impls/WitnetProxy.sol"; - -/** - * @title Test Helper for the WitnetRequestBoardProxy contract - * @dev The aim of this contract is: - * Raise the visibility modifier of WitnetRequestBoardProxy contract functions for testing purposes - * @author Witnet Foundation - */ -contract WrbProxyTestHelper is WitnetProxy { - - constructor () {} - function getWrbAddress() external view returns(address) { - return implementation(); - } - - function upgradeWitnetRequestBoard(address _newWrb) external { - address[] memory _reporters = new address[](1); - _reporters[0] = msg.sender; - upgradeTo(_newWrb, abi.encode(_reporters)); - } -} diff --git a/test/using_witnet.test.js b/test/using_witnet.test.js deleted file mode 100644 index 24474478f..000000000 --- a/test/using_witnet.test.js +++ /dev/null @@ -1,293 +0,0 @@ -const settings = require("../migrations/witnet.settings") - -const { expectRevert } = require("@openzeppelin/test-helpers") - -const WRB = artifacts.require(settings.artifacts.default.WitnetRequestBoard) -const WRBProxy = artifacts.require(settings.artifacts.default.WitnetProxy) -const WitnetLib = artifacts.require(settings.artifacts.default.WitnetLib) - -const UsingWitnetTestHelper = artifacts.require("UsingWitnetTestHelper") -const WitnetRequest = artifacts.require("WitnetRequestTestHelper") - -const truffleAssert = require("truffle-assertions") - -contract("UsingWitnet", accounts => { - describe("UsingWitnet \"happy path\" test case. " + - "This covers pretty much all the life cycle of a Witnet request:", () => { - const requestHex = "0x01" - const resultHex = "0x1a002fefd8" - const resultDecimal = 3141592 - const drTxHash = "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - - let witnet, clientContract, wrb, proxy, request, requestId, result - let lastAccount1Balance, lastReward - - const ownerAccount = accounts[0] - const reporterAccount = accounts[1] - - before(async () => { - witnet = await WitnetLib.deployed() - await WRB.link(WitnetLib, witnet.address) - if (!proxy) { - // create one and only proxy contract: - proxy = await WRBProxy.new({ from: ownerAccount }) - // let 'wrb' artifact always point to proxy address - wrb = await WRB.at(proxy.address) - } - // notwithstanding, upgrade proxy on each iteration... - await proxy.upgradeTo( - // ...to new implementation instance: - (await WRB.new( - ...settings.constructorParams.default.WitnetRequestBoard, - { from: ownerAccount } - ) - ).address, - // ...resetting reporters ACL: - web3.eth.abi.encodeParameter("address[]", [reporterAccount]), - // ...from owner account. - { from: ownerAccount } - ) - await UsingWitnetTestHelper.link(WitnetLib, witnet.address) - clientContract = await UsingWitnetTestHelper.new(proxy.address) - lastAccount1Balance = await web3.eth.getBalance(accounts[1]) - }) - - it("should create a data request", async () => { - request = await WitnetRequest.new(requestHex) - const internalBytes = await request.bytecode() - assert.equal(internalBytes, requestHex) - }) - - it("should post a data request into the wrb", async () => { - const gasPrice = 1e9 - lastReward = await clientContract.witnetEstimateReward(gasPrice) - requestId = await returnData(clientContract.witnetPostRequest( - request.address, - { - from: accounts[1], - value: lastReward * 2, - gasPrice, - } - )) - assert.equal(requestId, 1) - }) - - it("should have posted and read the same bytes", async () => { - const internalBytes = await wrb.readRequestBytecode(requestId) - assert.equal(internalBytes, requestHex) - }) - - it("should have set the correct rewards", async () => { - // Retrieve rewards - const drInfo = await wrb.readRequest(requestId) - const drReward = drInfo.reward.toString() - assert.equal(drReward, lastReward) - }) - - it("requester balance should decrease", async () => { - const afterBalance = await web3.eth.getBalance(accounts[1]) - assert(parseInt(afterBalance) < parseInt(lastAccount1Balance)) - lastAccount1Balance = afterBalance - }) - - it("client contract balance should remain stable", async () => { - const usingWitnetBalance = await web3.eth.getBalance(clientContract.address) - assert.equal(usingWitnetBalance, 0) - }) - - it("WRB balance should have increased in the exact fare", async () => { - const wrbBalance = await web3.eth.getBalance(wrb.address) - assert.equal(wrbBalance, lastReward) - }) - - it("should upgrade the rewards of an existing data request", async () => { - const gasPrice = 2e9 - lastReward = await clientContract.witnetEstimateReward(gasPrice) - const currentReward = await clientContract.witnetCurrentReward.call(requestId) - await returnData(clientContract.witnetUpgradeReward(requestId, { - from: accounts[1], - value: (lastReward - currentReward) * 2, - gasPrice, - })) - }) - - it("should have upgraded the rewards correctly", async () => { - // Retrieve reward - const drInfo = await wrb.readRequest(requestId) - assert.equal(drInfo.reward.toString(), lastReward.toString()) - }) - - it("requester balance should decrease after rewards upgrade", async () => { - const afterBalance = await web3.eth.getBalance(accounts[1]) - assert(parseInt(afterBalance) < parseInt(lastAccount1Balance)) - lastAccount1Balance = afterBalance - }) - - it("client contract balance should remain stable after rewards upgrade", async () => { - const usingWitnetBalance = await web3.eth.getBalance(clientContract.address) - assert.equal(usingWitnetBalance, 0) - }) - - it("WRB balance should increase after rewards upgrade", async () => { - const wrbBalance = await web3.eth.getBalance(wrb.address) - assert.equal(wrbBalance, lastReward) - }) - - it("should fail if posting result from unauthorized reporter", async () => { - await expectRevert( - wrb.reportResult(requestId, drTxHash, resultHex, { from: ownerAccount }), - "unauthorized reporter" - ) - }) - - it("should post the result of the request into the WRB", async () => { - await returnData(wrb.reportResult(requestId, drTxHash, resultHex, { - from: reporterAccount, - })) - const result = await wrb.readResponseResult.call(requestId) - assert.equal(result.value.buffer.data, resultHex) - }) - - it("should check if the request is resolved", async () => { - assert.equal(await clientContract.witnetCheckRequestResolved(requestId), true) - }) - - it("should pull the result from the WRB back into the client contract", async () => { - await clientContract.witnetReadResult(requestId, { from: accounts[0] }) - result = await clientContract.result() - assert.equal(result.success, true) - assert.equal(result.value.buffer.data, resultHex) - }) - - it("should decode result successfully", async () => { - const actualResultDecimal = await clientContract.witnetAsUint64.call() - assert.equal(actualResultDecimal.toString(), resultDecimal.toString()) - }) - }) - - describe("UsingWitnet \"happy path\" test case with a false result:", () => { - const requestHex = "0x02" - const resultHex = "0xd82701" - const drTxHash = "0xe3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" - - const reward = web3.utils.toWei("1", "ether") - - const ownerAccount = accounts[0] - const reporterAccount = accounts[1] - - const gasPrice = 1e9 - - let witnet, clientContract, wrb, proxy, request, requestId, result - - before(async () => { - witnet = await WitnetLib.deployed() - if (!proxy) { - // create one and only proxy contract: - proxy = await WRBProxy.new() - // let 'wrb' artifact always point to proxy address - wrb = await WRB.at(proxy.address) - // initialize 'wrb' artifact, - // setting 'ownerAccount' as owner - // and 'reporterAccount' as authorized reporter: - await proxy.upgradeTo( - (await WRB.new( - ...settings.constructorParams.default.WitnetRequestBoard - ) - ).address, - web3.eth.abi.encodeParameter("address[]", [reporterAccount]), - { from: ownerAccount } - ) - } - await UsingWitnetTestHelper.link(WitnetLib, witnet.address) - clientContract = await UsingWitnetTestHelper.new(wrb.address) - }) - - it("should create a data request", async () => { - request = await WitnetRequest.new(requestHex) - const internalBytes = await request.bytecode() - assert.equal(internalBytes, requestHex) - }) - - it("should pass the data request to the wrb", async () => { - requestId = await returnData(clientContract.witnetPostRequest( - request.address, - { - from: accounts[0], - value: reward, - gasPrice, - } - )) - assert.equal(requestId, 1) - }) - - it("should check the request is not yet resolved", async () => { - assert.equal(await clientContract.witnetCheckRequestResolved(requestId), false) - }) - - it("should fail if posting result from unauthorized reporter", async () => { - await expectRevert( - wrb.reportResult(requestId, drTxHash, resultHex, { from: ownerAccount }), - "unauthorized reporter" - ) - }) - - it("should report the result in the WRB", async () => { - await returnData(wrb.reportResult(requestId, drTxHash, resultHex, { - from: reporterAccount, - })) - const result = await wrb.readResponseResult(requestId) - assert.equal(result.value.buffer.data, resultHex) - }) - - it("should pull the result from the WRB back to the client contract", async () => { - await clientContract.witnetReadResult(requestId, { from: accounts[1] }) - result = await clientContract.result() - assert.equal(result.value.buffer.data, resultHex) - }) - - it("should detect the result is false", async () => { - await clientContract.witnetReadResult(requestId, { from: accounts[1] }) - result = await clientContract.result() - assert.equal(result.success, false) - }) - - it("should be able to estimate gas cost and post the DR", async () => { - const estimatedReward = await clientContract.witnetEstimateReward.call(gasPrice) - await truffleAssert.passes( - clientContract.witnetPostRequest(request.address, { - from: accounts[1], - value: estimatedReward, - gasPrice, - }), - "Estimated rewards should cover the gas costs" - ) - }) - }) -}) - -function waitForHash (tx) { - return new Promise((resolve, reject) => - tx.on("transactionHash", resolve).catch(reject) - ) -} - -async function returnData (tx) { - const txHash = await waitForHash(tx) - const txReceipt = await web3.eth.getTransactionReceipt(txHash) - if (txReceipt.logs && txReceipt.logs.length > 0) { - const decoded = web3.eth.abi.decodeLog( - [ - { - type: "uint256", - name: "id", - }, { - type: "address", - name: "from", - }, - ], - txReceipt.logs[0].data, - txReceipt.logs[0].topics - ) - return decoded.id - } -} diff --git a/test/wrb.test.js b/test/wrb.test.js deleted file mode 100644 index c993ae8a4..000000000 --- a/test/wrb.test.js +++ /dev/null @@ -1,759 +0,0 @@ -const settings = require("../migrations/witnet.settings") - -const { - BN, - expectEvent, - expectRevert, - balance, - ether, -} = require("@openzeppelin/test-helpers") -const { expect, assert } = require("chai") - -// Contracts -const WRB = artifacts.require(settings.artifacts.default.WitnetRequestBoard) -const WitnetLib = artifacts.require("WitnetLib") -const WitnetRequest = artifacts.require("WitnetRequestTestHelper") -const WitnetRequestTestHelper = artifacts.require("WitnetRequestTestHelper") - -// WitnetRequest definition -const queryId = new BN(1) -// eslint-disable-next-line no-multi-str -const requestHex = "0x0abb0108bd8cb8fa05123b122468747470733a2f2f7777772e6269747374616d702e6e65742f6170692f7469636b65722\ -f1a13841877821864646c6173748218571903e8185b125c123168747470733a2f2f6170692e636f696e6465736b2e636f6d2f76312f6270692f6375\ -7272656e7470726963652e6a736f6e1a2786187782186663627069821866635553448218646a726174655f666c6f61748218571903e8185b1a0d0a0\ -908051205fa3fc00000100322090a0508051201011003100a1804200128\ -46308094ebdc03" -const resultHex = "0x1a000702c8" -const drTxHash = "0x0000000000000000000000000000000000000000000000000000000000000001" - -contract("WitnetRequestBoard", ([ - requester, - owner, - committeeMember, - other, -]) => { - beforeEach(async () => { - await WRB.link(WitnetLib, WitnetLib.address) - this.WitnetRequestBoard = await WRB.new( - ...settings.constructorParams.default.WitnetRequestBoard, - { from: owner } - ) - await this.WitnetRequestBoard.initialize( - web3.eth.abi.encodeParameter("address[]", - [owner, committeeMember]), - { from: owner } - ) - this.WitnetRequest = await WitnetRequest.new(requestHex, { from: requester }) - }) - - describe("deployments", async () => { - it("deploys WitnetRequestBoard successfully", async () => { - expect(this.WitnetRequestBoard.address != null) - }) - }) - - describe("post data request", async () => { - it("creator can post a data request", async () => { - // Initial balance - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const contractInitialBalance = await contractBalanceTracker.get() - - // Post Data Request - const postDataRequestTx = await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("1"), - } - ) - - // Check `PostedRequest` event - expectEvent( - postDataRequestTx, - "PostedRequest", - { - queryId, - } - ) - expect(postDataRequestTx.logs[0].args.queryId, "match data request id").to.be.bignumber.equal(queryId) - - // Check contract balance (increased by reward) - const contractFinalBalance = await contractBalanceTracker.get() - expect( - contractFinalBalance.eq(contractInitialBalance - .add(ether("1")) - ), - "contract balance should have increase after the request creation by 1 eth", - ).to.equal(true) - }) - it("creator can post data requests with sequential identifiers", async () => { - // Post Data Requests - const postDataRequestTx1 = await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("1"), - }) - const postDataRequestTx2 = await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("1"), - }) - - // Check `PostedRequest` events - expectEvent( - postDataRequestTx1, - "PostedRequest", - { - queryId, - }) - expect(postDataRequestTx1.logs[0].args.queryId, "match data request id").to.be.bignumber.equal(queryId) - // Check `PostedRequest` events - expectEvent( - postDataRequestTx2, - "PostedRequest", - { - queryId: queryId.add(new BN(1)), - }) - expect( - postDataRequestTx2.logs[0].args.queryId, - "match data request id" - ).to.be.bignumber.equal(queryId.add(new BN(1))) - }) - it("fails if creator is not covering DR reward", async () => { - // Transaction value < reward - await expectRevert( - this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("0"), - gasPrice: 1, - } - ), - "reward too low." - ) - }) - it("fails if creator is not covering DR result report gas cost", async () => { - // Tally reward < ESTIMATED_REPORT_RESULT_GAS - await expectRevert( - this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: new BN("1"), - gasPrice: 1, - } - ), - "reward too low." - ) - }) - it("reading bytecode from unsolved query works if the request was not modified before being solved", async () => { - await this.WitnetRequestBoard.postRequest(this.WitnetRequest.address, { from: requester, value: ether("1") }) - assert.equal( - await this.WitnetRequest.bytecode.call(), - await this.WitnetRequestBoard.readRequestBytecode.call(1) - ) - }) - it("reading bytecode from unsolved query fails if the request gets modified before being solved", async () => { - await this.WitnetRequestBoard.postRequest(this.WitnetRequest.address, { from: requester, value: ether("1") }) - const newDrBytes = web3.utils.fromAscii("This is a different DR") - await this.WitnetRequest.modifyBytecode(newDrBytes) - await expectRevert( - this.WitnetRequestBoard.readRequestBytecode.call(1), - "bytecode changed after posting" - ) - }) - }) - - describe("upgrade data request", async () => { - beforeEach(async () => { - await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("1"), - gasPrice: 1e9, - } - ) - }) - it("anyone can upgrade existing data request increasing the reward", async () => { - // Initial balance - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const contractInitialBalance = await contractBalanceTracker.get() - - // Update data request (increased reward) - await this.WitnetRequestBoard.upgradeReward(queryId, { - from: other, - value: ether("1"), - gasPrice: 2e9, - }) - - // Check contract balance (increased by reward) - const contractFinalBalance = await contractBalanceTracker.get() - expect( - contractFinalBalance.eq(contractInitialBalance - .add(ether("1")) - ), - "contract balance should have increased after request upgrade by 1 eth", - ).to.equal(true) - }) - it("anyone can upgrade existing data request gas price", async () => { - // Update data request (increased reward) - await this.WitnetRequestBoard.upgradeReward(queryId, { - from: other, - value: ether("1"), - gasPrice: 3e9, - }) - - // Read data request gas price from WitnetRequestBoard by `queryId` - const gasPrice = await this.WitnetRequestBoard.readRequestGasPrice.call(queryId, { from: other }) - - // Check that gas price has been updated to 3 wei - expect( - gasPrice.eq(new BN(3e9)), - "data request gas price should have been set to 3 gwei", - ).to.equal(true) - }) - it("creator cannot decrease existing data request gas price", async () => { - // Update data request (increased reward) - await this.WitnetRequestBoard.upgradeReward(queryId, { - from: requester, - value: ether("1"), - gasPrice: 3e9, - }) - // Read data request gas price from WitnetRequestBoard by `queryId` - const gasPrice = await this.WitnetRequestBoard.readRequestGasPrice.call(queryId, { from: other }) - // Check that gas price has not been updated to 1 wei - expect( - gasPrice.eq(new BN(3e9)), - "data request gas price should not have been set to 1 gwei", - ).to.equal(true) - }) - it("fails if anyone upgrades DR with new gas price that decreases reward below gas limit", async () => { - // Report result reward < ESTIMATED_REPORT_RESULT_GAS * newGasPrice - const newGasPrice = ether("0.01") - await expectRevert( - this.WitnetRequestBoard.upgradeReward(queryId, { - from: requester, - value: ether("0"), - gasPrice: newGasPrice, - }), - "reward too low" - ) - }) - it("fails if result is already reported", async () => { - await this.WitnetRequestBoard.reportResult( - queryId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - // Update data request (increased reward) - await expectRevert( - this.WitnetRequestBoard.upgradeReward(queryId, { - from: requester, - value: ether("1"), - gasPrice: 3e9, - }), - "not in Posted status" - ) - }) - }) - - describe("report data request result", async () => { - beforeEach(async () => { - // Post data request - await this.WitnetRequestBoard.postRequest(this.WitnetRequest.address, { - from: requester, - value: ether("1"), - gasPrice: 1e9, - }) - }) - it("committee members can report a request result from Witnet and it should receive the reward", async () => { - // Initial balances - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const ownerBalanceTracker = await balance.tracker(owner) - const contractInitialBalance = await contractBalanceTracker.get() - const ownerInitialBalance = await ownerBalanceTracker.get() - - // Report data request result from Witnet to WitnetRequestBoard - const reportResultTx = await this.WitnetRequestBoard.reportResult( - queryId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - - // Check `PostedRequest` event - expectEvent( - reportResultTx, - "PostedResult", - { - queryId, - }, - ) - expect(reportResultTx.logs[0].args.queryId, "match data request id").to.be.bignumber.equal(queryId) - - // Check balances (contract decreased and claimer increased) - const contractFinalBalance = await contractBalanceTracker.get() - const ownerFinalBalance = await ownerBalanceTracker.get() - - expect( - contractFinalBalance.eq(contractInitialBalance - .sub(ether("1")) - ), - "contract balance should have decreased after reporting dr request result by 1 eth", - ).to.equal(true) - expect( - ownerFinalBalance.gt(ownerInitialBalance), - "Owner balance should have increased after reporting result", - ).to.equal(true) - }) - it("fails if reporter is not a committee member", async () => { - await expectRevert( - this.WitnetRequestBoard.reportResult(queryId, drTxHash, resultHex, { - from: other, - gasPrice: 1e9, - }), - "unauthorized reporter" - ) - }) - it("fails if trying to report with zero as Witnet drTxHash", async () => { - await expectRevert( - this.WitnetRequestBoard.reportResult( - queryId, "0x0", resultHex, - { from: owner, gasPrice: 1e9 } - ), - "drTxHash cannot be zero" - ) - }) - it("fails if result was already reported", async () => { - // Report data request result from Witnet to WitnetRequestBoard - await this.WitnetRequestBoard.reportResult( - queryId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - - // Try to report the result of the previous data request - await expectRevert( - this.WitnetRequestBoard.reportResult(queryId, drTxHash, resultHex, { - from: committeeMember, - gasPrice: 1e9, - }), - "not in Posted status" - ) - }) - it("fails if data request has not been posted", async () => { - await expectRevert( - this.WitnetRequestBoard.reportResult( - queryId.add(new BN(1)), drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ), - "not in Posted status" - ) - }) - it("retrieves null array if trying to read bytecode from solved data request", async () => { - await this.WitnetRequestBoard.reportResult( - queryId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - const bytecode = await this.WitnetRequestBoard.readRequestBytecode.call(queryId) - assert(bytecode == null) - }) - }) - - describe("batch report multiple results", async () => { - beforeEach(async () => { - for (let j = 0; j < 3; j++) { - await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, { - from: requester, - value: ether("1"), - gasPrice: 1e9, - } - ) - } - }) - it("fails if trying to batch report valid results from unauthorized address", async () => { - await expectRevert( - this.WitnetRequestBoard.reportResultBatch( - [ - [1, 0, drTxHash, resultHex], - [2, 0, drTxHash, resultHex], - [3, 0, drTxHash, resultHex], - ], - true, - { from: other, gasPrice: 1e9 } - ), - "unauthorized reporter" - ) - }) - it("committee member can batch report multiple results, and receive the sum of all rewards", async () => { - // Initial balances - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const ownerBalanceTracker = await balance.tracker(owner) - const contractInitialBalance = await contractBalanceTracker.get() - const ownerInitialBalance = await ownerBalanceTracker.get() - - // Report data request result from Witnet to WitnetRequestBoard - const tx = await this.WitnetRequestBoard.reportResultBatch( - [ - [1, 0, drTxHash, resultHex], - [2, 0, drTxHash, resultHex], - [3, 0, drTxHash, resultHex], - ], - false, - { from: owner, gasPrice: 1e9 } - ) - - // Check balances (contract decreased and claimer increased) - const contractFinalBalance = await contractBalanceTracker.get() - const ownerFinalBalance = await ownerBalanceTracker.get() - expect( - contractFinalBalance.eq(contractInitialBalance - .sub(ether("3")) - ), - "contract balance should have decreased after reporting dr request result by 3 eth", - ).to.equal(true) - expect( - ownerFinalBalance.gt(ownerInitialBalance), - "Owner balance should have increased after reporting result", - ).to.equal(true) - - // Check number of PostedResult events - expect( - tx.logs.filter(log => log.event === "PostedResult").length, - "PostedResult event should have been emitted three times" - ).to.equal(3) - }) - it( - "trying to verbose batch report same query twice, should pay reward once and emit error event once", - async () => { - // Initial balances - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const ownerBalanceTracker = await balance.tracker(owner) - const contractInitialBalance = await contractBalanceTracker.get() - const ownerInitialBalance = await ownerBalanceTracker.get() - - // Report data request result from Witnet to WitnetRequestBoard - const tx = await this.WitnetRequestBoard.reportResultBatch( - [ - [3, 0, drTxHash, resultHex], - [3, 0, drTxHash, resultHex], - ], - true, - { from: owner, gasPrice: 1e9 } - ) - - // Check balances (contract decreased and claimer increased) - const contractFinalBalance = await contractBalanceTracker.get() - const ownerFinalBalance = await ownerBalanceTracker.get() - expect( - contractFinalBalance.eq(contractInitialBalance - .sub(ether("1")) - ), - "contract balance should have decreased after reporting dr request result by 3 eth", - ).to.equal(true) - expect( - ownerFinalBalance.gt(ownerInitialBalance), - "Owner balance should have increased after reporting result", - ).to.equal(true) - - // Check number of emitted PostedResult events: - expect( - tx.logs.filter(log => log.event === "PostedResult").length, - "PostedResult event should have been emitted once" - ).to.equal(1) - - // Check number and quality of BatchReportError events: - const errors = tx.logs.filter(log => log.event === "BatchReportError") - expect( - errors.length, - "BatchReportResult event should have been emitted just once" - ).to.equal(1) - expect( - errors[0].args.queryId.toString(), - "BatchReportResult event refers unexpected query id" - ).to.equal("3") - expect( - errors[0].args.reason, - "BatchReportResult manifest wrong reason" - ).to.contain("bad queryId") - }) - it( - "reporting bad drTxHash within non-verbose batch, should pay rewards for valid results and emit no error event", - async () => { - // Initial balances - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const ownerBalanceTracker = await balance.tracker(owner) - const contractInitialBalance = await contractBalanceTracker.get() - const ownerInitialBalance = await ownerBalanceTracker.get() - - // Report data request result from Witnet to WitnetRequestBoard - const tx = await this.WitnetRequestBoard.reportResultBatch( - [ - [1, 0, drTxHash, resultHex], - [2, 0, "0x0000000000000000000000000000000000000000000000000000000000000000", resultHex], - [3, 0, drTxHash, resultHex], - ], - false, - { from: owner, gasPrice: 1e9 } - ) - - // Check balances (contract decreased and claimer increased) - const contractFinalBalance = await contractBalanceTracker.get() - const ownerFinalBalance = await ownerBalanceTracker.get() - expect( - contractFinalBalance.eq(contractInitialBalance - .sub(ether("2")) - ), - "contract balance should have decreased after reporting dr request result by 2 eth", - ).to.equal(true) - expect( - ownerFinalBalance.gt(ownerInitialBalance), - "Owner balance should have increased after reporting result", - ).to.equal(true) - - // Check number of emitted PostedResult events: - expect( - tx.logs.filter(log => log.event === "PostedResult").length, - "PostedResult event should have been emitted three times" - ).to.equal(2) - - // Check number of BatchReportError events: - const errors = tx.logs.filter(log => log.event === "BatchReportError") - expect( - errors.length, - "No BatchReportResult events should have been emitted" - ).to.equal(0) - }) - it( - "reporting bad results within verbose batch, should pay no reward and emit no PostedResult events", async () => { - // Initial balances - const contractBalanceTracker = await balance.tracker(this.WitnetRequestBoard.address) - const contractInitialBalance = await contractBalanceTracker.get() - - // Report data request result from Witnet to WitnetRequestBoard - const tx = await this.WitnetRequestBoard.reportResultBatch( - [ - [1, 0, drTxHash, "0x"], - [3, 0, "0x0000000000000000000000000000000000000000000000000000000000000000", resultHex], - [2, 4070905200 /* 2099-01-01 00:00:00 UTC */, drTxHash, resultHex], - ], - true, - { from: owner, gasPrice: 1e9 } - ) - - // Check balances (contract decreased and claimer increased) - const contractFinalBalance = await contractBalanceTracker.get() - expect( - contractFinalBalance.eq( - contractInitialBalance - ), - "contract balance should have not changed", - ).to.equal(true) - - // Check number of emitted PostedResult events: - expect( - tx.logs.filter(log => log.event === "PostedResult").length, - "Should have not emitted any PostedResult event" - ).to.equal(0) - - // Check number and quality of BatchReportError events: - const errors = tx.logs.filter(log => log.event === "BatchReportError") - expect( - errors.length, - "Three BatchReportResult events should have been emitted" - ).to.equal(3) - expect( - errors[0].args.queryId.toString(), - "First BatchReportResult event refers to unexpected query id" - ).to.equal("1") - expect( - errors[0].args.reason, - "First BatchReportResult manifests wrong reason" - ).to.contain("bad cborBytes") - expect( - errors[1].args.queryId.toString(), - "Second BatchReportResult event refers to unexpected query id" - ).to.equal("3") - expect( - errors[1].args.reason, - "Second BatchReportResult manifests wrong reason" - ).to.contain("bad drTxHash") - expect( - errors[2].args.queryId.toString(), - "Third BatchReportResult event refers to unexpected query id" - ).to.equal("2") - expect( - errors[2].args.reason, - "Third BatchReportResult manifests wrong reason" - ).to.contain("bad timestamp") - }) - }) - - describe("read data request result", async () => { - let requestTestHelper - beforeEach(async () => { - requestTestHelper = await WitnetRequestTestHelper.new(requestHex, { from: requester }) - // Post data request - await this.WitnetRequestBoard.postRequest(requestTestHelper.address, { - from: requester, - value: ether("1"), - }) - // Report data request result from Witnet to WitnetRequestBoard - await this.WitnetRequestBoard.reportResult(queryId, drTxHash, resultHex, { - from: committeeMember, - gasPrice: 1e9, - }) - }) - it("anyone can read the data request result", async () => { - // Read data request result from WitnetRequestBoard by `queryId` - const result = await this.WitnetRequestBoard.readResponseResult(queryId, { from: requester }) - expect(result.value.buffer.data).to.be.equal(resultHex) - }) - it("should revert reading data for non-existent Ids", async () => { - await expectRevert(this.WitnetRequestBoard.readRequestBytecode.call(200), "not yet posted") - await expectRevert(this.WitnetRequestBoard.readResponseDrTxHash.call(200), "not in Reported status") - await expectRevert(this.WitnetRequestBoard.readResponseResult.call(200), "not in Reported status") - }) - }) - - describe("read data request gas price", async () => { - beforeEach(async () => { - await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("1"), - gasPrice: 1e9, - } - ) - }) - it("anyone can read data request gas price", async () => { - // Read data request gas price from WitnetRequestBoard by `queryId` - const gasPrice = await this.WitnetRequestBoard.readRequestGasPrice.call(queryId, { from: other }) - expect( - gasPrice.eq(new BN(1e9)), - "data request gas price should have been set to 1 gwei", - ).to.equal(true) - }) - }) - - describe("estimate gas cost", async () => { - it("anyone can estime a data request gas cost", async () => { - // Gas price = 1 - const maxResRe = new BN(135000) - const reward = await this.WitnetRequestBoard.estimateReward.call(1) - expect( - reward.lte(maxResRe), - `The estimated maximum gas cost for result reward should be less than ${maxResRe.toString()}` - ).to.equal(true) - } - ) - }) - - describe("delete data request", async () => { - let drId - beforeEach(async () => { - const tx = await this.WitnetRequestBoard.postRequest( - this.WitnetRequest.address, - { - from: requester, - value: ether("0.1"), - gasPrice: 1e9, - } - ) - drId = tx.logs[0].args[0] - }) - it("fails if trying to delete data request from non requester address", async () => { - await this.WitnetRequestBoard.reportResult( - drId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - await expectRevert( - this.WitnetRequestBoard.deleteQuery(drId, { from: other }), - "only requester" - ) - }) - it("unsolved data request cannot be deleted", async () => { - await expectRevert( - this.WitnetRequestBoard.deleteQuery(drId, { from: requester }), - "not in Reported status" - ) - }) - it("requester can delete solved data request", async () => { - await this.WitnetRequestBoard.reportResult( - drId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - await this.WitnetRequestBoard.deleteQuery(drId, { from: requester }) - }) - it("fails if reporting result on deleted data request", async () => { - await this.WitnetRequestBoard.reportResult( - drId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - await this.WitnetRequestBoard.deleteQuery(drId, { from: requester }) - await expectRevert( - this.WitnetRequestBoard.reportResult( - drId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ), - "not in Posted status" - ) - }) - it("retrieves null array if trying to read bytecode from deleted data request", async () => { - await this.WitnetRequestBoard.reportResult( - drId, drTxHash, resultHex, - { from: owner, gasPrice: 1e9 } - ) - await this.WitnetRequestBoard.deleteQuery(drId, { from: requester }) - const bytecode = await this.WitnetRequestBoard.readRequestBytecode.call(drId) - assert(bytecode == null) - }) - }) - - describe("interfaces", async () => { - describe("Upgradeable:", async () => { - it("initialization fails if called from non owner address", async () => { - await expectRevert( - this.WitnetRequestBoard.initialize( - web3.eth.abi.encodeParameter("address[]", [other]), - { from: other } - ), - "only owner" - ) - }) - it("cannot initialize same instance more than once", async () => { - await expectRevert( - this.WitnetRequestBoard.initialize( - web3.eth.abi.encodeParameter("address[]", [other]), - { from: owner } - ), - "already upgraded" - ) - }) - }) - - describe("Destructible:", async () => { - it("fails if trying to destruct from non owner address", async () => { - await expectRevert( - this.WitnetRequestBoard.destruct({ from: other }), - "not the owner" - ) - }) - it("instance gets actually destructed", async () => { - await this.WitnetRequestBoard.destruct({ from: owner }) - await expectRevert( - this.WitnetRequestBoard.getNextQueryId(), - "Out of Gas?" - ) - }) - it("fails if trying to delete unposted DR", async () => { - await expectRevert( - this.WitnetRequestBoard.deleteQuery(200, { from: owner }), - "not in Reported status" - ) - }) - }) - }) -}) diff --git a/test/wrb_proxy.test.js b/test/wrb_proxy.test.js deleted file mode 100644 index 5551efe52..000000000 --- a/test/wrb_proxy.test.js +++ /dev/null @@ -1,258 +0,0 @@ -const settings = require("../migrations/witnet.settings") - -const { assert } = require("chai") -const truffleAssert = require("truffle-assertions") - -const WitnetLib = artifacts.require(settings.artifacts.default.WitnetLib) - -const WitnetRequest = artifacts.require("WitnetRequestTestHelper") -const WitnetRequestBoard = artifacts.require("WitnetRequestBoardTestHelper") -const WrbProxyHelper = artifacts.require("WrbProxyTestHelper") -const TrojanHorseNotUpgradable = artifacts.require("WitnetRequestBoardTrojanHorseNotUpgradable") -const TrojanHorseBadProxiable = artifacts.require("WitnetRequestBoardTrojanHorseBadProxiable") - -contract("Witnet Requests Board Proxy", accounts => { - describe("Witnet Requests Board Proxy test suite:", () => { - const contractOwner = accounts[0] - const requestSender = accounts[1] - - let witnet - let wrbInstance1 - let wrbInstance2 - let wrbInstance3 - let proxy - let wrb - - before(async () => { - witnet = await WitnetLib.deployed() - await WitnetRequestBoard.link(WitnetLib, witnet.address) - wrbInstance1 = await WitnetRequestBoard.new([contractOwner], true) - wrbInstance2 = await WitnetRequestBoard.new([contractOwner], true) - wrbInstance3 = await WitnetRequestBoard.new([contractOwner], false) - proxy = await WrbProxyHelper.new({ from: accounts[2] }) - proxy.upgradeWitnetRequestBoard(wrbInstance1.address, { from: contractOwner }) - wrb = await WitnetRequestBoard.at(proxy.address) - }) - - it("should revert when inserting id 0", async () => { - // It should revert because of non-existent id 0 - await truffleAssert.reverts( - wrb.upgradeReward(0, { from: requestSender }), - "not in Posted" - ) - }) - - it("should post a data request and update the getNextQueryId meter", async () => { - // The data request to be posted - const drBytes = web3.utils.fromAscii("This is a DR") - const request = await WitnetRequest.new(drBytes) - - // Post the data request through the Proxy - const tx1 = wrb.postRequest(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - const txHash1 = await waitForHash(tx1) - const txReceipt1 = await web3.eth.getTransactionReceipt(txHash1) - - // The id of the data request - const id1 = parseInt(decodeWitnetLogs(txReceipt1.logs, 0).id) - const nextId = await wrb.getNextQueryId.call() - - // check the nextId has been updated in the Proxy when posting the data request - assert.equal((id1 + 1).toString(), nextId.toString()) - }) - - it("fails if trying to upgrade to null contract", async () => { - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard("0x0000000000000000000000000000000000000000", { from: contractOwner }), - "null implementation" - ) - }) - - it("fails if owner tries to upgrade to same implementation instance as current one", async () => { - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(await proxy.implementation.call(), { from: contractOwner }), - "nothing to upgrade" - ) - }) - - it("fails if owner tries to upgrade to non-Initializable implementation", async () => { - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(proxy.address, { from: contractOwner }), - "" - ) - }) - - it("fails if foreigner tries to upgrade to compliant new implementation", async () => { - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(wrbInstance2.address, { from: requestSender }), - "not authorized" - ) - }) - - it("fails if owner tries to upgrade to not Upgradeable-compliant implementation", async () => { - const troyHorse = await TrojanHorseNotUpgradable.new() - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(troyHorse.address, { from: contractOwner }), - "not compliant" - ) - }) - - it("fails if owner tries to upgrade to a bad Proxiable-compliant implementation", async () => { - const troyHorse = await TrojanHorseBadProxiable.new() - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(troyHorse.address, { from: contractOwner }), - "proxiableUUIDs mismatch" - ) - }) - - it("should upgrade proxy to compliant new implementation, if called from owner address", async () => { - // The data request to be posted - const drBytes = web3.utils.fromAscii("This is a DR") - const request = await WitnetRequest.new(drBytes) - - // Post the data request through the Proxy - const tx1 = wrb.postRequest(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - const txHash1 = await waitForHash(tx1) - const txReceipt1 = await web3.eth.getTransactionReceipt(txHash1) - - // The id of the data request, it should be equal 2 since is the second DR - const id1 = decodeWitnetLogs(txReceipt1.logs, 0).id - assert.equal(id1, 2) - - // Upgrade the WRB address to wrbInstance2 (destroying wrbInstance1) - await proxy.upgradeWitnetRequestBoard(wrbInstance2.address, { from: contractOwner }) - - // The current wrb in the proxy should be equal to wrbInstance2 - assert.equal(await proxy.implementation.call(), wrbInstance2.address) - }) - - it("fails if foreigner tries to re-initialize current implementation", async () => { - await truffleAssert.reverts( - wrb.initialize(web3.eth.abi.encodeParameter("address[]", [requestSender]), { from: requestSender }), - "only owner" - ) - }) - - it("fails also if the owner tries to re-initialize current implementation", async () => { - await truffleAssert.reverts( - wrb.initialize(web3.eth.abi.encodeParameter("address[]", [requestSender]), { from: contractOwner }), - "already upgraded" - ) - }) - - it("should post a data request to new WRB and keep previous data request routes", async () => { - // The data request to be posted - const drBytes = web3.utils.fromAscii("This is a DR") - const request = await WitnetRequest.new(drBytes) - - // The id of the data request - const id2 = await wrb.postRequest.call(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - assert.equal(id2, 3) - - // Post the data request through the Proxy - await waitForHash( - wrb.postRequest(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - ) - - // Reading previous query (<3) should work: - await wrb.getQueryData.call(2) - }) - - it("should post a data request to WRB and read the result", async () => { - // The data request to be posted - const drBytes = web3.utils.fromAscii("This is a DR") - const request = await WitnetRequest.new(drBytes) - - // The id of the data request with result "hello" - const id2 = await wrb.postRequest.call(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - assert.equal(id2, 4) - - // Post the data request through the Proxy - await waitForHash( - wrb.postRequest(request.address, { - from: requestSender, - value: web3.utils.toWei("0.5", "ether"), - }) - ) - - // Read the actual result of the DR - const result = await wrb.readResponseResult.call(id2) - assert.equal(result.value.buffer.data, web3.utils.fromAscii("hello")) - }) - - it("should read the result of a dr of an old wrb", async () => { - // Upgrade the WRB address to wrbInstance3 - await proxy.upgradeWitnetRequestBoard(wrbInstance3.address, { - from: contractOwner, - }) - - // Read the actual result of the DR - const result = await wrb.readResponseResult.call(4) - assert.equal(result.value.buffer.data, web3.utils.fromAscii("hello")) - }) - - it("a solved data request can only be deleted by actual requester", async () => { - // Read the result of the DR just before destruction: - const response = await wrb.deleteQuery.call(4, { from: requestSender }) - const result = await wrb.resultFromCborBytes.call(response.cborBytes) - assert.equal(result.value.buffer.data, web3.utils.fromAscii("hello")) - - await truffleAssert.reverts( - wrb.deleteQuery(4, { from: contractOwner }), - "only requester" - ) - const tx = await wrb.deleteQuery(4, { from: requestSender }) // should work - assert.equal(tx.logs[0].args[1], requestSender) - }) - - it("retrieves null array if trying to get bytecode from deleted DRs", async () => { - const bytecode = await wrb.readRequestBytecode.call(4) - assert(bytecode == null) - }) - - it("fails if trying to upgrade a non upgradable implementation", async () => { - // It should revert when trying to upgrade the wrb since wrbInstance3 is not upgradable - await truffleAssert.reverts( - proxy.upgradeWitnetRequestBoard(wrbInstance1.address, { from: contractOwner }), - "not upgradable" - ) - }) - }) -}) - -const waitForHash = txQ => - new Promise((resolve, reject) => - txQ.on("transactionHash", resolve).catch(reject) - ) - -function decodeWitnetLogs (logs, index) { - if (logs.length > index) { - return web3.eth.abi.decodeLog( - [ - { - type: "uint256", - name: "id", - }, { - type: "address", - name: "from", - }, - ], - logs[index].data, - logs[index].topcis - ) - } -} From 089ed3268e41bed2c7f120bff0e737c63346c138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:18:44 +0100 Subject: [PATCH 096/149] chore: revisit tests --- test/TestWitnetEncodingLib.sol | 40 +++++++++++++++++----------------- test/witnet_bytecodes.test.js | 12 +++++----- test/witnet_randomness.test.js | 6 ++--- 3 files changed, 30 insertions(+), 28 deletions(-) diff --git a/test/TestWitnetEncodingLib.sol b/test/TestWitnetEncodingLib.sol index ba2db8d31..64628a4ab 100644 --- a/test/TestWitnetEncodingLib.sol +++ b/test/TestWitnetEncodingLib.sol @@ -42,18 +42,18 @@ contract TestWitnetEncodingLib { function testEncodeRadonReducerOpcodes() external { bytes memory bytecode = WitnetEncodingLib.encode( - WitnetV2.RadonReducerOpcodes.StandardDeviation + Witnet.RadonReducerOpcodes.StandardDeviation ); Assert.equal( keccak256(bytecode), keccak256(hex"1007"), - "bad encode(WitnetV2.RadonReducerOpcodes)" + "bad encode(Witnet.RadonReducerOpcodes)" ); } function testEncodeRadonSLA() external { bytes memory bytecode = WitnetEncodingLib.encode( - WitnetV2.RadonSLA({ + Witnet.RadonSLA({ numWitnesses: 10, minConsensusPercentage: 51, minerCommitRevealFee: 1000000, @@ -65,28 +65,28 @@ contract TestWitnetEncodingLib { Assert.equal( keccak256(bytecode), keccak256(hex"10c0843d180a20c0843d283330c096b102"), - "bad encode(WitnetV2.RadonSLA)" + "bad encode(Witnet.RadonSLA)" ); } function testEncodeRadonReducer1Filter() external { - WitnetV2.RadonReducer memory reducer; - reducer.opcode = WitnetV2.RadonReducerOpcodes.Mode; - reducer.filters = new WitnetV2.RadonFilter[](1); - reducer.filters[0].opcode = WitnetV2.RadonFilterOpcodes.StandardDeviation; + Witnet.RadonReducer memory reducer; + reducer.opcode = Witnet.RadonReducerOpcodes.Mode; + reducer.filters = new Witnet.RadonFilter[](1); + reducer.filters[0].opcode = Witnet.RadonFilterOpcodes.StandardDeviation; reducer.filters[0].args = hex"fa40200000"; bytes memory bytecode = WitnetEncodingLib.encode(reducer); // emit Log(bytecode); Assert.equal( keccak256(bytecode), keccak256(hex"0a0908051205fa402000001002"), - "bad encode(WitnetV2.RadonReducer)" + "bad encode(Witnet.RadonReducer)" ); } function testEncodeRadonRetrievalUrlOnly() external { - WitnetV2.RadonRetrieval memory source; - source.method = WitnetV2.DataRequestMethods.HttpGet; + Witnet.RadonRetrieval memory source; + source.method = Witnet.RadonDataRequestMethods.HttpGet; source.url = "https://data.messar.io/api/v1/assets/\\0\\/metrics/market-data?fields=market_data/price_\\1\\"; source.script = hex"861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b"; bytes memory bytecode = WitnetEncodingLib.encode(source); @@ -94,13 +94,13 @@ contract TestWitnetEncodingLib { Assert.equal( keccak256(bytecode), keccak256(hex"128b010801125968747470733a2f2f646174612e6d65737361722e696f2f6170692f76312f6173736574732f5c305c2f6d6574726963732f6d61726b65742d646174613f6669656c64733d6d61726b65745f646174612f70726963655f5c315c1a2c861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b"), - "bad encode(WitnetV2.RadonRetrieval)" + "bad encode(Witnet.RadonRetrieval)" ); } function testEncodeRadonRetrievalUrlBodyHeaders() external { - WitnetV2.RadonRetrieval memory source; - source.method = WitnetV2.DataRequestMethods.HttpPost; + Witnet.RadonRetrieval memory source; + source.method = Witnet.RadonDataRequestMethods.HttpPost; source.url = "https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v3"; source.body = "{\"query\":\"{pool(id:\\\"0xc2a856c3aff2110c1171b8f942256d40e980c726\\\"){token1Price}}\"}"; source.headers = new string[2][](2); @@ -113,7 +113,7 @@ contract TestWitnetEncodingLib { keccak256(bytecode), keccak256( hex"1285020803123a68747470733a2f2f6170692e74686567726170682e636f6d2f7375626772617068732f6e616d652f756e69737761702f756e69737761702d76331a2c861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b22527b227175657279223a227b706f6f6c2869643a5c223078633261383536633361666632313130633131373162386639343232353664343065393830633732365c22297b746f6b656e3150726963657d7d227d2a190a0a757365722d6167656e74120b7769746e65742d727573742a280a0c636f6e74656e742d747970651218746578742f68746d6c3b20636861727365743d7574662d38"), - "bad encode(WitnetV2.RadonRetrieval)" + "bad encode(Witnet.RadonRetrieval)" ); } @@ -134,7 +134,7 @@ contract TestWitnetEncodingLib { function testVerifyRadonScriptOk1() external { Assert.equal( uint(WitnetEncodingLib.verifyRadonScriptResultDataType(hex"861877821866646461746182186664706f6f6c8218646b746f6b656e3150726963658218571a000f4240185b")), - uint(WitnetV2.RadonDataTypes.Integer), + uint(Witnet.RadonDataTypes.Integer), "unexpected result data type" ); } @@ -142,7 +142,7 @@ contract TestWitnetEncodingLib { function testVerifyRadonScriptOk2() external { Assert.equal( uint(WitnetEncodingLib.verifyRadonScriptResultDataType(hex"80")), - uint(WitnetV2.RadonDataTypes.Any), + uint(Witnet.RadonDataTypes.Any), "unexpected result data type" ); } @@ -150,7 +150,7 @@ contract TestWitnetEncodingLib { function testVerifyRadonScriptOk3() external { Assert.equal( uint(WitnetEncodingLib.verifyRadonScriptResultDataType(hex"8218778218676445746167")), - uint(WitnetV2.RadonDataTypes.String), + uint(Witnet.RadonDataTypes.String), "unexpected result data type" ); } @@ -158,7 +158,7 @@ contract TestWitnetEncodingLib { function testVerifyRadonScriptOk4() external { Assert.equal( uint(WitnetEncodingLib.verifyRadonScriptResultDataType(hex"880B821866646461746182186165706169727382118282186762696483187582635C305CF5F4821818F48218646D746F6B656E5C315C50726963658218571A000F4240185B")), - uint(WitnetV2.RadonDataTypes.Integer), + uint(Witnet.RadonDataTypes.Integer), "unexpected result data type" ); } @@ -166,7 +166,7 @@ contract TestWitnetEncodingLib { function testVerifyRadonScriptOk5() external { Assert.equal( uint(WitnetEncodingLib.verifyRadonScriptResultDataType(hex"851876821182821867657469746c65831875a1635c315cf5f4821183821867696d65726765645f617418748218430082181800821867657374617465")), - uint(WitnetV2.RadonDataTypes.String), + uint(Witnet.RadonDataTypes.String), "unexpected result data type" ); } diff --git a/test/witnet_bytecodes.test.js b/test/witnet_bytecodes.test.js index b3cd827d3..e81945511 100644 --- a/test/witnet_bytecodes.test.js +++ b/test/witnet_bytecodes.test.js @@ -1,9 +1,10 @@ -const utils = require("../scripts/utils") +const utils = require("../src/utils") const { expectEvent, expectRevert } = require("@openzeppelin/test-helpers") const { assert } = require("chai") const { expectRevertCustomError } = require("custom-error-test-helper") -const WitnetBytecodes = artifacts.require("WitnetBytecodes") +const WitnetBytecodes = artifacts.require("WitnetBytecodesDefault") +const WitnetEncodingLib = artifacts.require("WitnetEncodingLib") const WitnetV2 = artifacts.require("WitnetV2") contract("WitnetBytecodes", (accounts) => { @@ -14,6 +15,7 @@ contract("WitnetBytecodes", (accounts) => { let bytecodes before(async () => { + await WitnetBytecodes.link(WitnetEncodingLib, WitnetEncodingLib.address) bytecodes = await WitnetBytecodes.new( true, utils.fromAscii("testing") @@ -104,7 +106,7 @@ contract("WitnetBytecodes", (accounts) => { let btcUsdPriceFeedHash context("verifyRadonRetrieval(..)", async () => { - context("WitnetV2.DataRequestMethods.Rng", async () => { + context("WitnetV2.RadonDataRequestMethods.Rng", async () => { it("emits appropiate single event when verifying randomness data source for the first time", async () => { const tx = await bytecodes.verifyRadonRetrieval( 2, // requestMethod @@ -150,7 +152,7 @@ contract("WitnetBytecodes", (accounts) => { }) // ... reverts }) - context("WitnetV2.DataRequestMethods.HttpGet", async () => { + context("WitnetV2.RadonDataRequestMethods.HttpGet", async () => { it( "emits new data provider and source events when verifying a new http-get source for the first time", async () => { const tx = await bytecodes.verifyRadonRetrieval( @@ -201,7 +203,7 @@ contract("WitnetBytecodes", (accounts) => { ) }) }) - context("WitnetV2.DataRequestMethods.HttpPost", async () => { + context("WitnetV2.RadonDataRequestMethods.HttpPost", async () => { it( "emits new data provider and source events when verifying a new http-post source for the first time", async () => { const tx = await bytecodes.verifyRadonRetrieval( diff --git a/test/witnet_randomness.test.js b/test/witnet_randomness.test.js index 0d3405d23..a4b519319 100644 --- a/test/witnet_randomness.test.js +++ b/test/witnet_randomness.test.js @@ -1,4 +1,4 @@ -const WitnetRandomnessMock = artifacts.require("WitnetRandomnessMock") +const WitnetRandomnessMock = artifacts.require("WitnetMockedRandomness") const WitnetRequestBoard = artifacts.require("WitnetRequestBoard") const RandomnessBareMinimal = artifacts.require("RandomnessBareMinimal") @@ -54,7 +54,7 @@ contract("WitnetRandomnesMock", accounts => { it("requesting random number with no fee, fails", async () => { await truffleAssert.reverts( myContract.requestRandomNumber(), - "reward too low" + "insufficient reward" ) }) it("requesting random number with less fee than required, fails", async () => { @@ -62,7 +62,7 @@ contract("WitnetRandomnesMock", accounts => { myContract.requestRandomNumber( { value: fee / 2 } ), - "reward too low" + "insufficient reward" ) }) let randomizingblock1 From a4769ead7778f7d13601e157f1e9145fb09a9a24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 13:34:13 +0100 Subject: [PATCH 097/149] chore: eslint --fix --- artifacts/index.js | 14 +- migrations/scripts/1_deployer.js | 3 +- migrations/scripts/2_libs.js | 4 +- migrations/scripts/3_core.js | 13 +- migrations/scripts/4_proxies.js | 15 +- migrations/scripts/5_apps.js | 81 ++-- scripts/vanity3gen.js | 1 - settings/artifacts.js | 76 ++-- settings/index.js | 72 +-- settings/networks.js | 740 +++++++++++++++---------------- settings/specs.js | 384 ++++++++-------- src/index.js | 41 +- src/utils/index.js | 38 +- src/utils/traceTx.js | 6 +- truffle-config.js | 2 +- 15 files changed, 745 insertions(+), 745 deletions(-) diff --git a/artifacts/index.js b/artifacts/index.js index 2a546b732..a89a826e7 100644 --- a/artifacts/index.js +++ b/artifacts/index.js @@ -1,8 +1,8 @@ module.exports = { - WitnetBytecodes: require("../artifacts/WitnetBytecodes.json"), - WitnetPriceFeeds: require("../artifacts/WitnetPriceFeeds.json"), - WitnetRandomness: require("../artifacts/WitnetRandomness.json"), - WitnetRequest: require("../artifacts/WitnetRequest.json"), - WitnetRequestFactory: require("../artifacts/witnetRequestFactory.json"), - WitnetRequestTemplate: require("../artifacts/WitnetRequestTemplate.json"), -}; + WitnetBytecodes: require("../artifacts/WitnetBytecodes.json"), + WitnetPriceFeeds: require("../artifacts/WitnetPriceFeeds.json"), + WitnetRandomness: require("../artifacts/WitnetRandomness.json"), + WitnetRequest: require("../artifacts/WitnetRequest.json"), + WitnetRequestFactory: require("../artifacts/witnetRequestFactory.json"), + WitnetRequestTemplate: require("../artifacts/WitnetRequestTemplate.json"), +} diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index f737fd702..757c0215c 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -2,8 +2,9 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") -module.exports = async function (deployer, network, [, from,, master]) { +module.exports = async function (deployer, network, [, from,, master]) { const addresses = await utils.readAddresses(network) + let factory if (utils.isNullAddress(addresses?.WitnetDeployer)) { await deployer.deploy(WitnetDeployer, { from: master }) diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 928df6124..6c32004c3 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,9 +4,9 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const addresses = await utils.readAddresses(network); + const addresses = await utils.readAddresses(network) - const targets = settings.getArtifacts(network); + const targets = settings.getArtifacts(network) const libs = [ targets.WitnetErrorsLib, targets.WitnetEncodingLib, diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 645eb446d..76f5b0068 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -10,11 +10,10 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const isDryRun = utils.isDryRun(network);//network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" + const addresses = await utils.readAddresses(network) - const addresses = await utils.readAddresses(network); - const specs = settings.getSpecs(network); - const targets = settings.getArtifacts(network); + const specs = settings.getSpecs(network) + const targets = settings.getArtifacts(network) // Deploy/upgrade WitnetBytecodes target implementation, if required await deploy({ @@ -32,7 +31,7 @@ module.exports = async function (_, network, [, from]) { ], }, }) - + // Deploy/upgrade WitnetRequestFactory target implementation, if required await deploy({ addresses, @@ -51,7 +50,7 @@ module.exports = async function (_, network, [, from]) { ], }, }) - + // Deploy/upgrade WitnetRequestBoard target implementation, if required await deploy({ addresses, @@ -72,7 +71,7 @@ module.exports = async function (_, network, [, from]) { }) // save addresses file if required - if (!isDryRun) { + if (!utils.isDryRun(network)) { await utils.saveAddresses(network, addresses) } } diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index aed285359..01933e44e 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -7,12 +7,11 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") const WitnetProxy = artifacts.require("WitnetProxy") module.exports = async function (_, network, [, from, reporter]) { - const isDryRun = utils.isDryRun(network);//network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" - - const addresses = await utils.readAddresses(network); - const targets = settings.getArtifacts(network); - const specs = settings.getSpecs(network); - + const addresses = await utils.readAddresses(network) + + const targets = settings.getArtifacts(network) + const specs = settings.getSpecs(network) + const singletons = [ "WitnetBytecodes", "WitnetRequestFactory", @@ -29,13 +28,13 @@ module.exports = async function (_, network, [, from, reporter]) { // Deploy/upgrade singleton proxies, if required for (const index in singletons) { await deploy({ - addresses, + addresses, from, specs, targets, key: singletons[index], }) - if (!isDryRun) { + if (!utils.isDryRun(network)) { await utils.saveAddresses(network, addresses) } } diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 69c3e4ab9..7eb53e77f 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -5,53 +5,48 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [,,, from]) { - const isDryRun = utils.isDryRun(network); + const addresses = await utils.readAddresses(network) - const addresses = await utils.readAddresses(network); - const specs = settings.getSpecs(network); - const targets = settings.getArtifacts(network); + const specs = settings.getSpecs(network) + const targets = settings.getArtifacts(network) // Deploy the WitnetPriceFeeds oracle, if required - { - await deploy({ - addresses, - from, - targets, - key: targets.WitnetPriceFeeds, - libs: specs.WitnetPriceFeeds.libs, - vanity: specs.WitnetPriceFeeds?.vanity || 0, - immutables: specs.WitnetPriceFeeds.immutables, - intrinsics: { - types: ["address", "address"], - values: [ - /* _operator */ from, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ], - }, - }) - } + await deploy({ + addresses, + from, + targets, + key: targets.WitnetPriceFeeds, + libs: specs.WitnetPriceFeeds.libs, + vanity: specs.WitnetPriceFeeds?.vanity || 0, + immutables: specs.WitnetPriceFeeds.immutables, + intrinsics: { + types: ["address", "address"], + values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ], + }, + }) // Deploy the WitnetRandomness oracle, if required - { - await deploy({ - addresses, - from, - targets, - key: targets.WitnetRandomness, - libs: specs.WitnetRandomness?.libs, - vanity: specs.WitnetRandomness?.vanity || 0, - immutables: specs.WitnetRandomness?.immutables, - intrinsics: { - types: ["address", "address"], - values: [ - /* _operator */ from, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ], - }, - }) - } + await deploy({ + addresses, + from, + targets, + key: targets.WitnetRandomness, + libs: specs.WitnetRandomness?.libs, + vanity: specs.WitnetRandomness?.vanity || 0, + immutables: specs.WitnetRandomness?.immutables, + intrinsics: { + types: ["address", "address"], + values: [ + /* _operator */ from, + /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + ], + }, + }) // save addresses file if required - if (!isDryRun) { + if (!utils.isDryRun(network)) { await utils.saveAddresses(network, addresses) } } @@ -73,7 +68,7 @@ async function deploy (specs) { } const coreBytecode = link(artifact.toJSON().bytecode, libs, targets) if (coreBytecode.indexOf("__") > -1) { - console.info(bytecode) + console.info(coreBytecode) console.info("Cannot deploy due to some missing libs") process.exit(1) } @@ -111,7 +106,7 @@ async function determineProxyAddr (from, nonce) { function link (bytecode, libs, targets) { if (libs && Array.isArray(libs) && libs.length > 0) { - for (index in libs) { + 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)) diff --git a/scripts/vanity3gen.js b/scripts/vanity3gen.js index 3e1721686..d1844ee12 100644 --- a/scripts/vanity3gen.js +++ b/scripts/vanity3gen.js @@ -14,7 +14,6 @@ module.exports = async function () { let network = "default" let prefix = "0x00" let suffix = "0x00" - const hexArgs = "" process.argv.map((argv, index, args) => { if (argv === "--offset") { offset = parseInt(args[index + 1]) diff --git a/settings/artifacts.js b/settings/artifacts.js index 9ea3e93fe..ae0aeda6b 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -1,39 +1,39 @@ module.exports = { - default: { - WitnetBytecodes: "WitnetBytecodesDefault", - WitnetEncodingLib: "WitnetEncodingLib", - WitnetErrorsLib: "WitnetErrorsLib", - WitnetPriceFeeds: "WitnetPriceFeeds", - WitnetPriceFeedsLib: "WitnetPriceFeedsLib", - WitnetRandomness: "WitnetRandomness", - WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", - WitnetRequestFactory: "WitnetRequestFactoryDefault", - }, - boba: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - conflux: { - WitnetRequestFactory: "WitnetRequestFactoryCfxCore", - }, - mantle: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - optimism: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, - "polygon.zkevm.goerli": { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - "polygon.zkevm.mainnet": { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - reef: { - WitnetRequestBoard: "WitnetRequestBoardTrustableReef", - }, - scroll: { - WitnetBytecodes: "WitnetBytecodesNoSha256", - }, - "syscoin.rollux.testnet": { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", - }, -}; \ No newline at end of file + default: { + WitnetBytecodes: "WitnetBytecodesDefault", + WitnetEncodingLib: "WitnetEncodingLib", + WitnetErrorsLib: "WitnetErrorsLib", + WitnetPriceFeeds: "WitnetPriceFeeds", + WitnetPriceFeedsLib: "WitnetPriceFeedsLib", + WitnetRandomness: "WitnetRandomness", + WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", + WitnetRequestFactory: "WitnetRequestFactoryDefault", + }, + boba: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + conflux: { + WitnetRequestFactory: "WitnetRequestFactoryCfxCore", + }, + mantle: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + optimism: { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, + "polygon.zkevm.goerli": { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + "polygon.zkevm.mainnet": { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + reef: { + WitnetRequestBoard: "WitnetRequestBoardTrustableReef", + }, + scroll: { + WitnetBytecodes: "WitnetBytecodesNoSha256", + }, + "syscoin.rollux.testnet": { + WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + }, +} diff --git a/settings/index.js b/settings/index.js index 5738d268b..682e195fe 100644 --- a/settings/index.js +++ b/settings/index.js @@ -1,4 +1,3 @@ - const artifacts = require("./artifacts") const { merge } = require("lodash") const networks = require("./networks") @@ -7,37 +6,40 @@ const solidity = require("./solidity") const utils = require("../src/utils") module.exports = { - getArtifacts: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network); - return merge( - artifacts.default, - artifacts[eco], - artifacts[net] - ); - }, - getCompilers: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network); - return merge( - solidity.default, - solidity[eco], - solidity[net], - ); - }, - getNetworks: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network); - return merge( - networks.default, - networks[eco], - networks[net], - ); - }, - getSpecs: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network); - return merge( - specs.default, - specs[eco], - specs[net] - ); - }, - artifacts, networks, solidity, specs, -}; + getArtifacts: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network) + return merge( + artifacts.default, + artifacts[eco], + artifacts[net] + ) + }, + getCompilers: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network) + return merge( + solidity.default, + solidity[eco], + solidity[net], + ) + }, + getNetworks: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network) + return merge( + networks.default, + networks[eco], + networks[net], + ) + }, + getSpecs: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network) + return merge( + specs.default, + specs[eco], + specs[net] + ) + }, + artifacts, + networks, + solidity, + specs, +} diff --git a/settings/networks.js b/settings/networks.js index 32286caec..55481b613 100644 --- a/settings/networks.js +++ b/settings/networks.js @@ -1,372 +1,372 @@ module.exports = { - default: { - host: "localhost", - skipDryRun: true, - }, - "ethereum.goerli": { - network_id: 5, - port: 8545, - verify: { - apiUrl: "https://api-goerli.etherscan.io/", - browserURL: "https://goerli.etherscan.io/", - }, - }, - "ethereum.mainnet": { - network_id: 1, - port: 9545, - }, - "ethereum.sepolia": { - network_id: 11155111, - port: 8506, - verify: { - apiUrl: "https://api-sepolia.etherscan.io/api", - browserURL: "https://sepolia.etherscan.io/", - }, - }, - "arbitrum.goerli": { - network_id: 421613, - port: 8517, - verify: { - apiUrl: "https://api-goerli.arbiscan.io/", - browserURL: "https://goerli.arbiscan.io/", - }, - }, - "arbitrum.one": { - network_id: 42161, - port: 9517, - }, - "avalanche.mainnet": { - network_id: 43114, - port: 9533, - }, - "avalanche.testnet": { - network_id: 43113, - port: 8533, - verify: { - apiUrl: "https://api.arbiscan.io/api", - browserURL: "https://arbiscan.io/", - }, - }, - "boba.bnb.testnet": { - network_id: 9728, - port: 8510, - verify: { - apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", - browserURL: "https://boba.testnet.routescan.io/", - }, - }, - "boba.bnb.mainnet": { - network_id: 56288, - port: 9510, - verify: { - apiUrl: "https://blockexplorer.bnb.boba.network/api", - browserURL: "https://blockexplorer.bnb.boba.network/", - apiKey: "MY_API_KEY", - }, - }, - "boba.ethereum.mainnet": { - network_id: 288, - port: 9539, - verify: { - apiUrl: "https://api.routescan.io/v2/network/mainnet/evm/all/etherscan", - browserURL: "https://bobascan.com/address/", - apiKey: "MY_API_KEY", - }, - }, - "boba.ethereum.goerli": { - network_id: 2888, - port: 8515, - verify: { - apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", - browserURL: "https://boba.testnet.routescan.io/", - }, - }, - "celo.alfajores": { - network_id: 44787, - port: 8538, - }, - "celo.mainnet": { - network_id: 42220, - port: 9538, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.celo.org/alfajores/api", - browserURL: "https://explorer.celo.org/alfajores/", - }, - }, - "conflux.core.testnet": { - port: 8540, - network_id: 1, - gasPrice: 10, - }, - "conflux.core.mainnet": { - port: 9540, - network_id: 1029, - gasPrice: 10, - verify: { - apiUrl: "https://explorer.celo.org/mainnet/api", - browserURL: "https://explorer.celo.org/mainnet/", - }, - }, - "conflux.espace.testnet": { - port: 8529, - network_id: 71, - networkCheckTimeout: 999999, - gas: 15000000, - }, - "conflux.espace.mainnet": { - port: 9529, - network_id: 1030, - networkCheckTimeout: 999999, - gas: 15000000, - }, - "cronos.testnet": { - port: 8530, - network_id: 338, - verify: { - apiUrl: "https://cronos.org/explorer/testnet3/api", - browserURL: "https://cronos.org/explorer/testnet3", - }, - }, - "cronos.mainnet": { - port: 9530, - network_id: 25, - }, - "cube.testnet": { - port: 8522, - network_id: 1819, - }, - "dogechain.testnet": { - port: 8519, - network_id: 568, - gas: 6000000, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "http://explorer-testnet.dogechain.dog/api", - browserURL: "https://explorer-testnet.dogechain.dog/", - }, - }, - "dogechain.mainnet": { - port: 9519, - network_id: 2000, - }, - "elastos.testnet": { - port: 8513, - network_id: 21, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://esc-testnet.elastos.io/api", - browserURL: "https://esc-testnet.elastos.io/address", - }, - }, - "elastos.mainnet": { - port: 9513, - network_id: 20, - verify: { - apiUrl: "https://esc.elastos.io/api", - browserURL: "https://esc.elastos.io/address", - }, - }, - "fuse.testnet": { - port: 8511, - network_id: 123, - verify: { - apiUrl: "https://explorer.fusespark.io/api", - browserURL: "https://explorer.fusespark.io/address", - apiKey: "MY_API_KEY", - }, - }, - "gnosis.testnet": { - port: 8509, - network_id: 10200, - verify: { - apiUrl: "https://gnosis-chiado.blockscout.com/api", - browserURL: "https://gnosis-chiado.blockscout.com/address", - apiKey: "MY_API_KEY", - }, - }, - "harmony.testnet#0": { - port: 8534, - network_id: 1666700000, - }, - "kava.testnet": { - port: 8526, - network_id: 2221, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.testnet.kava.io/api", - browserURL: "https://explorer.testnet.kava.io/", - }, - }, - "kava.mainnet": { - port: 9526, - network_id: 2222, - }, - "kcc.testnet": { - port: 8537, - network_id: 322, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://scan-testnet.kcc.network/api", - browserURL: "https://scan-testnet.kcc.network/", - }, - }, - "kcc.mainnet": { - port: 9537, - network_id: 321, - }, - "klaytn.testnet": { - port: 8527, - network_id: 1001, - }, - "klaytn.mainnet": { - port: 9527, - network_id: 8217, - }, - "mantle.testnet": { - port: 8508, - network_id: 5001, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.testnet.mantle.xyz/api", - explorerUrl: "https://explorer.testnet.mantle.xyz/address", - }, - }, - "mantle.mainnet": { - port: 9508, - network_id: 5000, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://explorer.mantle.xyz/api", - explorerUrl: "https://explorer.mantle.xyz/address", - }, - }, - "metis.mainnet": { - port: 9536, - network_id: 1088, - }, - "metis.goerli": { - port: 8536, - network_id: 599, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://goerli.explorer.metisdevops.link/api", - explorerUrl: "https://goerli.explorer.metisdevops.link/address", - }, - }, - "meter.testnet": { - port: 8523, - network_id: 83, - }, - "meter.mainnet": { - port: 9523, - network_id: 82, - }, - "moonbeam.mainnet": { - port: 9531, - network_id: 1284, - }, - "moonbeam.moonriver": { - port: 7531, - network_id: 1285, - }, - "moonbeam.moonbase": { - port: 8531, - network_id: 1287, - }, - "okxchain.testnet": { - port: 8528, - network_id: 65, - }, - "okxchain.mainnet": { - port: 9528, - network_id: 66, - }, - "optimism.goerli": { - port: 8520, - network_id: 420, - verify: { - apiKey: "MY_API_KEY", - apiUrl: "https://optimism-goerli.blockscout.com/api", - explorerUrl: "https://optimism-goerli.blockscout.com/", - }, - }, - "optimism.mainnet": { - port: 9520, - network_id: 10, + default: { + host: "localhost", + skipDryRun: true, + }, + "ethereum.goerli": { + network_id: 5, + port: 8545, + verify: { + apiUrl: "https://api-goerli.etherscan.io/", + browserURL: "https://goerli.etherscan.io/", + }, + }, + "ethereum.mainnet": { + network_id: 1, + port: 9545, + }, + "ethereum.sepolia": { + network_id: 11155111, + port: 8506, + verify: { + apiUrl: "https://api-sepolia.etherscan.io/api", + browserURL: "https://sepolia.etherscan.io/", + }, + }, + "arbitrum.goerli": { + network_id: 421613, + port: 8517, + verify: { + apiUrl: "https://api-goerli.arbiscan.io/", + browserURL: "https://goerli.arbiscan.io/", + }, + }, + "arbitrum.one": { + network_id: 42161, + port: 9517, + }, + "avalanche.mainnet": { + network_id: 43114, + port: 9533, + }, + "avalanche.testnet": { + network_id: 43113, + port: 8533, + verify: { + apiUrl: "https://api.arbiscan.io/api", + browserURL: "https://arbiscan.io/", + }, + }, + "boba.bnb.testnet": { + network_id: 9728, + port: 8510, + verify: { + apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", + browserURL: "https://boba.testnet.routescan.io/", + }, + }, + "boba.bnb.mainnet": { + network_id: 56288, + port: 9510, + verify: { + apiUrl: "https://blockexplorer.bnb.boba.network/api", + browserURL: "https://blockexplorer.bnb.boba.network/", + apiKey: "MY_API_KEY", + }, + }, + "boba.ethereum.mainnet": { + network_id: 288, + port: 9539, + verify: { + apiUrl: "https://api.routescan.io/v2/network/mainnet/evm/all/etherscan", + browserURL: "https://bobascan.com/address/", + apiKey: "MY_API_KEY", + }, + }, + "boba.ethereum.goerli": { + network_id: 2888, + port: 8515, + verify: { + apiUrl: "https://api.routescan.io/v2/network/testnet/evm/2888/etherscan", + browserURL: "https://boba.testnet.routescan.io/", + }, + }, + "celo.alfajores": { + network_id: 44787, + port: 8538, + }, + "celo.mainnet": { + network_id: 42220, + port: 9538, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.celo.org/alfajores/api", + browserURL: "https://explorer.celo.org/alfajores/", + }, + }, + "conflux.core.testnet": { + port: 8540, + network_id: 1, + gasPrice: 10, + }, + "conflux.core.mainnet": { + port: 9540, + network_id: 1029, + gasPrice: 10, + verify: { + apiUrl: "https://explorer.celo.org/mainnet/api", + browserURL: "https://explorer.celo.org/mainnet/", + }, + }, + "conflux.espace.testnet": { + port: 8529, + network_id: 71, + networkCheckTimeout: 999999, + gas: 15000000, + }, + "conflux.espace.mainnet": { + port: 9529, + network_id: 1030, + networkCheckTimeout: 999999, + gas: 15000000, + }, + "cronos.testnet": { + port: 8530, + network_id: 338, + verify: { + apiUrl: "https://cronos.org/explorer/testnet3/api", + browserURL: "https://cronos.org/explorer/testnet3", + }, + }, + "cronos.mainnet": { + port: 9530, + network_id: 25, + }, + "cube.testnet": { + port: 8522, + network_id: 1819, + }, + "dogechain.testnet": { + port: 8519, + network_id: 568, + gas: 6000000, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "http://explorer-testnet.dogechain.dog/api", + browserURL: "https://explorer-testnet.dogechain.dog/", + }, + }, + "dogechain.mainnet": { + port: 9519, + network_id: 2000, + }, + "elastos.testnet": { + port: 8513, + network_id: 21, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://esc-testnet.elastos.io/api", + browserURL: "https://esc-testnet.elastos.io/address", + }, + }, + "elastos.mainnet": { + port: 9513, + network_id: 20, + verify: { + apiUrl: "https://esc.elastos.io/api", + browserURL: "https://esc.elastos.io/address", + }, + }, + "fuse.testnet": { + port: 8511, + network_id: 123, + verify: { + apiUrl: "https://explorer.fusespark.io/api", + browserURL: "https://explorer.fusespark.io/address", + apiKey: "MY_API_KEY", + }, + }, + "gnosis.testnet": { + port: 8509, + network_id: 10200, + verify: { + apiUrl: "https://gnosis-chiado.blockscout.com/api", + browserURL: "https://gnosis-chiado.blockscout.com/address", + apiKey: "MY_API_KEY", + }, + }, + "harmony.testnet#0": { + port: 8534, + network_id: 1666700000, + }, + "kava.testnet": { + port: 8526, + network_id: 2221, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.testnet.kava.io/api", + browserURL: "https://explorer.testnet.kava.io/", + }, + }, + "kava.mainnet": { + port: 9526, + network_id: 2222, + }, + "kcc.testnet": { + port: 8537, + network_id: 322, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://scan-testnet.kcc.network/api", + browserURL: "https://scan-testnet.kcc.network/", + }, + }, + "kcc.mainnet": { + port: 9537, + network_id: 321, + }, + "klaytn.testnet": { + port: 8527, + network_id: 1001, + }, + "klaytn.mainnet": { + port: 9527, + network_id: 8217, + }, + "mantle.testnet": { + port: 8508, + network_id: 5001, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.testnet.mantle.xyz/api", + explorerUrl: "https://explorer.testnet.mantle.xyz/address", + }, + }, + "mantle.mainnet": { + port: 9508, + network_id: 5000, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://explorer.mantle.xyz/api", + explorerUrl: "https://explorer.mantle.xyz/address", + }, + }, + "metis.mainnet": { + port: 9536, + network_id: 1088, + }, + "metis.goerli": { + port: 8536, + network_id: 599, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://goerli.explorer.metisdevops.link/api", + explorerUrl: "https://goerli.explorer.metisdevops.link/address", + }, + }, + "meter.testnet": { + port: 8523, + network_id: 83, + }, + "meter.mainnet": { + port: 9523, + network_id: 82, + }, + "moonbeam.mainnet": { + port: 9531, + network_id: 1284, + }, + "moonbeam.moonriver": { + port: 7531, + network_id: 1285, + }, + "moonbeam.moonbase": { + port: 8531, + network_id: 1287, + }, + "okxchain.testnet": { + port: 8528, + network_id: 65, + }, + "okxchain.mainnet": { + port: 9528, + network_id: 66, + }, + "optimism.goerli": { + port: 8520, + network_id: 420, + verify: { + apiKey: "MY_API_KEY", + apiUrl: "https://optimism-goerli.blockscout.com/api", + explorerUrl: "https://optimism-goerli.blockscout.com/", + }, + }, + "optimism.mainnet": { + port: 9520, + network_id: 10, - }, - "polygon.goerli": { - port: 8535, - network_id: 80001, - }, - "polygon.mainnet": { - port: 9535, - network_id: 137, - }, - "polygon.zkevm.goerli": { - port: 8512, - network_id: 1442, - verify: { - apiUrl: "https://api-testnet-zkevm.polygonscan.com/api", - explorerUrl: "https://testnet-zkevm.polygonscan.com/address", - }, - }, - "polygon.zkevm.mainnet": { - port: 9512, - network_id: 1101, - verify: { - apiUrl: "https://api-zkevm.polygonscan.com/api", - explorerUrl: "https://zkevm.polygonscan.com/address/", - }, - }, - "reef.testnet": { - port: 8532, - network_id: 13939, - }, - "reef.mainnet": { - port: 9532, - network_id: 13939, - }, - "scroll.sepolia": { - port: 8514, - network_id: 534351, - verify: { - apiUrl: "http://api-sepolia.scrollscan.io/api", - explorerUrl: "https://sepolia.scrollscan.io/", - }, - }, - "scroll.mainnet": { - port: 9514, - network_id: 534352, - verify: { - apiUrl: "https://api.scrollscan.com/api", - explorerUrl: "https://scrollscan.com/address", - }, - }, - "syscoin.testnet": { - port: 8521, - network_id: 5700, - }, - "syscoin.mainnet": { - port: 9521, - network_id: 57, - }, - "syscoin.rollux.testnet": { - port: 8507, - network_id: 57000, - verify: { - apiKey: "abc", - apiUrl: "https://rollux.tanenbaum.io/api", - explorerUrl: "https://rollux.tanenbaum.io/address/", - }, - }, - "ultron.testnet": { - port: 8516, - network_id: 1230, - }, - "ultron.mainnet": { - port: 9516, - network_id: 1231, - }, -}; + }, + "polygon.goerli": { + port: 8535, + network_id: 80001, + }, + "polygon.mainnet": { + port: 9535, + network_id: 137, + }, + "polygon.zkevm.goerli": { + port: 8512, + network_id: 1442, + verify: { + apiUrl: "https://api-testnet-zkevm.polygonscan.com/api", + explorerUrl: "https://testnet-zkevm.polygonscan.com/address", + }, + }, + "polygon.zkevm.mainnet": { + port: 9512, + network_id: 1101, + verify: { + apiUrl: "https://api-zkevm.polygonscan.com/api", + explorerUrl: "https://zkevm.polygonscan.com/address/", + }, + }, + "reef.testnet": { + port: 8532, + network_id: 13939, + }, + "reef.mainnet": { + port: 9532, + network_id: 13939, + }, + "scroll.sepolia": { + port: 8514, + network_id: 534351, + verify: { + apiUrl: "http://api-sepolia.scrollscan.io/api", + explorerUrl: "https://sepolia.scrollscan.io/", + }, + }, + "scroll.mainnet": { + port: 9514, + network_id: 534352, + verify: { + apiUrl: "https://api.scrollscan.com/api", + explorerUrl: "https://scrollscan.com/address", + }, + }, + "syscoin.testnet": { + port: 8521, + network_id: 5700, + }, + "syscoin.mainnet": { + port: 9521, + network_id: 57, + }, + "syscoin.rollux.testnet": { + port: 8507, + network_id: 57000, + verify: { + apiKey: "abc", + apiUrl: "https://rollux.tanenbaum.io/api", + explorerUrl: "https://rollux.tanenbaum.io/address/", + }, + }, + "ultron.testnet": { + port: 8516, + network_id: 1230, + }, + "ultron.mainnet": { + port: 9516, + network_id: 1231, + }, +} diff --git a/settings/specs.js b/settings/specs.js index 36ec56f59..41fbc90ac 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -1,193 +1,193 @@ module.exports = { - default: { - WitnetBytecodes: { - libs: ["WitnetEncodingLib"], - vanity: 172582, - }, - WitnetRandomness: { - vanity: 4, - }, - WitnetRequestBoard: { - immutables: { - types: ["uint256", "uint256", "uint256", "uint256"], - values: [ - /* _reportResultGasBase */ 58282, - /* _reportResultWithCallbackGasBase */ 65273, - /* _reportResultWithCallbackRevertGasBase */ 69546, - /* _sstoreFromZeroGas */ 20000, - ], - }, - libs: ["WitnetErrorsLib"], - vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 - }, - WitnetRequestFactory: { - vanity: 178848, - }, - WitnetPriceFeeds: { - libs: ["WitnetPriceFeedsLib"], - vanity: 5, - }, - }, - avalanche: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 155000, - ], - }, - }, - }, - celo: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 114000, - ], - }, - }, - }, - conflux: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 78500, - ], - }, - }, - }, - "conflux.espace.testnet": { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 225000, - ], - }, - }, - }, - "conflux.espace.mainnet": { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 225000, - ], - }, - }, - }, - cronos: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 137500, - ], - }, - }, - }, - dogechain: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - harmony: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 530000, - ], - }, - }, - }, - hsc: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - kcc: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 92500, - ], - }, - }, - }, - klaytn: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 105000, - ], - }, - }, - }, - meter: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 85000, - ], - }, - }, - }, - metis: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 134800, - ], - }, - }, - }, - moonbeam: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 115000, - ], - }, - }, - }, - okxchain: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 145000, - ], - }, - }, - }, - optimism: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 135000, - ], - }, - }, - }, - reef: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", - ], - }, - }, - }, - ultron: { - WitnetRequestBoard: { - immutables: { - values: [ - /* _reportResultGasBase */ 83949, - ], - }, - }, - }, -}; \ No newline at end of file + default: { + WitnetBytecodes: { + libs: ["WitnetEncodingLib"], + vanity: 172582, + }, + WitnetRandomness: { + vanity: 4, + }, + WitnetRequestBoard: { + immutables: { + types: ["uint256", "uint256", "uint256", "uint256"], + values: [ + /* _reportResultGasBase */ 58282, + /* _reportResultWithCallbackGasBase */ 65273, + /* _reportResultWithCallbackRevertGasBase */ 69546, + /* _sstoreFromZeroGas */ 20000, + ], + }, + libs: ["WitnetErrorsLib"], + vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 + }, + WitnetRequestFactory: { + vanity: 178848, + }, + WitnetPriceFeeds: { + libs: ["WitnetPriceFeedsLib"], + vanity: 5, + }, + }, + avalanche: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 155000, + ], + }, + }, + }, + celo: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 114000, + ], + }, + }, + }, + conflux: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 78500, + ], + }, + }, + }, + "conflux.espace.testnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 225000, + ], + }, + }, + }, + "conflux.espace.mainnet": { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 225000, + ], + }, + }, + }, + cronos: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 137500, + ], + }, + }, + }, + dogechain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + harmony: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 530000, + ], + }, + }, + }, + hsc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + kcc: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 92500, + ], + }, + }, + }, + klaytn: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 105000, + ], + }, + }, + }, + meter: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 85000, + ], + }, + }, + }, + metis: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 134800, + ], + }, + }, + }, + moonbeam: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 115000, + ], + }, + }, + }, + okxchain: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 145000, + ], + }, + }, + }, + optimism: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 135000, + ], + }, + }, + }, + reef: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", + ], + }, + }, + }, + ultron: { + WitnetRequestBoard: { + immutables: { + values: [ + /* _reportResultGasBase */ 83949, + ], + }, + }, + }, +} diff --git a/src/index.js b/src/index.js index 09f1850e5..a2b3c2b23 100644 --- a/src/index.js +++ b/src/index.js @@ -1,22 +1,23 @@ -const addresses = require("./migrations/witnet.addresses.json"); +const addresses = require("./migrations/witnet.addresses.json") const { merge } = require("lodash") +const utils = require("./utils") module.exports = { - getAddresses: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network); - return merge( - addresses.default, - addresses[eco], - addresses[net], - ); - }, - getNetworks: () => { - return Object(addresses).entries.map(entry => { - if (entry[0].indexOf(":") > -1) { - return entry[1] - } - }); - }, - artifacts: require("../artifacts"), - settings: require("../settings"), - utils: require("./utils"), -} \ No newline at end of file + getAddresses: (network) => { + const [eco, net] = utils.getRealmNetworkFromArgs(network) + return merge( + addresses.default, + addresses[eco], + addresses[net], + ) + }, + getNetworks: () => { + return Object + .entries(addresses) + .filter(value => value[0].indexOf(":") > -1) + .map(value => value[0]) + .sort() + }, + artifacts: require("../artifacts"), + settings: require("../settings"), + utils, +} diff --git a/src/utils/index.js b/src/utils/index.js index 02b2a8c09..5a18eb719 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,7 +1,7 @@ const fs = require("fs") require("dotenv").config() const { isEqual } = require("lodash") -const lockfile = require('proper-lockfile'); +const lockfile = require("proper-lockfile") const readline = require("readline") const web3 = require("web3") @@ -16,7 +16,7 @@ module.exports = { isNullAddress, padLeft, prompt, - readAddresses: readAddresses, + readAddresses, saveAddresses, saveJsonArtifact, traceHeader, @@ -53,7 +53,7 @@ function getRealmNetworkFromString (network) { } function isDryRun (network) { - return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop"; + return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" } function isNullAddress (addr) { @@ -92,42 +92,42 @@ async function prompt (text) { async function readAddresses (network) { const filename = "./migrations/witnet.addresses.json" - lockfile.lockSync(filename); + lockfile.lockSync(filename) const addrs = JSON.parse(await fs.readFileSync(filename)) - lockfile.unlockSync(filename); - return addrs[network] || {}; + lockfile.unlockSync(filename) + return addrs[network] || {} } async function saveAddresses (network, addrs) { const filename = "./migrations/witnet.addresses.json" - lockfile.lockSync(filename); + lockfile.lockSync(filename) const json = JSON.parse(fs.readFileSync(filename)) json[network] = addrs - fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }); - lockfile.unlockSync(filename); + fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }) + lockfile.unlockSync(filename) } function saveJsonArtifact (key, artifact) { - const { abi, ast, bytecode, deployedBytecode, contractName } = artifact; + const { abi, ast, bytecode, deployedBytecode, contractName } = artifact const version = require("../../package.json").version - const latest_fn = `./artifacts/${key}.json` - const version_fn = `./artifacts/${key}-${version}.json` + const latestFileName = `./artifacts/${key}.json` + const versionFileName = `./artifacts/${key}-${version}.json` const current = { contractName, sourceName: ast?.absolutePath.split("project:/")[1], abi, bytecode, - deployedBytecode - }; + deployedBytecode, + } let latest = [] - if (fs.existsSync(latest_fn)) { + if (fs.existsSync(latestFileName)) { try { - latest = JSON.parse(fs.readFileSync(latest_fn)) + latest = JSON.parse(fs.readFileSync(latestFileName)) } catch {} } if (!isEqual(current, latest)) { const json = JSON.stringify(current, null, 4) - fs.writeFileSync(version_fn, json, { flag: "w+" }) - fs.writeFileSync(latest_fn, json, { flag: "w+" }) + fs.writeFileSync(versionFileName, json, { flag: "w+" }) + fs.writeFileSync(latestFileName, json, { flag: "w+" }) } -} \ No newline at end of file +} diff --git a/src/utils/traceTx.js b/src/utils/traceTx.js index 28134518a..2a8f73679 100644 --- a/src/utils/traceTx.js +++ b/src/utils/traceTx.js @@ -4,5 +4,9 @@ module.exports = function (tx) { console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei(BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), "ether"), "ETH") + console.info(" ", "> total cost: ", web3.utils.fromWei( + BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), + "ether" + ), "ETH" + ) } diff --git a/truffle-config.js b/truffle-config.js index 440c29beb..f50834566 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -9,7 +9,7 @@ if (ecosystem) { } module.exports = { - build_directory: `./build/`, + build_directory: "./build/", contracts_directory: "./contracts/", migrations_directory: "./migrations/scripts/", networks: settings.getNetworks(network), From 2feb3702a05fefd36a237cdb304a9cddaa17c944 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 5 Feb 2024 17:55:03 +0100 Subject: [PATCH 098/149] chore: add missing .solhint rules --- .solhint.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.solhint.json b/.solhint.json index 0ad4ce74e..ab853d309 100644 --- a/.solhint.json +++ b/.solhint.json @@ -6,6 +6,8 @@ ">=0.6.0 <0.9.0" ], "constructor-syntax": "warn", + "custom-errors": "off", + "explicit-types": "off", "func-param-name-mixedcase": "warn", "func-visibility": [ "warn", @@ -13,6 +15,7 @@ "ignoreConstructors": true } ], + "immutable-vars-naming": "off", "modifier-name-mixedcase": "warn", "no-empty-blocks": "off", "no-inline-assembly": "off", From c4abcfbbd4e3b3634790e95e0f0d1bf312bd682f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 7 Feb 2024 12:30:22 +0100 Subject: [PATCH 099/149] chore: prepare for hardhat --- .gitignore | 5 +- artifacts/WitnetBytecodes.json | 783 --------------- artifacts/WitnetPriceFeeds.json | 1328 -------------------------- artifacts/WitnetRandomness.json | 790 --------------- artifacts/WitnetRequest.json | 420 -------- artifacts/WitnetRequestBoard.json | 815 ---------------- artifacts/WitnetRequestFactory.json | 113 --- artifacts/WitnetRequestTemplate.json | 368 ------- artifacts/index.js | 8 - hardhat.config.js | 6 + migrations/scripts/4_proxies.js | 6 +- migrations/scripts/5_apps.js | 4 +- package.json | 18 +- scripts/prepare.js | 12 + settings/index.js | 24 +- settings/networks.js | 118 +-- settings/solidity.js | 14 +- src/index.js | 31 +- src/utils/index.js | 27 - truffle-config.js | 4 +- 20 files changed, 139 insertions(+), 4755 deletions(-) delete mode 100644 artifacts/WitnetBytecodes.json delete mode 100644 artifacts/WitnetPriceFeeds.json delete mode 100644 artifacts/WitnetRandomness.json delete mode 100644 artifacts/WitnetRequest.json delete mode 100644 artifacts/WitnetRequestBoard.json delete mode 100644 artifacts/WitnetRequestFactory.json delete mode 100644 artifacts/WitnetRequestTemplate.json delete mode 100644 artifacts/index.js create mode 100644 hardhat.config.js create mode 100644 scripts/prepare.js diff --git a/.gitignore b/.gitignore index c3e32aa7a..6d178d5ad 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ -node_modules/ + +artifacts/ build/ cache/ flattened/ -**/*-*.json +node_modules/ .env .idea diff --git a/artifacts/WitnetBytecodes.json b/artifacts/WitnetBytecodes.json deleted file mode 100644 index 1632a7434..000000000 --- a/artifacts/WitnetBytecodes.json +++ /dev/null @@ -1,783 +0,0 @@ -{ - "contractName": "WitnetBytecodes", - "sourceName": "contracts/WitnetBytecodes.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonReducer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonRequest", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "UnknownRadonRetrieval", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "NewDataProvider", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadonReducerHash", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "NewRadonRetrievalHash", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "bytecodeOf", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "name": "hashOf", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "lookupDataProvider", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - }, - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "authority", - "type": "string" - } - ], - "name": "lookupDataProviderIndex", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "offset", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "lookupDataProviderSources", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRAD", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonRetrieval[]", - "name": "retrieve", - "type": "tuple[]" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "aggregate", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "tally", - "type": "tuple" - } - ], - "internalType": "struct Witnet.RadonRAD", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonReducer", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestAggregator", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestResultDataType", - "outputs": [ - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestResultMaxSize", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestSources", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestSourcesCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "lookupRadonRequestTally", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrieval", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonRetrieval", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrievalArgsCount", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "name": "lookupRadonRetrievalResultDataType", - "outputs": [ - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalDataProviders", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "reducer", - "type": "tuple" - } - ], - "name": "verifyRadonReducer", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "sources", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "aggregator", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tally", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "resultMaxSize", - "type": "uint16" - }, - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "verifyRadonRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "requestMethod", - "type": "uint8" - }, - { - "internalType": "string", - "name": "requestURL", - "type": "string" - }, - { - "internalType": "string", - "name": "requestBody", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "requestHeaders", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "requestRadonScript", - "type": "bytes" - } - ], - "name": "verifyRadonRetrieval", - "outputs": [ - { - "internalType": "bytes32", - "name": "hash", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x" -} \ No newline at end of file diff --git a/artifacts/WitnetPriceFeeds.json b/artifacts/WitnetPriceFeeds.json deleted file mode 100644 index 9261d78d4..000000000 --- a/artifacts/WitnetPriceFeeds.json +++ /dev/null @@ -1,1328 +0,0 @@ -{ - "contractName": "WitnetPriceFeeds", - "sourceName": "contracts/apps/WitnetPriceFeeds.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "contract WitnetRequestBoard", - "name": "_wrb", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "EmptyBuffer", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "range", - "type": "uint256" - } - ], - "name": "IndexOutOfBounds", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidLengthEncoding", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "read", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "UnexpectedMajorType", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "unexpected", - "type": "uint256" - } - ], - "name": "UnsupportedMajorType", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "DeletedFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "SettledFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "solver", - "type": "address" - } - ], - "name": "SettledFeedSolver", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - } - ], - "name": "SettledRadonSLA", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "slaHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "UpdatingFeed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "UpdatingFeedReward", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "solver", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "codehash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "WitnetPriceSolverDeployed", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "dataType", - "outputs": [ - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "prefix", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "hash", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupCaption", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "supportedFeeds", - "outputs": [ - { - "internalType": "bytes4[]", - "name": "_ids", - "type": "bytes4[]" - }, - { - "internalType": "string[]", - "name": "_captions", - "type": "string[]" - }, - { - "internalType": "bytes32[]", - "name": "_solvers", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "supportsCaption", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalFeeds", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "defaultRadonSLA", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_evmGasPrice", - "type": "uint256" - } - ], - "name": "estimateUpdateBaseFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestResponse", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "fromFinality", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestResult", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateQueryId", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResponse", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "fromFinality", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResultError", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.ResultErrorCodes", - "name": "code", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "internalType": "struct Witnet.ResultError", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestUpdateResultStatus", - "outputs": [ - { - "internalType": "enum WitnetV2.ResultStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupBytecode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupRadHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupRetrievals", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonRetrieval[]", - "name": "_retrievals", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "requestUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "updateSLA", - "type": "tuple" - } - ], - "name": "requestUpdate", - "outputs": [ - { - "internalType": "uint256", - "name": "_usedFunds", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - } - ], - "name": "deleteFeed", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "defaultSLA", - "type": "tuple" - } - ], - "name": "settleDefaultRadonSLA", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "contract WitnetRequest", - "name": "request", - "type": "address" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "contract WitnetRequestTemplate", - "name": "template", - "type": "address" - }, - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "settleFeedRequest", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "caption", - "type": "string" - }, - { - "internalType": "address", - "name": "solver", - "type": "address" - }, - { - "internalType": "string[]", - "name": "deps", - "type": "string[]" - } - ], - "name": "settleFeedSolver", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupDecimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "lookupPriceSolver", - "outputs": [ - { - "internalType": "contract IWitnetPriceSolver", - "name": "_solverAddress", - "type": "address" - }, - { - "internalType": "string[]", - "name": "_solverDeps", - "type": "string[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "feedId", - "type": "bytes4" - } - ], - "name": "latestPrice", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "enum WitnetV2.ResultStatus", - "name": "status", - "type": "uint8" - } - ], - "internalType": "struct IWitnetPriceSolver.Price", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4[]", - "name": "feedIds", - "type": "bytes4[]" - } - ], - "name": "latestPrices", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "enum WitnetV2.ResultStatus", - "name": "status", - "type": "uint8" - } - ], - "internalType": "struct IWitnetPriceSolver.Price[]", - "name": "_prices", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initcode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "deployPriceSolver", - "outputs": [ - { - "internalType": "address", - "name": "_solver", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "initcode", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "constructorParams", - "type": "bytes" - } - ], - "name": "determinePriceSolverAddress", - "outputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "feedId", - "type": "bytes32" - } - ], - "name": "valueFor", - "outputs": [ - { - "internalType": "int256", - "name": "_value", - "type": "int256" - }, - { - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_status", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x61010060405263346916ef60e11b60c0523480156200001d57600080fd5b506040516200546438038062005464833981016040819052620000409162000350565b60408051808201909152600681526550726963652d60d01b6020820152600490836001600160a01b0381166200009157604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6200009c816200021d565b50816013811115620000b257620000b26200038f565b6080816013811115620000c957620000c96200038f565b905250620000d7816200023b565b60a081815250505050636461cc6360e01b6001600160e01b031916816001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000131573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001579190620003a5565b6001600160e01b03191614620001c45760405162461bcd60e51b815260206004820152602b60248201527f5769746e6574507269636546656564733a20756e636f6d706c69616e7420726560448201526a1c5d595cdd08189bd85c9960aa1b606482015260840162000088565b6001600160a01b031660e0525060408051808201909152600a8152633b9aca00602090910152633b9aca00600560f91b017fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ff5562000404565b600180546001600160a01b0319169055620002388162000250565b50565b60006200024a826020620002a0565b92915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600060208260ff161115620002b957620002b9620003d8565b60008260ff16845111620002cf578351620002d4565b8260ff165b905060005b81811015620003325780600802858281518110620002fb57620002fb620003ee565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016901c9290921791600101620002d9565b505092915050565b6001600160a01b03811681146200023857600080fd5b600080604083850312156200036457600080fd5b825162000371816200033a565b602084015190925062000384816200033a565b809150509250929050565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620003b857600080fd5b81516001600160e01b031981168114620003d157600080fd5b9392505050565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051614fb6620004ae600039600081816104660152818161129b0152818161134b0152818161148c01528181611a1d01528181611cef01528181612248015281816122880152818161294c015281816129d001528181612adf01528181612b7c01528181612c1101528181612df50152612ff00152600061074101526000818161145c01526126df01526000818161052c01526115160152614fb66000f3fe6080604052600436106102515760003560e01c8063a55b471c11610139578063d3471e34116100b6578063f2fde38b1161007a578063f2fde38b146108f0578063f78eea8314610910578063f9f34bb61461094b578063fae91a5114610978578063ff24fb4f14610998578063ff75890f146109b857610251565b8063d3471e341461084c578063d6a3614f1461086c578063e13c11c41461088e578063e30c3978146108bb578063ef1dff2b146108d057610251565b8063b411ee94116100fd578063b411ee941461077c578063c064d372146107a2578063c2f2a2ed146107c2578063c3d98ea8146107ef578063c5010d171461081c57610251565b8063a55b471c146106af578063a80c5bc0146106cf578063abc86c6e146106fc578063ac82c6081461070f578063adb7c3f71461072f57610251565b80636ab221f8116101d25780637b103999116101965780637b103999146105ee57806384292f071461060357806386ac03e01461062357806389a87b16146106435780638da5cb5b14610671578063909375801461068f57610251565b80636ab221f81461055b5780636d1178e51461058d578063715018a6146105af57806375dadb32146105c457806379ba5097146105d957610251565b806346d1d21a1161021957806346d1d21a1461045457806348765643146104a057806349492ef1146104cd5780635be93984146104fa5780636175ff001461051a57610251565b80630306732e1461038b57806303f3813d146103b8578063384ac938146103d85780633e088e121461040657806340eb7a0714610427575b34801561025d57600080fd5b506000356001600160e01b03191663e0d20f7360e01b14801561027f57503330145b156103375760006102a660206102953684613785565b6001600160c01b031916901b6109d8565b600601546001600160a01b03169050806103125760405162461bcd60e51b815260206004820152602260248201527f5769746e6574507269636546656564733a20756e736574746c656420736f6c7660448201526132b960f11b60648201526084015b60405180910390fd5b60405136600082376000803683855af43d806000843e818015610333578184f35b8184fd5b60405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a206e6f7420696d706c656d656e74656044820152601960fa1b6064820152608401610309565b005b34801561039757600080fd5b506103a0610a12565b6040516103af9392919061385d565b60405180910390f35b3480156103c457600080fd5b506103896103d3366004613998565b610c71565b3480156103e457600080fd5b506103f86103f3366004613a34565b61105d565b6040516103af929190613a4f565b610419610414366004613a34565b61112f565b6040519081526020016103af565b34801561043357600080fd5b50610447610442366004613a34565b61118d565b6040516103af9190613a7b565b34801561046057600080fd5b506104887f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103af565b3480156104ac57600080fd5b506104c06104bb366004613a34565b611276565b6040516103af9190613a8e565b3480156104d957600080fd5b506104ed6104e8366004613a34565b611334565b6040516103af9190613add565b34801561050657600080fd5b50610419610515366004613a34565b6113e4565b34801561052657600080fd5b5061054e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516103af9190613b28565b34801561056757600080fd5b5061057b610576366004613a34565b6113f9565b60405160ff90911681526020016103af565b34801561059957600080fd5b506105a2611411565b6040516103af9190613b36565b3480156105bb57600080fd5b50610389611441565b3480156105d057600080fd5b50610447611455565b3480156105e557600080fd5b50610389611480565b3480156105fa57600080fd5b50610488611488565b34801561060f57600080fd5b5061038961061e366004613b59565b61150c565b34801561062f57600080fd5b5061038961063e366004613ba4565b6117c7565b34801561064f57600080fd5b5061066361065e366004613a34565b611a04565b6040516103af929190613be5565b34801561067d57600080fd5b506000546001600160a01b0316610488565b34801561069b57600080fd5b506104196106aa366004613a34565b611abb565b3480156106bb57600080fd5b506104886106ca366004613c0f565b611ad0565b3480156106db57600080fd5b506106ef6106ea366004613a34565b611bb3565b6040516103af9190613c8a565b61041961070a366004613c98565b611bc6565b34801561071b57600080fd5b5061038961072a366004613cd7565b611c5b565b34801561073b57600080fd5b506107637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016103af565b34801561078857600080fd5b50610763610797366004613e21565b805160209091012090565b3480156107ae57600080fd5b506104196107bd366004613ea6565b611ccf565b3480156107ce57600080fd5b506107e26107dd366004613a34565b611d62565b6040516103af9190613f55565b3480156107fb57600080fd5b5061080f61080a366004613a34565b611f43565b6040516103af9190614065565b34801561082857600080fd5b5061083c610837366004613ba4565b612121565b60405190151581526020016103af565b34801561085857600080fd5b506104c0610867366004613a34565b612223565b34801561087857600080fd5b50600080516020614f6183398151915254610419565b34801561089a57600080fd5b506108ae6108a9366004613a34565b61227e565b6040516103af9190614073565b3480156108c757600080fd5b50610488612321565b3480156108dc57600080fd5b506104476108eb366004613a34565b612335565b3480156108fc57600080fd5b5061038961090b366004614114565b6123d0565b34801561091c57600080fd5b5061093061092b366004613ea6565b6123e4565b604080519384526020840192909252908201526060016103af565b34801561095757600080fd5b5061096b610966366004614131565b61249e565b6040516103af9190614166565b34801561098457600080fd5b506103896109933660046141d8565b612555565b3480156109a457600080fd5b506103896109b3366004613998565b612592565b3480156109c457600080fd5b506104886109d3366004613c0f565b6125f3565b6001600160e01b03191660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b600080516020614f6183398151915280546040805160208084028201810190925282815260609384938493830182828015610a9957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610a5b5790505b5050505050925082516001600160401b03811115610ab957610ab9613d2d565b604051908082528060200260200182016040528015610aec57816020015b6060815260200190600190039081610ad75790505b50915082516001600160401b03811115610b0857610b08613d2d565b604051908082528060200260200182016040528015610b31578160200160208202803683370190505b50905060005b8351811015610c6b576000610b64858381518110610b5757610b5761421d565b60200260200101516109d8565b9050806000018054610b7590614233565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190614233565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050848381518110610c0557610c0561421d565b602090810291909101015260068101546001600160a01b031615610c3f57600681015460601b6bffffffffffffffffffffffff1916610c45565b80600501545b838381518110610c5757610c5761421d565b602090810291909101015250600101610b37565b50909192565b610c79612680565b6001600160a01b038316610cdb5760405162461bcd60e51b815260206004820152602360248201527f5769746e6574507269636546656564733a206e6f20736f6c766572206164647260448201526265737360e81b6064820152608401610309565b6000610d1c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000610d29826109d8565b90508060020154600003610df95780610d438789836142b7565b50610d4e87876126ad565b60018201805460ff191660ff92909216919091179055600080516020614f41833981519152600190810154610d829161438c565b60028201556006810180546001600160a01b0319166001600160a01b038716179055600080516020614f418339815191526001908101805491820181556000908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610e35565b60068101546001600160a01b03868116911614610e3557600060058201556006810180546001600160a01b0319166001600160a01b0387161790555b600080866001600160a01b031663e6f8715860e01b858888604051602401610e5f93929190614451565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e9d9190614474565b600060405180830381855af49150503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b606091505b509150915081610f375760048101905080806020019051810190610f0191906144df565b604051602001610f119190614513565b60408051601f198184030181529082905262461bcd60e51b825261030991600401613a7b565b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b179052905160009182913091610f8e91614474565b600060405180830381855afa9150503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b5091509150816110025760048101905080806020019051810190610ff291906144df565b604051602001610f119190614576565b5050816001600160e01b031916336001600160a01b03167ffa02fc3a72fec2326e6703c83ff273b153110906b8bdb19d198b03ea7a3e404f89898960405161104c939291906145c9565b60405180910390a350505050505050565b6000606061106a836109d8565b600601546001600160a01b03169150600061108484612793565b905080516001600160401b0381111561109f5761109f613d2d565b6040519080825280602002602001820160405280156110d257816020015b60608152602001906001900390816110bd5790505b50915060005b8151811015611128576111038282815181106110f6576110f661421d565b6020026020010151612335565b8382815181106111155761111561421d565b60209081029190910101526001016110d8565b5050915091565b600061118782611182600080516020614f418339815191525b546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b61287d565b92915050565b6060600061119a836109d8565b60058101549091506000036111f15760405162461bcd60e51b815260206004820152601d60248201527f5769746e6574507269636546656564733a206e6f2052414420686173680000006044820152606401610309565b6111f9611488565b6001600160a01b0316632ebf5d5c82600501546040518263ffffffff1660e01b815260040161122a91815260200190565b600060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126f91908101906144df565b9392505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d184612dc4565b6040518263ffffffff1660e01b81526004016112ef91815260200190565b600060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118791908101906145f5565b6040805180820190915260008152606060208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a77fc1a4611381846113e4565b6040518263ffffffff1660e01b815260040161139f91815260200190565b600060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614683565b60006113ef826109d8565b6004015492915050565b6000611404826109d8565b6001015460ff1692915050565b604080518082019091526000808252602082015261143c600080516020614f41833981519152611148565b905090565b611449612680565b6114536000612e9a565b565b606061143c7f0000000000000000000000000000000000000000000000000000000000000000612eb3565b611453612f57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c919061470a565b611514612680565b7f0000000000000000000000000000000000000000000000000000000000000000601381111561154657611546613ac7565b61154e611488565b6001600160a01b0316634c729104836040518263ffffffff1660e01b815260040161157b91815260200190565b602060405180830381865afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bc9190614736565b60138111156115cd576115cd613ac7565b146116295760405162461bcd60e51b815260206004820152602660248201527f5769746e6574507269636546656564733a2062616420726573756c742064617460448201526561207479706560d01b6064820152608401610309565b600061166a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000611677826109d8565b9050806002015460000361174b57806116918587836142b7565b5061169c85856126ad565b60018201805460ff191660ff92909216919091179055600080516020614f418339815191526001908101546116d09161438c565b600282015560058101839055600080516020614f6183398151915280546001810182556000919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055611770565b8281600501541461177057600581018390556006810180546001600160a01b03191690555b816001600160e01b031916336001600160a01b03167f2045f236d366b45bfe85554add87377b7266b5c509a8039f567ce9c9c1e302888787876040516117b893929190614751565b60405180910390a35050505050565b6117cf612680565b600061181083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b9050600080516020614f61833981519152600061182c836109d8565b600281015490915060008190036118855760405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b8254600090849061189890600190614775565b815481106118a8576118a861421d565b6000918252602090912060088204015460079091166004026101000a900460e01b905080846118d8600185614775565b815481106118e8576118e861421d565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555081611922826109d8565b600201556001600160e01b0319851660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602052604081209061196982826136ab565b5060018101805460ff191690556000600282018190556003820181905560048201819055600582018190556006820180546001600160a01b031916905560078201819055600890910155506040516001600160e01b031985169033907fe43fb0f08a34bcdce6df0e4f5fc795d0016c6fe3c7ace31aa463c868ad9cd5d2906119f4908a908a90614788565b60405180910390a3505050505050565b60408051808201909152600080825260208201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630aa4112a611a53856113e4565b6040518263ffffffff1660e01b8152600401611a7191815260200190565b606060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906147b2565b91509150915091565b6000611ac6826109d8565b6005015492915050565b6000611ada612680565b604051632956d1c760e21b815273__WitnetPriceFeedsLib___________________9063a55b471c90611b17908890889088908890600401614817565b602060405180830381865af4158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b58919061470a565b9050336001600160a01b03167fc8b3a4be5c8e12bed9e0df82e21ff2e36e5d49cc5daa1c75be478faf0a7415f482836001600160a01b03163f8686604051611ba39493929190614849565b60405180910390a2949350505050565b6000611187611bc1836113e4565b612fd2565b6000611bf2611bd3611411565b611be2368590038501856141d8565b9051905160ff9182169116101590565b611c485760405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a20756e7365637572652075706461746044820152606560f81b6064820152608401610309565b61126f83611182368590038501856141d8565b611c63612680565b611cca8383836001600160a01b0316631eef90526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190614871565b505050565b604051630f7b104360e31b815260048101829052602060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614871565b60606000611d6e611488565b6001600160a01b031663a83e942c611d8585611abb565b6040518263ffffffff1660e01b8152600401611da391815260200190565b600060405180830381865afa158015611dc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de891908101906148ad565b905080516001600160401b03811115611e0357611e03613d2d565b604051908082528060200260200182016040528015611e7557816020015b611e626040805160e0810190915260008082526020820190815260200160008152602001606081526020016060815260200160608152602001606081525090565b815260200190600190039081611e215790505b50915060005b8251811015611f3c57611e8c611488565b6001600160a01b0316639dd48757838381518110611eac57611eac61421d565b60200260200101516040518263ffffffff1660e01b8152600401611ed291815260200190565b600060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f179190810190614a44565b838281518110611f2957611f2961421d565b6020908102919091010152600101611e7b565b5050919050565b611f4b6136e5565b6000611f5683612dc4565b90508015611fce576000611f6984611276565b90506000611f7a8260600151613070565b90506040518060800160405280611f908361308e565b81526020018360200151815260200183604001518152602001611fb287611bb3565b6005811115611fc357611fc3613ac7565b905295945050505050565b6000611fd9846109d8565b600601546001600160a01b0316905080156120d557604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290516000918291309161204391614474565b600060405180830381855afa9150503d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b5091509150816120b757600481019050808060200190518101906120a791906144df565b604051602001610f119190614b4f565b808060200190518101906120cb9190614b98565b9695505050505050565b604051806080016040528060008152602001600081526020016000801b815260200161210086611bb3565b600581111561211157612111613ac7565b9052949350505050565b50919050565b60008061216384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506001600160e01b0319811661221061217c836109d8565b805461218790614233565b80601f01602080910402602001604051908101604052809291908181526020018280546121b390614233565b80156122005780601f106121d557610100808354040283529160200191612200565b820191906000526020600020905b8154815290600101906020018083116121e357829003601f168201915b5050505050805160209091012090565b6001600160e01b03191614949350505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d1846113e4565b61228661370d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166359209b396122be84612dc4565b6040518263ffffffff1660e01b81526004016122dc91815260200190565b600060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614be6565b600061143c6001546001600160a01b031690565b6060612340826109d8565b805461234b90614233565b80601f016020809104026020016040519081016040528092919081815260200182805461237790614233565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b50505050509050919050565b6123d8612680565b6123e18161310a565b50565b6000806000806123f385611f43565b805160208201519192509060028360600151600581111561241657612416613ac7565b146124885760018360600151600581111561243357612433613ac7565b1480612454575060048360600151600581111561245257612452613ac7565b145b80612474575060058360600151600581111561247257612472613ac7565b145b6124805761019061248b565b61019461248b565b60c85b919550935061ffff169150509193909250565b6060816001600160401b038111156124b8576124b8613d2d565b6040519080825280602002602001820160405280156124f157816020015b6124de6136e5565b8152602001906001900390816124d65790505b50905060005b8281101561254e576125298484838181106125145761251461421d565b905060200201602081019061080a9190613a34565b82828151811061253b5761253b61421d565b60209081029190910101526001016124f7565b5092915050565b61255d612680565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600080516020614f4183398151915255565b61259a612680565b6125ec8585856001600160a01b031663bf7a0bd386866040518363ffffffff1660e01b81526004016125cd929190614d2a565b6020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b5050505050565b6040516001628a76f160e01b0319815260009073__WitnetPriceFeedsLib___________________9063ff75890f90612636908890889088908890600401614817565b602060405180830381865af4158015612653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612677919061470a565b95945050505050565b6000546001600160a01b031633146114535760405163118cdaa760e01b8152336004820152602401610309565b60405163e78d44d960e01b815260009073__WitnetPriceFeedsLib___________________9063e78d44d99061270b907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614dba565b602060405180830381865af4925050508015612744575060408051601f3d908101601f1916820190925261274191810190614dd4565b60015b61278c57612750614df1565b806308c379a0036127805750612764614e0d565b8061276f5750612782565b80604051602001610f119190614b4f565b505b3d6000803e3d6000fd5b9050611187565b6001600160e01b0319811660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602090815260409182902060089081015483518281526101208101909452606093909290919082016101008036833701905050915060005b600881101561287557818382815181106128185761281861421d565b60200260200101906001600160e01b03191690816001600160e01b0319168152505082818151811061284c5761284c61421d565b60209081029190910101516001600160e01b0319161561287557602082901b91506001016127fc565b825250919050565b600080612889846109d8565b600581015490915015612d0a5761289f3a611ccf565b9150813410156128ff5760405162461bcd60e51b815260206004820152602560248201527f5769746e6574507269636546656564733a20696e73756666696369656e742072604482015264195dd85c9960da1b6064820152608401610309565b6004810154600061290f82612fd2565b9050600181600581111561292557612925613ac7565b03612aa0576040516247405160e11b81526004810183905260009085906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690628e80a290602401602060405180830381865afa158015612992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b69190614871565b6129c09190614e96565b90506000811315612a95578094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636064d6fd86856040518363ffffffff1660e01b8152600401612a1d91815260200190565b6000604051808303818588803b158015612a3657600080fd5b505af1158015612a4a573d6000803e3d6000fd5b50506040518881526001600160e01b03198b1693503392507f1b90a8aeedda2b8b0d437e329033c6937be332644e1657d02369da92cd14197c915060200160405180910390a3612a9a565b600094505b50612d03565b6002816005811115612ab457612ab4613ac7565b03612b6657600383015415612b5a57600383015460405163045bf42f60e11b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1158015612b30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b5891908101906145f5565b505b60038301829055612bf5565b60405163045bf42f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1925050508015612bee57506040513d6000823e601f3d908101601f19168201604052612beb91908101906145f5565b60015b15612bf557505b6005830154604051631ee15bd160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633dc2b7a2918791612c48918a90600401613be5565b60206040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190614871565b6004840181905591506001600160e01b03198616337fa4c90c11eb5dd52e88b6a7c160bf96d964ad12d852a0b515f9585013d833540a612ceb88602081015190516001600160f81b031960f89190911b166001600160401b039091161790565b60408051918252602082018990520160405180910390a35b5050612d7e565b60068101546001600160a01b031615612d3657612d2f612d2985612793565b8461313c565b9150612d7e565b60405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b3482101561254e57336108fc612d948434614775565b6040518115909202916000818181858888f19350505050158015612dbc573d6000803e3d6000fd5b505092915050565b600080612dd0836113e4565b9050600081118015612e7b57506002604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e689190614eb6565b6005811115612e7957612e79613ac7565b145b15612e865792915050565b612e8f836109d8565b600301549392505050565b600180546001600160a01b03191690556123e1816131f9565b60606000612ec083613249565b6001600160401b03811115612ed757612ed7613d2d565b6040519080825280601f01601f191660200182016040528015612f01576020820181803683370190505b50905060005b815181101561254e57838160208110612f2257612f2261421d565b1a60f81b828281518110612f3857612f3861421d565b60200101906001600160f81b031916908160001a905350600101612f07565b3380612f61612321565b6001600160a01b031614612fc95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610309565b6123e181612e9a565b6000811561306357604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa15801561303f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614eb6565b506002919050565b919050565b61307861370d565b600061308383613282565b905061126f816132a7565b60008180600001516130fd5760405162461bcd60e51b815260206004820152603260248201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260448201527137b69032b93937b932b2103932b9bab63a1760711b6064820152608401610309565b61126f83602001516132db565b613112612680565b6001600160a01b038116612fc957604051631e4fbdf760e01b815260006004820152602401610309565b60008083513461314c9190614ed1565b905060005b8451811015612dbc57306001600160a01b031663abc86c6e8387848151811061317c5761317c61421d565b6020026020010151876040518463ffffffff1660e01b81526004016131a2929190614ef3565b60206040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e59190614871565b6131ef908461438c565b9250600101613151565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b602081101561306b578181602081106132675761326761421d565b1a60f81b6001600160f81b0319161561306b5760010161324c565b61328a613725565b604080518082019091528281526000602082015261126f8161333e565b6132af61370d565b5060a0810151604080518082019091526001600160401b03909116602714158152602081019190915290565b60008160008060ff16826040015160ff161461331b57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610309565b61332d8460000151856060015161345e565b6001600160401b0316949350505050565b613346613725565b815151829060000361336b576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b80156133ee5761338b8961351f565b95508161339781614f27565b6007600589901c169650601f8816955092505060051985016133e65760208901516133c28a8661345e565b9350808a602001516133d49190614775565b6133de908461438c565b92505061337c565b50600061337c565b600760ff861611156134185760405163bd2ac87960e01b815260ff86166004820152602401610309565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613476575060ff8116611187565b8160ff166018036134945761348a8361351f565b60ff169050611187565b8160ff166019036134b3576134a883613581565b61ffff169050611187565b8160ff16601a036134d4576134c7836135ed565b63ffffffff169050611187565b8160ff16601b036134e85761278c8361364c565b8160ff16601f0361350157506001600160401b03611187565b604051636d785b1360e01b815260ff83166004820152602401610309565b6000816020015182600001515180821115613557576040516363a056dd60e01b81526004810183905260248101829052604401610309565b835160208501805180830160010151955090819061357482614f27565b8152505050505050919050565b600081602001516002613594919061438c565b825151808211156135c2576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516002818401810151965090916135e0828461438c565b9052509395945050505050565b600081602001516004613600919061438c565b8251518082111561362e576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516004818401810151965090916135e0828461438c565b60008160200151600861365f919061438c565b8251518082111561368d576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516008818401810151965090916135e0828461438c565b5080546136b790614233565b6000825580601f106136c7575050565b601f0160209004906000526020600020908101906123e1919061376c565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806000151581526020016137085b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613781576000815560010161376d565b5090565b6001600160c01b03198135818116916008851015612dbc5760089490940360031b84901b1690921692915050565b60005b838110156137ce5781810151838201526020016137b6565b50506000910152565b600081518084526137ef8160208601602086016137b3565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561385057601f1986840301895261383e8383516137d7565b98840198925090830190600101613822565b5090979650505050505050565b606080825284519082018190526000906020906080840190828801845b828110156138a05781516001600160e01b0319168452928401929084019060010161387a565b505050838103828501526138b48187613803565b8481036040860152855180825283870192509083019060005b818110156138e9578351835292840192918401916001016138cd565b509098975050505050505050565b60008083601f84011261390957600080fd5b5081356001600160401b0381111561392057600080fd5b60208301915083602082850101111561393857600080fd5b9250929050565b6001600160a01b03811681146123e157600080fd5b60008083601f84011261396657600080fd5b5081356001600160401b0381111561397d57600080fd5b6020830191508360208260051b850101111561393857600080fd5b6000806000806000606086880312156139b057600080fd5b85356001600160401b03808211156139c757600080fd5b6139d389838a016138f7565b9097509550602088013591506139e88261393f565b909350604087013590808211156139fe57600080fd5b50613a0b88828901613954565b969995985093965092949392505050565b80356001600160e01b03198116811461306b57600080fd5b600060208284031215613a4657600080fd5b61126f82613a1c565b6001600160a01b0383168152604060208201819052600090613a7390830184613803565b949350505050565b60208152600061126f60208301846137d7565b6020815281516020820152602082015160408201526040820151606082015260006060830151608080840152613a7360a08401826137d7565b634e487b7160e01b600052602160045260246000fd5b602081526000825160ff8110613af557613af5613ac7565b806020840152506020830151604080840152613a7360608401826137d7565b60148110613b2457613b24613ac7565b9052565b602081016111878284613b14565b815160ff1681526020808301516001600160401b03169082015260408101611187565b600080600060408486031215613b6e57600080fd5b83356001600160401b03811115613b8457600080fd5b613b90868287016138f7565b909790965060209590950135949350505050565b60008060208385031215613bb757600080fd5b82356001600160401b03811115613bcd57600080fd5b613bd9858286016138f7565b90969095509350505050565b8281526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b60008060008060408587031215613c2557600080fd5b84356001600160401b0380821115613c3c57600080fd5b613c48888389016138f7565b90965094506020870135915080821115613c6157600080fd5b50613c6e878288016138f7565b95989497509550505050565b60068110613b2457613b24613ac7565b602081016111878284613c7a565b6000808284036060811215613cac57600080fd5b613cb584613a1c565b92506040601f1982011215613cc957600080fd5b506020830190509250929050565b600080600060408486031215613cec57600080fd5b83356001600160401b03811115613d0257600080fd5b613d0e868287016138f7565b9094509250506020840135613d228161393f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604081018181106001600160401b0382111715613d6257613d62613d2d565b60405250565b608081018181106001600160401b0382111715613d6257613d62613d2d565b60c081018181106001600160401b0382111715613d6257613d62613d2d565b601f8201601f191681016001600160401b0381118282101715613dcb57613dcb613d2d565b6040525050565b60405160e081016001600160401b0381118282101715613df457613df4613d2d565b60405290565b60006001600160401b03821115613e1357613e13613d2d565b50601f01601f191660200190565b600060208284031215613e3357600080fd5b81356001600160401b03811115613e4957600080fd5b8201601f81018413613e5a57600080fd5b8035613e6581613dfa565b604051613e728282613da6565b828152866020848601011115613e8757600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208284031215613eb857600080fd5b5035919050565b60058110613b2457613b24613ac7565b600082825180855260208086019550808260051b8401018186016000805b85811015613f4757868403601f19018a5282518460408101845b6002811015613f32578782038352613f208285516137d7565b93890193928901929150600101613f07565b509b87019b9550505091840191600101613eed565b509198975050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156138e957603f19898403018552815160e060ff825116855288820151613faa8a870182613ebf565b5087820151613fbb89870182613b14565b506060808301518282880152613fd3838801826137d7565b9250505060808083015186830382880152613fee83826137d7565b9250505060a080830151868303828801526140098382613ecf565b9250505060c0808301519250858203818701525061402781836137d7565b968901969450505090860190600101613f7e565b8051825260208101516020830152604081015160408301526060810151611cca6060840182613c7a565b60808101611187828461403b565b6020815281511515602082015260006020830151604080840152805160c06060850152805160406101208601526140ae6101608601826137d7565b6020928301516101408701529183015160ff166080860152506040820151906140dc60a086018360ff169052565b606083015160ff1660c086015260808301516001600160401b0380821660e088015260a0909401519384166101008701529150612677565b60006020828403121561412657600080fd5b813561126f8161393f565b6000806020838503121561414457600080fd5b82356001600160401b0381111561415a57600080fd5b613bd985828601613954565b6020808252825182820181905260009190848201906040850190845b818110156141a85761419583855161403b565b9284019260809290920191600101614182565b50909695505050505050565b60ff811681146123e157600080fd5b6001600160401b03811681146123e157600080fd5b6000604082840312156141ea57600080fd5b6040516141f681613d43565b8235614201816141b4565b81526020830135614211816141c3565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061424757607f821691505b60208210810361211b57634e487b7160e01b600052602260045260246000fd5b601f821115611cca576000816000526020600020601f850160051c810160208610156142905750805b601f850160051c820191505b818110156142af5782815560010161429c565b505050505050565b6001600160401b038311156142ce576142ce613d2d565b6142e2836142dc8354614233565b83614267565b6000601f84116001811461431657600085156142fe5750838201355b600019600387901b1c1916600186901b1783556125ec565b600083815260209020601f19861690835b828110156143475786850135825560209485019460019092019101614327565b50868210156143645760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561118757611187614376565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b8781101561385057848303601f19018952813536889003601e1901811261440857600080fd5b870184810190356001600160401b0381111561442357600080fd5b80360382131561443257600080fd5b61443d85828461439f565b9a86019a94505050908301906001016143e2565b63ffffffff60e01b841681526040602082015260006126776040830184866143c8565b600082516144868184602087016137b3565b9190910192915050565b600082601f8301126144a157600080fd5b81516144ac81613dfa565b6040516144b98282613da6565b8281528560208487010111156144ce57600080fd5b6126778360208301602088016137b3565b6000602082840312156144f157600080fd5b81516001600160401b0381111561450757600080fd5b613a7384828501614490565b7f5769746e657450726963654665656455706772616461626c653a20736f6c7665815274039103b30b634b230ba34b7b7103330b4b632b21d1605d1b6020820152600082516145698160358501602087016137b3565b9190910160350192915050565b7f5769746e6574507269636546656564733a20736d6f6b652d746573742066616981526403632b21d160dd1b6020820152600082516145bc8160258501602087016137b3565b9190910160250192915050565b6040815260006145dd60408301858761439f565b905060018060a01b0383166020830152949350505050565b60006020828403121561460757600080fd5b81516001600160401b038082111561461e57600080fd5b908301906080828603121561463257600080fd5b60405161463e81613d68565b82518152602083015160208201526040830151604082015260608301518281111561466857600080fd5b61467487828601614490565b60608301525095945050505050565b60006020828403121561469557600080fd5b81516001600160401b03808211156146ac57600080fd5b90830190604082860312156146c057600080fd5b6040516146cc81613d43565b825160ff81106146db57600080fd5b81526020830151828111156146ef57600080fd5b6146fb87828601614490565b60208301525095945050505050565b60006020828403121561471c57600080fd5b815161126f8161393f565b80516014811061306b57600080fd5b60006020828403121561474857600080fd5b61126f82614727565b60408152600061476560408301858761439f565b9050826020830152949350505050565b8181038181111561118757611187614376565b602081526000613a7360208301848661439f565b805161306b816141b4565b805161306b816141c3565b60008082840360608112156147c657600080fd5b835192506040601f19820112156147dc57600080fd5b506040516147e981613d43565b60208401516147f7816141b4565b81526040840151614807816141c3565b6020820152919491935090915050565b60408152600061482b60408301868861439f565b828103602084015261483e81858761439f565b979650505050505050565b60018060a01b03851681528360208201526060604082015260006120cb60608301848661439f565b60006020828403121561488357600080fd5b5051919050565b60006001600160401b038211156148a3576148a3613d2d565b5060051b60200190565b600060208083850312156148c057600080fd5b82516001600160401b038111156148d657600080fd5b8301601f810185136148e757600080fd5b80516148f28161488a565b6040516148ff8282613da6565b82815260059290921b830184019184810191508783111561491f57600080fd5b928401925b8284101561483e57835182529284019290840190614924565b80516005811061306b57600080fd5b600082601f83011261495d57600080fd5b8151602061496a8261488a565b6040516149778282613da6565b83815260059390931b850182019282810191508684111561499757600080fd5b8286015b84811015614a395780516001600160401b03808211156149bb5760008081fd5b818901915089603f8301126149d05760008081fd5b6040516149dc81613d43565b80606084018c8111156149ef5760008081fd5b8885015b81811015614a2757805185811115614a0b5760008081fd5b614a198f8c838a0101614490565b8452509189019189016149f3565b5050508552505091830191830161499b565b509695505050505050565b600060208284031215614a5657600080fd5b81516001600160401b0380821115614a6d57600080fd5b9083019060e08286031215614a8157600080fd5b614a89613dd2565b614a928361479c565b8152614aa06020840161493d565b6020820152614ab160408401614727565b6040820152606083015182811115614ac857600080fd5b614ad487828601614490565b606083015250608083015182811115614aec57600080fd5b614af887828601614490565b60808301525060a083015182811115614b1057600080fd5b614b1c8782860161494c565b60a08301525060c083015182811115614b3457600080fd5b614b4087828601614490565b60c08301525095945050505050565b7102bb4ba3732ba283934b1b2a332b2b2399d160751b815260008251614b7c8160128501602087016137b3565b9190910160120192915050565b80516006811061306b57600080fd5b600060808284031215614baa57600080fd5b604051614bb681613d68565b825181526020830151602082015260408301516040820152614bda60608401614b89565b60608201529392505050565b60006020808385031215614bf957600080fd5b82516001600160401b0380821115614c1057600080fd5b81850191506040808388031215614c2657600080fd5b8051614c3181613d43565b83518015158114614c4157600080fd5b81528385015183811115614c5457600080fd5b939093019260c08489031215614c6957600080fd5b8151614c7481613d87565b845184811115614c8357600080fd5b8501808a03841315614c9457600080fd5b8351614c9f81613d43565b815186811115614cae57600080fd5b614cba8c828501614490565b82525090870151878201528152614cd285870161479c565b86820152614ce183860161479c565b83820152614cf16060860161479c565b6060820152614d02608086016147a7565b6080820152614d1360a086016147a7565b60a082015294810194909452509195945050505050565b6020808252818101839052600090600560408085019086831b86010187855b888110156138e957878303603f190184528135368b9003601e19018112614d6f57600080fd5b8a0186810190356001600160401b03811115614d8a57600080fd5b80871b3603821315614d9b57600080fd5b614da68582846143c8565b958801959450505090850190600101614d49565b83815260406020820152600061267760408301848661439f565b600060208284031215614de657600080fd5b815161126f816141b4565b600060033d1115614e0a5760046000803e5060005160e01c5b90565b600060443d1015614e1b5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614e4a57505050505090565b8285019150815181811115614e625750505050505090565b843d8701016020828501011115614e7c5750505050505090565b614e8b60208286010187613da6565b509095945050505050565b818103600083128015838313168383128216171561254e5761254e614376565b600060208284031215614ec857600080fd5b61126f82614b89565b600082614eee57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b0319831681526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b600060018201614f3957614f39614376565b506001019056fee36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ffe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200a264697066735822122092953fe9bee6aaf493fbaa38c1838b59729f5a6240a6cfbebcbe41ab27174ec064736f6c63430008160033", - "deployedBytecode": "0x6080604052600436106102515760003560e01c8063a55b471c11610139578063d3471e34116100b6578063f2fde38b1161007a578063f2fde38b146108f0578063f78eea8314610910578063f9f34bb61461094b578063fae91a5114610978578063ff24fb4f14610998578063ff75890f146109b857610251565b8063d3471e341461084c578063d6a3614f1461086c578063e13c11c41461088e578063e30c3978146108bb578063ef1dff2b146108d057610251565b8063b411ee94116100fd578063b411ee941461077c578063c064d372146107a2578063c2f2a2ed146107c2578063c3d98ea8146107ef578063c5010d171461081c57610251565b8063a55b471c146106af578063a80c5bc0146106cf578063abc86c6e146106fc578063ac82c6081461070f578063adb7c3f71461072f57610251565b80636ab221f8116101d25780637b103999116101965780637b103999146105ee57806384292f071461060357806386ac03e01461062357806389a87b16146106435780638da5cb5b14610671578063909375801461068f57610251565b80636ab221f81461055b5780636d1178e51461058d578063715018a6146105af57806375dadb32146105c457806379ba5097146105d957610251565b806346d1d21a1161021957806346d1d21a1461045457806348765643146104a057806349492ef1146104cd5780635be93984146104fa5780636175ff001461051a57610251565b80630306732e1461038b57806303f3813d146103b8578063384ac938146103d85780633e088e121461040657806340eb7a0714610427575b34801561025d57600080fd5b506000356001600160e01b03191663e0d20f7360e01b14801561027f57503330145b156103375760006102a660206102953684613785565b6001600160c01b031916901b6109d8565b600601546001600160a01b03169050806103125760405162461bcd60e51b815260206004820152602260248201527f5769746e6574507269636546656564733a20756e736574746c656420736f6c7660448201526132b960f11b60648201526084015b60405180910390fd5b60405136600082376000803683855af43d806000843e818015610333578184f35b8184fd5b60405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a206e6f7420696d706c656d656e74656044820152601960fa1b6064820152608401610309565b005b34801561039757600080fd5b506103a0610a12565b6040516103af9392919061385d565b60405180910390f35b3480156103c457600080fd5b506103896103d3366004613998565b610c71565b3480156103e457600080fd5b506103f86103f3366004613a34565b61105d565b6040516103af929190613a4f565b610419610414366004613a34565b61112f565b6040519081526020016103af565b34801561043357600080fd5b50610447610442366004613a34565b61118d565b6040516103af9190613a7b565b34801561046057600080fd5b506104887f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103af565b3480156104ac57600080fd5b506104c06104bb366004613a34565b611276565b6040516103af9190613a8e565b3480156104d957600080fd5b506104ed6104e8366004613a34565b611334565b6040516103af9190613add565b34801561050657600080fd5b50610419610515366004613a34565b6113e4565b34801561052657600080fd5b5061054e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516103af9190613b28565b34801561056757600080fd5b5061057b610576366004613a34565b6113f9565b60405160ff90911681526020016103af565b34801561059957600080fd5b506105a2611411565b6040516103af9190613b36565b3480156105bb57600080fd5b50610389611441565b3480156105d057600080fd5b50610447611455565b3480156105e557600080fd5b50610389611480565b3480156105fa57600080fd5b50610488611488565b34801561060f57600080fd5b5061038961061e366004613b59565b61150c565b34801561062f57600080fd5b5061038961063e366004613ba4565b6117c7565b34801561064f57600080fd5b5061066361065e366004613a34565b611a04565b6040516103af929190613be5565b34801561067d57600080fd5b506000546001600160a01b0316610488565b34801561069b57600080fd5b506104196106aa366004613a34565b611abb565b3480156106bb57600080fd5b506104886106ca366004613c0f565b611ad0565b3480156106db57600080fd5b506106ef6106ea366004613a34565b611bb3565b6040516103af9190613c8a565b61041961070a366004613c98565b611bc6565b34801561071b57600080fd5b5061038961072a366004613cd7565b611c5b565b34801561073b57600080fd5b506107637f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016103af565b34801561078857600080fd5b50610763610797366004613e21565b805160209091012090565b3480156107ae57600080fd5b506104196107bd366004613ea6565b611ccf565b3480156107ce57600080fd5b506107e26107dd366004613a34565b611d62565b6040516103af9190613f55565b3480156107fb57600080fd5b5061080f61080a366004613a34565b611f43565b6040516103af9190614065565b34801561082857600080fd5b5061083c610837366004613ba4565b612121565b60405190151581526020016103af565b34801561085857600080fd5b506104c0610867366004613a34565b612223565b34801561087857600080fd5b50600080516020614f6183398151915254610419565b34801561089a57600080fd5b506108ae6108a9366004613a34565b61227e565b6040516103af9190614073565b3480156108c757600080fd5b50610488612321565b3480156108dc57600080fd5b506104476108eb366004613a34565b612335565b3480156108fc57600080fd5b5061038961090b366004614114565b6123d0565b34801561091c57600080fd5b5061093061092b366004613ea6565b6123e4565b604080519384526020840192909252908201526060016103af565b34801561095757600080fd5b5061096b610966366004614131565b61249e565b6040516103af9190614166565b34801561098457600080fd5b506103896109933660046141d8565b612555565b3480156109a457600080fd5b506103896109b3366004613998565b612592565b3480156109c457600080fd5b506104886109d3366004613c0f565b6125f3565b6001600160e01b03191660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d2016020526040902090565b600080516020614f6183398151915280546040805160208084028201810190925282815260609384938493830182828015610a9957602002820191906000526020600020906000905b82829054906101000a900460e01b6001600160e01b03191681526020019060040190602082600301049283019260010382029150808411610a5b5790505b5050505050925082516001600160401b03811115610ab957610ab9613d2d565b604051908082528060200260200182016040528015610aec57816020015b6060815260200190600190039081610ad75790505b50915082516001600160401b03811115610b0857610b08613d2d565b604051908082528060200260200182016040528015610b31578160200160208202803683370190505b50905060005b8351811015610c6b576000610b64858381518110610b5757610b5761421d565b60200260200101516109d8565b9050806000018054610b7590614233565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba190614233565b8015610bee5780601f10610bc357610100808354040283529160200191610bee565b820191906000526020600020905b815481529060010190602001808311610bd157829003601f168201915b5050505050848381518110610c0557610c0561421d565b602090810291909101015260068101546001600160a01b031615610c3f57600681015460601b6bffffffffffffffffffffffff1916610c45565b80600501545b838381518110610c5757610c5761421d565b602090810291909101015250600101610b37565b50909192565b610c79612680565b6001600160a01b038316610cdb5760405162461bcd60e51b815260206004820152602360248201527f5769746e6574507269636546656564733a206e6f20736f6c766572206164647260448201526265737360e81b6064820152608401610309565b6000610d1c86868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000610d29826109d8565b90508060020154600003610df95780610d438789836142b7565b50610d4e87876126ad565b60018201805460ff191660ff92909216919091179055600080516020614f41833981519152600190810154610d829161438c565b60028201556006810180546001600160a01b0319166001600160a01b038716179055600080516020614f418339815191526001908101805491820181556000908152602090206008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055610e35565b60068101546001600160a01b03868116911614610e3557600060058201556006810180546001600160a01b0319166001600160a01b0387161790555b600080866001600160a01b031663e6f8715860e01b858888604051602401610e5f93929190614451565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610e9d9190614474565b600060405180830381855af49150503d8060008114610ed8576040519150601f19603f3d011682016040523d82523d6000602084013e610edd565b606091505b509150915081610f375760048101905080806020019051810190610f0191906144df565b604051602001610f119190614513565b60408051601f198184030181529082905262461bcd60e51b825261030991600401613a7b565b5050604080516001600160e01b0319841660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b179052905160009182913091610f8e91614474565b600060405180830381855afa9150503d8060008114610fc9576040519150601f19603f3d011682016040523d82523d6000602084013e610fce565b606091505b5091509150816110025760048101905080806020019051810190610ff291906144df565b604051602001610f119190614576565b5050816001600160e01b031916336001600160a01b03167ffa02fc3a72fec2326e6703c83ff273b153110906b8bdb19d198b03ea7a3e404f89898960405161104c939291906145c9565b60405180910390a350505050505050565b6000606061106a836109d8565b600601546001600160a01b03169150600061108484612793565b905080516001600160401b0381111561109f5761109f613d2d565b6040519080825280602002602001820160405280156110d257816020015b60608152602001906001900390816110bd5790505b50915060005b8151811015611128576111038282815181106110f6576110f661421d565b6020026020010151612335565b8382815181106111155761111561421d565b60209081029190910101526001016110d8565b5050915091565b600061118782611182600080516020614f418339815191525b546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b61287d565b92915050565b6060600061119a836109d8565b60058101549091506000036111f15760405162461bcd60e51b815260206004820152601d60248201527f5769746e6574507269636546656564733a206e6f2052414420686173680000006044820152606401610309565b6111f9611488565b6001600160a01b0316632ebf5d5c82600501546040518263ffffffff1660e01b815260040161122a91815260200190565b600060405180830381865afa158015611247573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261126f91908101906144df565b9392505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d184612dc4565b6040518263ffffffff1660e01b81526004016112ef91815260200190565b600060405180830381865afa15801561130c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261118791908101906145f5565b6040805180820190915260008152606060208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a77fc1a4611381846113e4565b6040518263ffffffff1660e01b815260040161139f91815260200190565b600060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614683565b60006113ef826109d8565b6004015492915050565b6000611404826109d8565b6001015460ff1692915050565b604080518082019091526000808252602082015261143c600080516020614f41833981519152611148565b905090565b611449612680565b6114536000612e9a565b565b606061143c7f0000000000000000000000000000000000000000000000000000000000000000612eb3565b611453612f57565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c919061470a565b611514612680565b7f0000000000000000000000000000000000000000000000000000000000000000601381111561154657611546613ac7565b61154e611488565b6001600160a01b0316634c729104836040518263ffffffff1660e01b815260040161157b91815260200190565b602060405180830381865afa158015611598573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bc9190614736565b60138111156115cd576115cd613ac7565b146116295760405162461bcd60e51b815260206004820152602660248201527f5769746e6574507269636546656564733a2062616420726573756c742064617460448201526561207479706560d01b6064820152608401610309565b600061166a84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506000611677826109d8565b9050806002015460000361174b57806116918587836142b7565b5061169c85856126ad565b60018201805460ff191660ff92909216919091179055600080516020614f418339815191526001908101546116d09161438c565b600282015560058101839055600080516020614f6183398151915280546001810182556000919091527fb7ef506da7909f25321b247725840c95fced7275a59588a4236c0671ab1d82216008820401805463ffffffff60079093166004026101000a928302191660e085901c92909202919091179055611770565b8281600501541461177057600581018390556006810180546001600160a01b03191690555b816001600160e01b031916336001600160a01b03167f2045f236d366b45bfe85554add87377b7266b5c509a8039f567ce9c9c1e302888787876040516117b893929190614751565b60405180910390a35050505050565b6117cf612680565b600061181083838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b9050600080516020614f61833981519152600061182c836109d8565b600281015490915060008190036118855760405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b8254600090849061189890600190614775565b815481106118a8576118a861421d565b6000918252602090912060088204015460079091166004026101000a900460e01b905080846118d8600185614775565b815481106118e8576118e861421d565b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555081611922826109d8565b600201556001600160e01b0319851660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602052604081209061196982826136ab565b5060018101805460ff191690556000600282018190556003820181905560048201819055600582018190556006820180546001600160a01b031916905560078201819055600890910155506040516001600160e01b031985169033907fe43fb0f08a34bcdce6df0e4f5fc795d0016c6fe3c7ace31aa463c868ad9cd5d2906119f4908a908a90614788565b60405180910390a3505050505050565b60408051808201909152600080825260208201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630aa4112a611a53856113e4565b6040518263ffffffff1660e01b8152600401611a7191815260200190565b606060405180830381865afa158015611a8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab291906147b2565b91509150915091565b6000611ac6826109d8565b6005015492915050565b6000611ada612680565b604051632956d1c760e21b815273__WitnetPriceFeedsLib___________________9063a55b471c90611b17908890889088908890600401614817565b602060405180830381865af4158015611b34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b58919061470a565b9050336001600160a01b03167fc8b3a4be5c8e12bed9e0df82e21ff2e36e5d49cc5daa1c75be478faf0a7415f482836001600160a01b03163f8686604051611ba39493929190614849565b60405180910390a2949350505050565b6000611187611bc1836113e4565b612fd2565b6000611bf2611bd3611411565b611be2368590038501856141d8565b9051905160ff9182169116101590565b611c485760405162461bcd60e51b815260206004820152602160248201527f5769746e6574507269636546656564733a20756e7365637572652075706461746044820152606560f81b6064820152608401610309565b61126f83611182368590038501856141d8565b611c63612680565b611cca8383836001600160a01b0316631eef90526040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ca6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061061e9190614871565b505050565b604051630f7b104360e31b815260048101829052602060248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015611d3e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614871565b60606000611d6e611488565b6001600160a01b031663a83e942c611d8585611abb565b6040518263ffffffff1660e01b8152600401611da391815260200190565b600060405180830381865afa158015611dc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611de891908101906148ad565b905080516001600160401b03811115611e0357611e03613d2d565b604051908082528060200260200182016040528015611e7557816020015b611e626040805160e0810190915260008082526020820190815260200160008152602001606081526020016060815260200160608152602001606081525090565b815260200190600190039081611e215790505b50915060005b8251811015611f3c57611e8c611488565b6001600160a01b0316639dd48757838381518110611eac57611eac61421d565b60200260200101516040518263ffffffff1660e01b8152600401611ed291815260200190565b600060405180830381865afa158015611eef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f179190810190614a44565b838281518110611f2957611f2961421d565b6020908102919091010152600101611e7b565b5050919050565b611f4b6136e5565b6000611f5683612dc4565b90508015611fce576000611f6984611276565b90506000611f7a8260600151613070565b90506040518060800160405280611f908361308e565b81526020018360200151815260200183604001518152602001611fb287611bb3565b6005811115611fc357611fc3613ac7565b905295945050505050565b6000611fd9846109d8565b600601546001600160a01b0316905080156120d557604080516001600160e01b0319861660248083019190915282518083039091018152604490910182526020810180516001600160e01b031663e0d20f7360e01b17905290516000918291309161204391614474565b600060405180830381855afa9150503d806000811461207e576040519150601f19603f3d011682016040523d82523d6000602084013e612083565b606091505b5091509150816120b757600481019050808060200190518101906120a791906144df565b604051602001610f119190614b4f565b808060200190518101906120cb9190614b98565b9695505050505050565b604051806080016040528060008152602001600081526020016000801b815260200161210086611bb3565b600581111561211157612111613ac7565b9052949350505050565b50919050565b60008061216384848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061079792505050565b90506001600160e01b0319811661221061217c836109d8565b805461218790614233565b80601f01602080910402602001604051908101604052809291908181526020018280546121b390614233565b80156122005780601f106121d557610100808354040283529160200191612200565b820191906000526020600020905b8154815290600101906020018083116121e357829003601f168201915b5050505050805160209091012090565b6001600160e01b03191614949350505050565b60408051608081018252600080825260208201819052918101919091526060808201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f61921b26112d1846113e4565b61228661370d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166359209b396122be84612dc4565b6040518263ffffffff1660e01b81526004016122dc91815260200190565b600060405180830381865afa1580156122f9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526111879190810190614be6565b600061143c6001546001600160a01b031690565b6060612340826109d8565b805461234b90614233565b80601f016020809104026020016040519081016040528092919081815260200182805461237790614233565b80156123c45780601f10612399576101008083540402835291602001916123c4565b820191906000526020600020905b8154815290600101906020018083116123a757829003601f168201915b50505050509050919050565b6123d8612680565b6123e18161310a565b50565b6000806000806123f385611f43565b805160208201519192509060028360600151600581111561241657612416613ac7565b146124885760018360600151600581111561243357612433613ac7565b1480612454575060048360600151600581111561245257612452613ac7565b145b80612474575060058360600151600581111561247257612472613ac7565b145b6124805761019061248b565b61019461248b565b60c85b919550935061ffff169150509193909250565b6060816001600160401b038111156124b8576124b8613d2d565b6040519080825280602002602001820160405280156124f157816020015b6124de6136e5565b8152602001906001900390816124d65790505b50905060005b8281101561254e576125298484838181106125145761251461421d565b905060200201602081019061080a9190613a34565b82828151811061253b5761253b61421d565b60209081029190910101526001016124f7565b5092915050565b61255d612680565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600080516020614f4183398151915255565b61259a612680565b6125ec8585856001600160a01b031663bf7a0bd386866040518363ffffffff1660e01b81526004016125cd929190614d2a565b6020604051808303816000875af1158015611ca6573d6000803e3d6000fd5b5050505050565b6040516001628a76f160e01b0319815260009073__WitnetPriceFeedsLib___________________9063ff75890f90612636908890889088908890600401614817565b602060405180830381865af4158015612653573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612677919061470a565b95945050505050565b6000546001600160a01b031633146114535760405163118cdaa760e01b8152336004820152602401610309565b60405163e78d44d960e01b815260009073__WitnetPriceFeedsLib___________________9063e78d44d99061270b907f00000000000000000000000000000000000000000000000000000000000000009087908790600401614dba565b602060405180830381865af4925050508015612744575060408051601f3d908101601f1916820190925261274191810190614dd4565b60015b61278c57612750614df1565b806308c379a0036127805750612764614e0d565b8061276f5750612782565b80604051602001610f119190614b4f565b505b3d6000803e3d6000fd5b9050611187565b6001600160e01b0319811660009081527fe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d201602090815260409182902060089081015483518281526101208101909452606093909290919082016101008036833701905050915060005b600881101561287557818382815181106128185761281861421d565b60200260200101906001600160e01b03191690816001600160e01b0319168152505082818151811061284c5761284c61421d565b60209081029190910101516001600160e01b0319161561287557602082901b91506001016127fc565b825250919050565b600080612889846109d8565b600581015490915015612d0a5761289f3a611ccf565b9150813410156128ff5760405162461bcd60e51b815260206004820152602560248201527f5769746e6574507269636546656564733a20696e73756666696369656e742072604482015264195dd85c9960da1b6064820152608401610309565b6004810154600061290f82612fd2565b9050600181600581111561292557612925613ac7565b03612aa0576040516247405160e11b81526004810183905260009085906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690628e80a290602401602060405180830381865afa158015612992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129b69190614871565b6129c09190614e96565b90506000811315612a95578094507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636064d6fd86856040518363ffffffff1660e01b8152600401612a1d91815260200190565b6000604051808303818588803b158015612a3657600080fd5b505af1158015612a4a573d6000803e3d6000fd5b50506040518881526001600160e01b03198b1693503392507f1b90a8aeedda2b8b0d437e329033c6937be332644e1657d02369da92cd14197c915060200160405180910390a3612a9a565b600094505b50612d03565b6002816005811115612ab457612ab4613ac7565b03612b6657600383015415612b5a57600383015460405163045bf42f60e11b815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1158015612b30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612b5891908101906145f5565b505b60038301829055612bf5565b60405163045bf42f60e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906308b7e85e906024016000604051808303816000875af1925050508015612bee57506040513d6000823e601f3d908101601f19168201604052612beb91908101906145f5565b60015b15612bf557505b6005830154604051631ee15bd160e11b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691633dc2b7a2918791612c48918a90600401613be5565b60206040518083038185885af1158015612c66573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612c8b9190614871565b6004840181905591506001600160e01b03198616337fa4c90c11eb5dd52e88b6a7c160bf96d964ad12d852a0b515f9585013d833540a612ceb88602081015190516001600160f81b031960f89190911b166001600160401b039091161790565b60408051918252602082018990520160405180910390a35b5050612d7e565b60068101546001600160a01b031615612d3657612d2f612d2985612793565b8461313c565b9150612d7e565b60405162461bcd60e51b815260206004820152601e60248201527f5769746e6574507269636546656564733a20756e6b6e6f776e206665656400006044820152606401610309565b3482101561254e57336108fc612d948434614775565b6040518115909202916000818181858888f19350505050158015612dbc573d6000803e3d6000fd5b505092915050565b600080612dd0836113e4565b9050600081118015612e7b57506002604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa158015612e44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e689190614eb6565b6005811115612e7957612e79613ac7565b145b15612e865792915050565b612e8f836109d8565b600301549392505050565b600180546001600160a01b03191690556123e1816131f9565b60606000612ec083613249565b6001600160401b03811115612ed757612ed7613d2d565b6040519080825280601f01601f191660200182016040528015612f01576020820181803683370190505b50905060005b815181101561254e57838160208110612f2257612f2261421d565b1a60f81b828281518110612f3857612f3861421d565b60200101906001600160f81b031916908160001a905350600101612f07565b3380612f61612321565b6001600160a01b031614612fc95760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610309565b6123e181612e9a565b6000811561306357604051634cddf61560e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cddf61590602401602060405180830381865afa15801561303f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111879190614eb6565b506002919050565b919050565b61307861370d565b600061308383613282565b905061126f816132a7565b60008180600001516130fd5760405162461bcd60e51b815260206004820152603260248201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260448201527137b69032b93937b932b2103932b9bab63a1760711b6064820152608401610309565b61126f83602001516132db565b613112612680565b6001600160a01b038116612fc957604051631e4fbdf760e01b815260006004820152602401610309565b60008083513461314c9190614ed1565b905060005b8451811015612dbc57306001600160a01b031663abc86c6e8387848151811061317c5761317c61421d565b6020026020010151876040518463ffffffff1660e01b81526004016131a2929190614ef3565b60206040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e59190614871565b6131ef908461438c565b9250600101613151565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60005b602081101561306b578181602081106132675761326761421d565b1a60f81b6001600160f81b0319161561306b5760010161324c565b61328a613725565b604080518082019091528281526000602082015261126f8161333e565b6132af61370d565b5060a0810151604080518082019091526001600160401b03909116602714158152602081019190915290565b60008160008060ff16826040015160ff161461331b57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610309565b61332d8460000151856060015161345e565b6001600160401b0316949350505050565b613346613725565b815151829060000361336b576040516309036d4760e21b815260040160405180910390fd5b600060ff816001600160401b038160015b80156133ee5761338b8961351f565b95508161339781614f27565b6007600589901c169650601f8816955092505060051985016133e65760208901516133c28a8661345e565b9350808a602001516133d49190614775565b6133de908461438c565b92505061337c565b50600061337c565b600760ff861611156134185760405163bd2ac87960e01b815260ff86166004820152602401610309565b506040805160c08101825298895260ff95861660208a015293851693880193909352921660608601526001600160401b0390811660808601521660a08401525090919050565b600060188260ff161015613476575060ff8116611187565b8160ff166018036134945761348a8361351f565b60ff169050611187565b8160ff166019036134b3576134a883613581565b61ffff169050611187565b8160ff16601a036134d4576134c7836135ed565b63ffffffff169050611187565b8160ff16601b036134e85761278c8361364c565b8160ff16601f0361350157506001600160401b03611187565b604051636d785b1360e01b815260ff83166004820152602401610309565b6000816020015182600001515180821115613557576040516363a056dd60e01b81526004810183905260248101829052604401610309565b835160208501805180830160010151955090819061357482614f27565b8152505050505050919050565b600081602001516002613594919061438c565b825151808211156135c2576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516002818401810151965090916135e0828461438c565b9052509395945050505050565b600081602001516004613600919061438c565b8251518082111561362e576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516004818401810151965090916135e0828461438c565b60008160200151600861365f919061438c565b8251518082111561368d576040516363a056dd60e01b81526004810183905260248101829052604401610309565b83516020850180516008818401810151965090916135e0828461438c565b5080546136b790614233565b6000825580601f106136c7575050565b601f0160209004906000526020600020908101906123e1919061376c565b604080516080810182526000808252602082018190529181018290529060608201905b905290565b60405180604001604052806000151581526020016137085b604080516101008101909152606060c08201908152600060e08301528190815260006020820181905260408201819052606082018190526080820181905260a09091015290565b5b80821115613781576000815560010161376d565b5090565b6001600160c01b03198135818116916008851015612dbc5760089490940360031b84901b1690921692915050565b60005b838110156137ce5781810151838201526020016137b6565b50506000910152565b600081518084526137ef8160208601602086016137b3565b601f01601f19169290920160200192915050565b60008282518085526020808601955060208260051b8401016020860160005b8481101561385057601f1986840301895261383e8383516137d7565b98840198925090830190600101613822565b5090979650505050505050565b606080825284519082018190526000906020906080840190828801845b828110156138a05781516001600160e01b0319168452928401929084019060010161387a565b505050838103828501526138b48187613803565b8481036040860152855180825283870192509083019060005b818110156138e9578351835292840192918401916001016138cd565b509098975050505050505050565b60008083601f84011261390957600080fd5b5081356001600160401b0381111561392057600080fd5b60208301915083602082850101111561393857600080fd5b9250929050565b6001600160a01b03811681146123e157600080fd5b60008083601f84011261396657600080fd5b5081356001600160401b0381111561397d57600080fd5b6020830191508360208260051b850101111561393857600080fd5b6000806000806000606086880312156139b057600080fd5b85356001600160401b03808211156139c757600080fd5b6139d389838a016138f7565b9097509550602088013591506139e88261393f565b909350604087013590808211156139fe57600080fd5b50613a0b88828901613954565b969995985093965092949392505050565b80356001600160e01b03198116811461306b57600080fd5b600060208284031215613a4657600080fd5b61126f82613a1c565b6001600160a01b0383168152604060208201819052600090613a7390830184613803565b949350505050565b60208152600061126f60208301846137d7565b6020815281516020820152602082015160408201526040820151606082015260006060830151608080840152613a7360a08401826137d7565b634e487b7160e01b600052602160045260246000fd5b602081526000825160ff8110613af557613af5613ac7565b806020840152506020830151604080840152613a7360608401826137d7565b60148110613b2457613b24613ac7565b9052565b602081016111878284613b14565b815160ff1681526020808301516001600160401b03169082015260408101611187565b600080600060408486031215613b6e57600080fd5b83356001600160401b03811115613b8457600080fd5b613b90868287016138f7565b909790965060209590950135949350505050565b60008060208385031215613bb757600080fd5b82356001600160401b03811115613bcd57600080fd5b613bd9858286016138f7565b90969095509350505050565b8281526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b60008060008060408587031215613c2557600080fd5b84356001600160401b0380821115613c3c57600080fd5b613c48888389016138f7565b90965094506020870135915080821115613c6157600080fd5b50613c6e878288016138f7565b95989497509550505050565b60068110613b2457613b24613ac7565b602081016111878284613c7a565b6000808284036060811215613cac57600080fd5b613cb584613a1c565b92506040601f1982011215613cc957600080fd5b506020830190509250929050565b600080600060408486031215613cec57600080fd5b83356001600160401b03811115613d0257600080fd5b613d0e868287016138f7565b9094509250506020840135613d228161393f565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604081018181106001600160401b0382111715613d6257613d62613d2d565b60405250565b608081018181106001600160401b0382111715613d6257613d62613d2d565b60c081018181106001600160401b0382111715613d6257613d62613d2d565b601f8201601f191681016001600160401b0381118282101715613dcb57613dcb613d2d565b6040525050565b60405160e081016001600160401b0381118282101715613df457613df4613d2d565b60405290565b60006001600160401b03821115613e1357613e13613d2d565b50601f01601f191660200190565b600060208284031215613e3357600080fd5b81356001600160401b03811115613e4957600080fd5b8201601f81018413613e5a57600080fd5b8035613e6581613dfa565b604051613e728282613da6565b828152866020848601011115613e8757600080fd5b8260208501602083013760009281016020019290925250949350505050565b600060208284031215613eb857600080fd5b5035919050565b60058110613b2457613b24613ac7565b600082825180855260208086019550808260051b8401018186016000805b85811015613f4757868403601f19018a5282518460408101845b6002811015613f32578782038352613f208285516137d7565b93890193928901929150600101613f07565b509b87019b9550505091840191600101613eed565b509198975050505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156138e957603f19898403018552815160e060ff825116855288820151613faa8a870182613ebf565b5087820151613fbb89870182613b14565b506060808301518282880152613fd3838801826137d7565b9250505060808083015186830382880152613fee83826137d7565b9250505060a080830151868303828801526140098382613ecf565b9250505060c0808301519250858203818701525061402781836137d7565b968901969450505090860190600101613f7e565b8051825260208101516020830152604081015160408301526060810151611cca6060840182613c7a565b60808101611187828461403b565b6020815281511515602082015260006020830151604080840152805160c06060850152805160406101208601526140ae6101608601826137d7565b6020928301516101408701529183015160ff166080860152506040820151906140dc60a086018360ff169052565b606083015160ff1660c086015260808301516001600160401b0380821660e088015260a0909401519384166101008701529150612677565b60006020828403121561412657600080fd5b813561126f8161393f565b6000806020838503121561414457600080fd5b82356001600160401b0381111561415a57600080fd5b613bd985828601613954565b6020808252825182820181905260009190848201906040850190845b818110156141a85761419583855161403b565b9284019260809290920191600101614182565b50909695505050505050565b60ff811681146123e157600080fd5b6001600160401b03811681146123e157600080fd5b6000604082840312156141ea57600080fd5b6040516141f681613d43565b8235614201816141b4565b81526020830135614211816141c3565b60208201529392505050565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168061424757607f821691505b60208210810361211b57634e487b7160e01b600052602260045260246000fd5b601f821115611cca576000816000526020600020601f850160051c810160208610156142905750805b601f850160051c820191505b818110156142af5782815560010161429c565b505050505050565b6001600160401b038311156142ce576142ce613d2d565b6142e2836142dc8354614233565b83614267565b6000601f84116001811461431657600085156142fe5750838201355b600019600387901b1c1916600186901b1783556125ec565b600083815260209020601f19861690835b828110156143475786850135825560209485019460019092019101614327565b50868210156143645760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561118757611187614376565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000838385526020808601955060208560051b8301018460005b8781101561385057848303601f19018952813536889003601e1901811261440857600080fd5b870184810190356001600160401b0381111561442357600080fd5b80360382131561443257600080fd5b61443d85828461439f565b9a86019a94505050908301906001016143e2565b63ffffffff60e01b841681526040602082015260006126776040830184866143c8565b600082516144868184602087016137b3565b9190910192915050565b600082601f8301126144a157600080fd5b81516144ac81613dfa565b6040516144b98282613da6565b8281528560208487010111156144ce57600080fd5b6126778360208301602088016137b3565b6000602082840312156144f157600080fd5b81516001600160401b0381111561450757600080fd5b613a7384828501614490565b7f5769746e657450726963654665656455706772616461626c653a20736f6c7665815274039103b30b634b230ba34b7b7103330b4b632b21d1605d1b6020820152600082516145698160358501602087016137b3565b9190910160350192915050565b7f5769746e6574507269636546656564733a20736d6f6b652d746573742066616981526403632b21d160dd1b6020820152600082516145bc8160258501602087016137b3565b9190910160250192915050565b6040815260006145dd60408301858761439f565b905060018060a01b0383166020830152949350505050565b60006020828403121561460757600080fd5b81516001600160401b038082111561461e57600080fd5b908301906080828603121561463257600080fd5b60405161463e81613d68565b82518152602083015160208201526040830151604082015260608301518281111561466857600080fd5b61467487828601614490565b60608301525095945050505050565b60006020828403121561469557600080fd5b81516001600160401b03808211156146ac57600080fd5b90830190604082860312156146c057600080fd5b6040516146cc81613d43565b825160ff81106146db57600080fd5b81526020830151828111156146ef57600080fd5b6146fb87828601614490565b60208301525095945050505050565b60006020828403121561471c57600080fd5b815161126f8161393f565b80516014811061306b57600080fd5b60006020828403121561474857600080fd5b61126f82614727565b60408152600061476560408301858761439f565b9050826020830152949350505050565b8181038181111561118757611187614376565b602081526000613a7360208301848661439f565b805161306b816141b4565b805161306b816141c3565b60008082840360608112156147c657600080fd5b835192506040601f19820112156147dc57600080fd5b506040516147e981613d43565b60208401516147f7816141b4565b81526040840151614807816141c3565b6020820152919491935090915050565b60408152600061482b60408301868861439f565b828103602084015261483e81858761439f565b979650505050505050565b60018060a01b03851681528360208201526060604082015260006120cb60608301848661439f565b60006020828403121561488357600080fd5b5051919050565b60006001600160401b038211156148a3576148a3613d2d565b5060051b60200190565b600060208083850312156148c057600080fd5b82516001600160401b038111156148d657600080fd5b8301601f810185136148e757600080fd5b80516148f28161488a565b6040516148ff8282613da6565b82815260059290921b830184019184810191508783111561491f57600080fd5b928401925b8284101561483e57835182529284019290840190614924565b80516005811061306b57600080fd5b600082601f83011261495d57600080fd5b8151602061496a8261488a565b6040516149778282613da6565b83815260059390931b850182019282810191508684111561499757600080fd5b8286015b84811015614a395780516001600160401b03808211156149bb5760008081fd5b818901915089603f8301126149d05760008081fd5b6040516149dc81613d43565b80606084018c8111156149ef5760008081fd5b8885015b81811015614a2757805185811115614a0b5760008081fd5b614a198f8c838a0101614490565b8452509189019189016149f3565b5050508552505091830191830161499b565b509695505050505050565b600060208284031215614a5657600080fd5b81516001600160401b0380821115614a6d57600080fd5b9083019060e08286031215614a8157600080fd5b614a89613dd2565b614a928361479c565b8152614aa06020840161493d565b6020820152614ab160408401614727565b6040820152606083015182811115614ac857600080fd5b614ad487828601614490565b606083015250608083015182811115614aec57600080fd5b614af887828601614490565b60808301525060a083015182811115614b1057600080fd5b614b1c8782860161494c565b60a08301525060c083015182811115614b3457600080fd5b614b4087828601614490565b60c08301525095945050505050565b7102bb4ba3732ba283934b1b2a332b2b2399d160751b815260008251614b7c8160128501602087016137b3565b9190910160120192915050565b80516006811061306b57600080fd5b600060808284031215614baa57600080fd5b604051614bb681613d68565b825181526020830151602082015260408301516040820152614bda60608401614b89565b60608201529392505050565b60006020808385031215614bf957600080fd5b82516001600160401b0380821115614c1057600080fd5b81850191506040808388031215614c2657600080fd5b8051614c3181613d43565b83518015158114614c4157600080fd5b81528385015183811115614c5457600080fd5b939093019260c08489031215614c6957600080fd5b8151614c7481613d87565b845184811115614c8357600080fd5b8501808a03841315614c9457600080fd5b8351614c9f81613d43565b815186811115614cae57600080fd5b614cba8c828501614490565b82525090870151878201528152614cd285870161479c565b86820152614ce183860161479c565b83820152614cf16060860161479c565b6060820152614d02608086016147a7565b6080820152614d1360a086016147a7565b60a082015294810194909452509195945050505050565b6020808252818101839052600090600560408085019086831b86010187855b888110156138e957878303603f190184528135368b9003601e19018112614d6f57600080fd5b8a0186810190356001600160401b03811115614d8a57600080fd5b80871b3603821315614d9b57600080fd5b614da68582846143c8565b958801959450505090850190600101614d49565b83815260406020820152600061267760408301848661439f565b600060208284031215614de657600080fd5b815161126f816141b4565b600060033d1115614e0a5760046000803e5060005160e01c5b90565b600060443d1015614e1b5790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715614e4a57505050505090565b8285019150815181811115614e625750505050505090565b843d8701016020828501011115614e7c5750505050505090565b614e8b60208286010187613da6565b509095945050505050565b818103600083128015838313168383128216171561254e5761254e614376565b600060208284031215614ec857600080fd5b61126f82614b89565b600082614eee57634e487b7160e01b600052601260045260246000fd5b500490565b6001600160e01b0319831681526060810161126f6020830184805160ff1682526020908101516001600160401b0316910152565b600060018201614f3957614f39614376565b506001019056fee36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d1ffe36ea87c48340f2c23c9e1c9f72f5c5165184e75683a4d2a19148e5964c1d200a264697066735822122092953fe9bee6aaf493fbaa38c1838b59729f5a6240a6cfbebcbe41ab27174ec064736f6c63430008160033" -} \ No newline at end of file diff --git a/artifacts/WitnetRandomness.json b/artifacts/WitnetRandomness.json deleted file mode 100644 index bd34d767a..000000000 --- a/artifacts/WitnetRandomness.json +++ /dev/null @@ -1,790 +0,0 @@ -{ - "contractName": "WitnetRandomness", - "sourceName": "contracts/apps/WitnetRandomness.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - }, - { - "internalType": "contract WitnetRequestBoard", - "name": "_wrb", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "range", - "type": "uint256" - } - ], - "name": "IndexOutOfBounds", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidInitialization", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "length", - "type": "uint256" - } - ], - "name": "InvalidLengthEncoding", - "type": "error" - }, - { - "inputs": [], - "name": "NotInitializing", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "OwnableInvalidOwner", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "OwnableUnauthorizedAccount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "read", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expected", - "type": "uint256" - } - ], - "name": "UnexpectedMajorType", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "by", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "self", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "clone", - "type": "address" - } - ], - "name": "Cloned", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "version", - "type": "uint64" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "prevBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "witnetQueryId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "witnetRequestHash", - "type": "bytes32" - } - ], - "name": "Randomized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "witReward", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmReward", - "type": "uint256" - } - ], - "name": "WitnetQuery", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - } - ], - "name": "WitnetQueryReported", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmReward", - "type": "uint256" - } - ], - "name": "WitnetQueryRewardUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmCallbackGas", - "type": "uint256" - } - ], - "name": "WitnetResponseDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "resultCborBytes", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmCallbackGas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "evmCallbackRevertReason", - "type": "string" - } - ], - "name": "WitnetResponseDeliveryFailed", - "type": "event" - }, - { - "inputs": [], - "name": "cloned", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "latestRandomizeBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "self", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnetRandomnessRequest", - "outputs": [ - { - "internalType": "contract WitnetRequest", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "clone", - "outputs": [ - { - "internalType": "contract WitnetRandomness", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_salt", - "type": "bytes32" - } - ], - "name": "cloneDeterministic", - "outputs": [ - { - "internalType": "contract WitnetRandomness", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "_initData", - "type": "bytes" - } - ], - "name": "initializeClone", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "sla", - "type": "tuple" - } - ], - "name": "settleWitnetRandomnessSLA", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_gasPrice", - "type": "uint256" - } - ], - "name": "estimateRandomizeFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomizeData", - "outputs": [ - { - "internalType": "uint256", - "name": "_id", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_prevBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nextBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessAfter", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessNextBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "getRandomnessPrevBlock", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "isRandomized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_range", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "random", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint32", - "name": "_range", - "type": "uint32" - }, - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "_seed", - "type": "bytes32" - } - ], - "name": "random", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "randomize", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_block", - "type": "uint256" - } - ], - "name": "upgradeRandomizeFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnetRandomnessSLA", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "initialized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x61012060405230608052633702412560e11b60c0523480156200002157600080fd5b50604051620031c9380380620031c98339810160408190526200004491620007ff565b80826001600160a01b0381166200007657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b620000818162000719565b50636461cc6360e01b6001600160e01b031916816001600160a01b031663adb7c3f76040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f991906200083e565b6001600160e01b03191614620001665760405162461bcd60e51b815260206004820152602b60248201527f5573696e675769746e65743a20756e636f6d706c69616e74205769746e65745260448201526a195c5d595cdd109bd85c9960aa1b60648201526084016200006d565b6001600160a01b0390811660a052604080518082018252600a808252633b9aca00602092830152633b9aca00600560f91b016002556003805461ffff19169091179055815163adb7c3f760e01b81529151636461cc6360e01b9385169263adb7c3f79260048083019391928290030181865afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021191906200083e565b6001600160e01b031916146200022b576200022b62000871565b60006200023762000737565b6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000887565b90506000620002a962000737565b6001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030d919062000887565b60408051600180825281830190925291925060009190602080830190803683375050604080516000808252602082019092529293506001600160a01b03851692639eb3ab1f92506002916200037b565b62000367620007c1565b8152602001906001900390816200035d5790505b506040518363ffffffff1660e01b81526004016200039b9291906200091b565b6020604051808303816000875af1158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000a07565b81600081518110620003f757620003f762000a21565b60200260200101818152505060606000836001600160a01b0316637f412e2360405180604001604052806002600b811115620004375762000437620008bd565b8152602001858152506040518263ffffffff1660e01b81526004016200045e919062000a37565b6020604051808303816000875af11580156200047e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a4919062000a07565b90506000846001600160a01b0316637f412e236040518060400160405280600b80811115620004d757620004d7620008bd565b8152602001868152506040518263ffffffff1660e01b8152600401620004fe919062000a37565b6020604051808303816000875af11580156200051e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000544919062000a07565b90506000866001600160a01b031663db7c58b086858560206040518563ffffffff1660e01b81526004016200057d949392919062000ae8565b6020604051808303816000875af11580156200059d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c3919062000887565b9050806001600160a01b0316637d18db5186516001600160401b03811115620005f057620005f0620008a7565b6040519080825280602002602001820160405280156200062557816020015b60608152602001906001900390816200060f5790505b506040518263ffffffff1660e01b815260040162000644919062000b47565b6020604051808303816000875af115801562000664573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200068a919062000887565b6001600160a01b031660e081905260408051630f77c82960e11b81529051631eef9052916004808201926020929091908290030181865afa158015620006d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fa919062000a07565b61010052506200070f93505062000748915050565b5050505062000bf3565b600180546001600160a01b0319169055620007348162000771565b50565b60006200074360a05190565b905090565b60408051808201909152600a8152633b9aca00602090910152633b9aca00600560f91b01600555565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405180604001604052806002905b6060815260200190600190039081620007d05790505090565b6001600160a01b03811681146200073457600080fd5b600080604083850312156200081357600080fd5b82516200082081620007e9565b60208401519092506200083381620007e9565b809150509250929050565b6000602082840312156200085157600080fd5b81516001600160e01b0319811681146200086a57600080fd5b9392505050565b634e487b7160e01b600052600160045260246000fd5b6000602082840312156200089a57600080fd5b81516200086a81620007e9565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845260005b81811015620008fb57602081850181015186830182015201620008dd565b506000602082860101526020601f19601f83011685010191505092915050565b600060058410620009305762000930620008bd565b838252602060a08184015260008060a0850152604060c06040860152600060c086015260e0850160e0606087015280875180835261010092508288019150828160051b890101925085890160005b82811015620009dd5789850360ff19018452815185878101895b6002811015620009c7578882038352620009b4828551620008d3565b938c0193928c0192915060010162000998565b509650505092870192908701906001016200097e565b50505050858103608087015260018152600160ff1b60208201526040810198975050505050505050565b60006020828403121562000a1a57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b60006020808352606083018451600c811062000a575762000a57620008bd565b828501528482015160408086018190528151928390526080600584901b8701810193928501929087019060005b8181101562000ada57888603607f1901835284518051600a811062000aad5762000aad620008bd565b875287015187870185905262000ac685880182620008d3565b965050938601939186019160010162000a84565b509398975050505050505050565b6080808252855190820181905260009060209060a0840190828901845b8281101562000b235781518452928401929084019060010162000b05565b50505060208401969096525050604081019290925261ffff16606090910152919050565b600060208083018184528085518083526040860191506005925060408160051b8701018488016000805b8481101562000be457898403603f19018652825180518086529089019089860190808a1b87018b01855b8281101562000bcd57601f1989830301845262000bba828651620008d3565b948d0194938d0193915060010162000b9b565b50988b019896505050928801925060010162000b71565b50919998505050505050505050565b60805160a05160c05160e0516101005161253662000c93600039600081816109150152610a3601526000818161026d0152610653015260006104830152600081816102be015281816108e501528181610aaa01528181610b8b01528181610ca901528181610ecf0152610f7701526000818161031b015281816103cc0152818161081001528181611155015281816113d001526116cd01526125366000f3fe60806040526004361061019c5760003560e01c80639938fd0c116100ec578063daaa360c1161008a578063e7d4a01611610064578063e7d4a01614610565578063ec3757ba14610585578063f2fde38b146105a5578063fb476cad146105c557600080fd5b8063daaa360c1461051d578063e30c39781461053d578063e35329f81461055257600080fd5b8063a3252f68116100c6578063a3252f68146103fc578063a60ee26814610451578063adb7c3f714610471578063d08fccc7146104be57600080fd5b80639938fd0c146103875780639bc86fec1461039d578063a04daef0146103bd57600080fd5b806346d1d21a116101595780637104ddb2116101335780637104ddb21461030c578063715018a61461033f57806379ba5097146103545780638da5cb5b1461036957600080fd5b806346d1d21a146102af57806355a7b9c9146102e2578063699b328a1461030457600080fd5b806309ed4607146101a1578063158ef93e146101d357806324cbbfc1146101f857806336b651bb1461022d5780633b13e76e1461025b57806340b41daa1461028f575b600080fd5b3480156101ad57600080fd5b506101b66105e5565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101df57600080fd5b506101e8610651565b60405190151581526020016101ca565b34801561020457600080fd5b50610218610213366004611df8565b610680565b60405163ffffffff90911681526020016101ca565b34801561023957600080fd5b5061024d610248366004611e2b565b6106d0565b6040519081526020016101ca565b34801561026757600080fd5b506101b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561029b57600080fd5b5061024d6102aa366004611e2b565b610710565b3480156102bb57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b3480156102ee57600080fd5b506103026102fd366004611efb565b61074f565b005b61024d6108d5565b34801561031857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b34801561034b57600080fd5b50610302610a7d565b34801561036057600080fd5b50610302610a91565b34801561037557600080fd5b506000546001600160a01b03166101b6565b34801561039357600080fd5b5061024d60045481565b3480156103a957600080fd5b506101e86103b8366004611e2b565b610a99565b3480156103c957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156101e8565b34801561040857600080fd5b50610436610417366004611e2b565b6000908152600660205260409020600281015481546001909201549092565b604080519384526020840192909252908201526060016101ca565b34801561045d57600080fd5b5061024d61046c366004611e2b565b610b6b565b34801561047d57600080fd5b506104a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016101ca565b3480156104ca57600080fd5b506040805180820182526000808252602091820181905260055483518085018552828152830191909152825180840190935260f881901c83526001600160401b0316908201526040516101ca9190611f7a565b34801561052957600080fd5b506101b6610538366004611e2b565b610bfe565b34801561054957600080fd5b506101b6610c61565b61024d610560366004611e2b565b610c75565b34801561057157600080fd5b50610218610580366004611df8565b610d1d565b34801561059157600080fd5b5061024d6105a0366004611f9d565b610d9e565b3480156105b157600080fd5b506103026105c0366004611faf565b610e14565b3480156105d157600080fd5b5061024d6105e0366004611e2b565b610e28565b60006105ef610651565b61063c5760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b60448201526064015b60405180910390fd5b61064c6106476110de565b6111b7565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316151590565b60006106c684843361069186610e28565b604080516001600160a01b03909316602084015282015260600160405160208183030381529060405280519060200120610d1d565b90505b9392505050565b60008082116106e1576106e1611fd8565b60045480831161070a57600081815260066020526040902054610705908490611221565b6106c9565b92915050565b6000818152600660205260408120600201548103610739576107348260045461124a565b61070a565b5060009081526006602052604090206001015490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107945750825b90506000826001600160401b031660011480156107b05750303b155b9050811580156107be575080155b156107dc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561080657845460ff60401b1916600160401b1785555b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087e5760405162461bcd60e51b815260206004820152601d60248201527f436c6f6e61626c653a206e6f7420612064656c65676174652063616c6c0000006044820152606401610633565b61088786611286565b83156108cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000436004541015610a745760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633dc2b7a2347f00000000000000000000000000000000000000000000000000000000000000006109736005546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b6040518463ffffffff1660e01b8152600401610990929190611fee565b60206040518083038185885af11580156109ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109d39190612018565b4360008181526006602052604080822060028101859055600480548083558085529383902060010185905593909355519293509091819033907faf291bb4e1767569c77502edb6ad1009e856f57c09f214886c6becc9836c20c090610a649087907f000000000000000000000000000000000000000000000000000000000000000090918252602082015260400190565b60405180910390a3505050503490565b61064c43610c75565b610a85611297565b610a8f60006112c4565b565b610a8f6112dd565b6000818152600660205260408120817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636f07abcc83600201546040518263ffffffff1660e01b8152600401610afa91815260200190565b602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612031565b90508160020154600014158015610b6357506004816004811115610b6157610b61612052565b145b949350505050565b604051630f7b104360e31b815260048101829052602360248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612018565b6000610c08610651565b610c505760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b6044820152606401610633565b61070a61064783611358565b919050565b600061064c6001546001600160a01b031690565b6000818152600660205260408120600281015415610d15576002810154604051636064d6fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636064d6fd913491610ce29160040190815260200190565b6000604051808303818588803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b50505050505b503492915050565b600080610d2985611434565b610d349060ff61207e565b905060006001610d4583600261217b565b610d4f919061218a565b604080516020810187905290810187905260600160408051601f19818403018152919052805160209091012016905060ff8216610d9263ffffffff88168361219d565b901c9695505050505050565b6000610da8611297565b610db1826115c3565b610dfd5760405162461bcd60e51b815260206004820152601d60248201527f5769746e657452616e646f6d6e6573733a20696e76616c696420534c410000006044820152606401610633565b61070a610e0f368490038401846121d8565b61161c565b610e1c611297565b610e2581611647565b50565b6000818152600660205260408120600201548103610e4c57610e4982610710565b91505b60008281526006602052604081206002015490819003610eae5760405162461bcd60e51b815260206004820181905260248201527f5769746e657452616e646f6d6e6573733a206e6f742072616e646f6d697a65646044820152606401610633565b604051634cddf61560e01b8152600481018290526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634cddf61590602401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190612219565b90506002816005811115610f5057610f50612052565b03610feb576040516359209b3960e01b815260048101839052610b63906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906359209b3990602401600060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe69190810190612274565b611679565b6003816005811115610fff57610fff612052565b0361108357600084815260066020526040812060010154908190036110715760405162461bcd60e51b815260206004820152602260248201527f5769746e657452616e646f6d6e6573733a206661756c74792072616e646f6d696044820152617a6560f01b6064820152608401610633565b61107a81610e28565b95945050505050565b60405162461bcd60e51b815260206004820152602360248201527f5769746e657452616e646f6d6e6573733a2070656e64696e672072616e646f6d604482015262697a6560e81b6064820152608401610633565b5050919050565b6000806110e96116ae565b90506037816000f091506001600160a01b0382166111495760405162461bcd60e51b815260206004820152601760248201527f436c6f6e61626c653a20435245415445206661696c65640000000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a45090565b6040516355a7b9c960e01b815260206004820152600060248201819052906001600160a01b038316906355a7b9c990604401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5093949350505050565b600081831161124457600082815260066020526040902054610705908490611221565b50919050565b60008183101561126e5760008281526006602052604090205461070590849061124a565b50600090815260066020526040902060010154919050565b61128f336112c4565b610e2561170f565b6000546001600160a01b03163314610a8f5760405163118cdaa760e01b8152336004820152602401610633565b600180546001600160a01b0319169055610e2581611730565b33806112e7610c61565b6001600160a01b03161461134f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610633565b610e25816112c4565b6000806113636116ae565b9050826037826000f591506001600160a01b0382166113c45760405162461bcd60e51b815260206004820152601860248201527f436c6f6e61626c653a2043524541544532206661696c656400000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a450919050565b60408051610400810182526000808252600960208301526001928201839052600a6060830152600d6080830152601560a0830152600260c08301819052601d60e0840152600b610100840152600e610120840152601061014084018190526012610160850152601661018085015260196101a085015260036101c0850152601e6101e085015260086102008501819052600c6102208601526014610240860152601c610260860152600f61028086015260116102a086015260186102c086015260076102e08601526013610300860152601b610320860181905260176103408701526006610360870152601a61038087015260056103a087015260046103c08701819052601f6103e08801529688901c637fffffff1680891763ffffffff998a1690911790941c939093179586901c630fffffff1680871796881617901c949094179384901c61ffff168085179592948493611599926307c4acdd929091161761219d565b63ffffffff16901c63ffffffff16602081106115b7576115b76123e7565b60200201519392505050565b6000806115d660408401602085016123fd565b6001600160401b03161180156115fb575060006115f6602084018461241a565b60ff16115b801561070a5750607f611611602084018461241a565b60ff16111592915050565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600581905590565b61164f611297565b6001600160a01b03811661134f57604051631e4fbdf760e01b815260006004820152602401610633565b600081806000015161169d5760405162461bcd60e51b815260040161063390612437565b6106c96116a984611780565b6117b1565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81527f000000000000000000000000000000000000000000000000000000000000000060601b60148201526e5af43d82803e903d91602b57fd5bf360881b602882015290565b60408051808201909152600a8152633b9aca006020820152610e259061161c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608180600001516117a45760405162461bcd60e51b815260040161063390612437565b6106c983602001516117be565b600061070a826020611908565b60608160028060ff16826040015160ff16146117fe57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610633565b61181084600001518560600151611980565b6001600160401b03166080850181905263fffffffe19016118e757600061183f85600001518660400151611a48565b905063ffffffff80821610156118e15784516118649063ffffffff80841690611af516565b6040516020016118749190612489565b604051602081830303815290604052935061189785600001518660400151611a48565b905063ffffffff80821610156118e157845184906118be9063ffffffff80851690611af516565b6040516020016118cf9291906124a5565b60405160208183030381529060405293505b506110d7565b608084015184516119019163ffffffff90811690611af516565b92506110d7565b600060208260ff16111561191e5761191e611fd8565b60008260ff16845111611932578351611937565b8260ff165b905060005b81811015611978578060080285828151811061195a5761195a6123e7565b01602001516001600160f81b031916901c929092179160010161193c565b505092915050565b600060188260ff161015611998575060ff811661070a565b8160ff166018036119b6576119ac83611bb5565b60ff16905061070a565b8160ff166019036119d5576119ca83611c17565b61ffff16905061070a565b8160ff16601a036119f6576119e983611c83565b63ffffffff16905061070a565b8160ff16601b03611a1157611a0a83611ce2565b905061070a565b8160ff16601f03611a2a57506001600160401b0361070a565b604051636d785b1360e01b815260ff83166004820152602401610633565b600080611a5484611bb5565b90508060ff1660ff03611a71576001600160401b0391505061070a565b611a7e8482601f16611980565b91506001600160401b0380831610611ab457604051636d785b1360e01b81526001600160401b0383166004820152602401610633565b60ff83166007600583901c1614611aee5760405161800560e51b81526007600583901c16600482015260ff84166024820152604401610633565b5092915050565b6060818360200151611b0791906124d4565b83515180821115611b35576040516363a056dd60e01b81526004810183905260248101829052604401610633565b836001600160401b03811115611b4d57611b4d611e44565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5092508315611978578451602080870151908183018101908601611b9c81838a611d41565b611ba889896001611d88565b5050505050505092915050565b6000816020015182600001515180821115611bed576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051808301600101519550908190611c0a826124e7565b8152505050505050919050565b600081602001516002611c2a91906124d4565b82515180821115611c58576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600281840181015196509091611c7682846124d4565b9052509395945050505050565b600081602001516004611c9691906124d4565b82515180821115611cc4576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600481840181015196509091611c7682846124d4565b600081602001516008611cf591906124d4565b82515180821115611d23576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600881840181015196509091611c7682846124d4565b5b60208110611d61578151835260209283019290910190601f1901611d42565b8015611d83578151835160208390036101000a60001901801990921691161783525b505050565b60008284600001515180821115611dbc576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8315611dd4576020860151611dd190866124d4565b94505b5050505060209190910181905290565b803563ffffffff81168114610c5c57600080fd5b600080600060608486031215611e0d57600080fd5b611e1684611de4565b95602085013595506040909401359392505050565b600060208284031215611e3d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611e7c57611e7c611e44565b60405290565b60405160c081016001600160401b0381118282101715611e7c57611e7c611e44565b604051601f8201601f191681016001600160401b0381118282101715611ecc57611ecc611e44565b604052919050565b60006001600160401b03821115611eed57611eed611e44565b50601f01601f191660200190565b600060208284031215611f0d57600080fd5b81356001600160401b03811115611f2357600080fd5b8201601f81018413611f3457600080fd5b8035611f47611f4282611ed4565b611ea4565b818152856020838501011115611f5c57600080fd5b81602084016020830137600091810160200191909152949350505050565b815160ff1681526020808301516001600160401b0316908201526040810161070a565b60006040828403121561124457600080fd5b600060208284031215611fc157600080fd5b81356001600160a01b03811681146106c957600080fd5b634e487b7160e01b600052600160045260246000fd5b828152606081016106c96020830184805160ff1682526020908101516001600160401b0316910152565b60006020828403121561202a57600080fd5b5051919050565b60006020828403121561204357600080fd5b8151600581106106c957600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561070a5761070a612068565b600181815b808511156120d25781600019048211156120b8576120b8612068565b808516156120c557918102915b93841c939080029061209c565b509250929050565b6000826120e95750600161070a565b816120f65750600061070a565b816001811461210c576002811461211657612132565b600191505061070a565b60ff84111561212757612127612068565b50506001821b61070a565b5060208310610133831016604e8410600b8410161715612155575081810a61070a565b61215f8383612097565b806000190482111561217357612173612068565b029392505050565b60006106c960ff8416836120da565b8181038181111561070a5761070a612068565b808202811582820484141761070a5761070a612068565b60ff81168114610e2557600080fd5b6001600160401b0381168114610e2557600080fd5b6000604082840312156121ea57600080fd5b6121f2611e5a565b82356121fd816121b4565b8152602083013561220d816121c3565b60208201529392505050565b60006020828403121561222b57600080fd5b8151600681106106c957600080fd5b60005b8381101561225557818101518382015260200161223d565b50506000910152565b8051610c5c816121b4565b8051610c5c816121c3565b6000602080838503121561228757600080fd5b82516001600160401b038082111561229e57600080fd5b90840190604082870312156122b257600080fd5b6122ba611e5a565b825180151581146122ca57600080fd5b815282840151828111156122dd57600080fd5b929092019160c083880312156122f257600080fd5b6122fa611e82565b83518381111561230957600080fd5b84016040818a03121561231b57600080fd5b612323611e5a565b81518581111561233257600080fd5b82019450601f85018a1361234557600080fd5b8451612353611f4282611ed4565b8181528b8983890101111561236757600080fd5b612376828a83018b8a0161223a565b8252509086015186820152815261238e84860161225e565b8582015261239e6040850161225e565b60408201526123af6060850161225e565b60608201526123c060808501612269565b60808201526123d160a08501612269565b60a0820152938101939093525090949350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561240f57600080fd5b81356106c9816121c3565b60006020828403121561242c57600080fd5b81356106c9816121b4565b60208082526032908201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260408201527137b69032b93937b932b2103932b9bab63a1760711b606082015260800190565b6000825161249b81846020870161223a565b9190910192915050565b600083516124b781846020880161223a565b8351908301906124cb81836020880161223a565b01949350505050565b8082018082111561070a5761070a612068565b6000600182016124f9576124f9612068565b506001019056fea26469706673582212203fd060fcccd6987b1c348cdf6374dade9f3e1d81be8485902e4eaeabbf37cc6a64736f6c63430008160033", - "deployedBytecode": "0x60806040526004361061019c5760003560e01c80639938fd0c116100ec578063daaa360c1161008a578063e7d4a01611610064578063e7d4a01614610565578063ec3757ba14610585578063f2fde38b146105a5578063fb476cad146105c557600080fd5b8063daaa360c1461051d578063e30c39781461053d578063e35329f81461055257600080fd5b8063a3252f68116100c6578063a3252f68146103fc578063a60ee26814610451578063adb7c3f714610471578063d08fccc7146104be57600080fd5b80639938fd0c146103875780639bc86fec1461039d578063a04daef0146103bd57600080fd5b806346d1d21a116101595780637104ddb2116101335780637104ddb21461030c578063715018a61461033f57806379ba5097146103545780638da5cb5b1461036957600080fd5b806346d1d21a146102af57806355a7b9c9146102e2578063699b328a1461030457600080fd5b806309ed4607146101a1578063158ef93e146101d357806324cbbfc1146101f857806336b651bb1461022d5780633b13e76e1461025b57806340b41daa1461028f575b600080fd5b3480156101ad57600080fd5b506101b66105e5565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101df57600080fd5b506101e8610651565b60405190151581526020016101ca565b34801561020457600080fd5b50610218610213366004611df8565b610680565b60405163ffffffff90911681526020016101ca565b34801561023957600080fd5b5061024d610248366004611e2b565b6106d0565b6040519081526020016101ca565b34801561026757600080fd5b506101b67f000000000000000000000000000000000000000000000000000000000000000081565b34801561029b57600080fd5b5061024d6102aa366004611e2b565b610710565b3480156102bb57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b3480156102ee57600080fd5b506103026102fd366004611efb565b61074f565b005b61024d6108d5565b34801561031857600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006101b6565b34801561034b57600080fd5b50610302610a7d565b34801561036057600080fd5b50610302610a91565b34801561037557600080fd5b506000546001600160a01b03166101b6565b34801561039357600080fd5b5061024d60045481565b3480156103a957600080fd5b506101e86103b8366004611e2b565b610a99565b3480156103c957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163014156101e8565b34801561040857600080fd5b50610436610417366004611e2b565b6000908152600660205260409020600281015481546001909201549092565b604080519384526020840192909252908201526060016101ca565b34801561045d57600080fd5b5061024d61046c366004611e2b565b610b6b565b34801561047d57600080fd5b506104a57f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160e01b031990911681526020016101ca565b3480156104ca57600080fd5b506040805180820182526000808252602091820181905260055483518085018552828152830191909152825180840190935260f881901c83526001600160401b0316908201526040516101ca9190611f7a565b34801561052957600080fd5b506101b6610538366004611e2b565b610bfe565b34801561054957600080fd5b506101b6610c61565b61024d610560366004611e2b565b610c75565b34801561057157600080fd5b50610218610580366004611df8565b610d1d565b34801561059157600080fd5b5061024d6105a0366004611f9d565b610d9e565b3480156105b157600080fd5b506103026105c0366004611faf565b610e14565b3480156105d157600080fd5b5061024d6105e0366004611e2b565b610e28565b60006105ef610651565b61063c5760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b60448201526064015b60405180910390fd5b61064c6106476110de565b6111b7565b905090565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316151590565b60006106c684843361069186610e28565b604080516001600160a01b03909316602084015282015260600160405160208183030381529060405280519060200120610d1d565b90505b9392505050565b60008082116106e1576106e1611fd8565b60045480831161070a57600081815260066020526040902054610705908490611221565b6106c9565b92915050565b6000818152600660205260408120600201548103610739576107348260045461124a565b61070a565b5060009081526006602052604090206001015490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156107945750825b90506000826001600160401b031660011480156107b05750303b155b9050811580156107be575080155b156107dc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561080657845460ff60401b1916600160401b1785555b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361087e5760405162461bcd60e51b815260206004820152601d60248201527f436c6f6e61626c653a206e6f7420612064656c65676174652063616c6c0000006044820152606401610633565b61088786611286565b83156108cd57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6000436004541015610a745760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316633dc2b7a2347f00000000000000000000000000000000000000000000000000000000000000006109736005546040805180820190915260008082526020820152506040805180820190915260f882901c81526001600160401b03909116602082015290565b6040518463ffffffff1660e01b8152600401610990929190611fee565b60206040518083038185885af11580156109ae573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906109d39190612018565b4360008181526006602052604080822060028101859055600480548083558085529383902060010185905593909355519293509091819033907faf291bb4e1767569c77502edb6ad1009e856f57c09f214886c6becc9836c20c090610a649087907f000000000000000000000000000000000000000000000000000000000000000090918252602082015260400190565b60405180910390a3505050503490565b61064c43610c75565b610a85611297565b610a8f60006112c4565b565b610a8f6112dd565b6000818152600660205260408120817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636f07abcc83600201546040518263ffffffff1660e01b8152600401610afa91815260200190565b602060405180830381865afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190612031565b90508160020154600014158015610b6357506004816004811115610b6157610b61612052565b145b949350505050565b604051630f7b104360e31b815260048101829052602360248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637bd8821890604401602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070a9190612018565b6000610c08610651565b610c505760405162461bcd60e51b815260206004820152601960248201527810db1bdb98589b194e881b9bdd081a5b9a5d1a585b1a5e9959603a1b6044820152606401610633565b61070a61064783611358565b919050565b600061064c6001546001600160a01b031690565b6000818152600660205260408120600281015415610d15576002810154604051636064d6fd60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691636064d6fd913491610ce29160040190815260200190565b6000604051808303818588803b158015610cfb57600080fd5b505af1158015610d0f573d6000803e3d6000fd5b50505050505b503492915050565b600080610d2985611434565b610d349060ff61207e565b905060006001610d4583600261217b565b610d4f919061218a565b604080516020810187905290810187905260600160408051601f19818403018152919052805160209091012016905060ff8216610d9263ffffffff88168361219d565b901c9695505050505050565b6000610da8611297565b610db1826115c3565b610dfd5760405162461bcd60e51b815260206004820152601d60248201527f5769746e657452616e646f6d6e6573733a20696e76616c696420534c410000006044820152606401610633565b61070a610e0f368490038401846121d8565b61161c565b610e1c611297565b610e2581611647565b50565b6000818152600660205260408120600201548103610e4c57610e4982610710565b91505b60008281526006602052604081206002015490819003610eae5760405162461bcd60e51b815260206004820181905260248201527f5769746e657452616e646f6d6e6573733a206e6f742072616e646f6d697a65646044820152606401610633565b604051634cddf61560e01b8152600481018290526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690634cddf61590602401602060405180830381865afa158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3a9190612219565b90506002816005811115610f5057610f50612052565b03610feb576040516359209b3960e01b815260048101839052610b63906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906359209b3990602401600060405180830381865afa158015610fbe573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fe69190810190612274565b611679565b6003816005811115610fff57610fff612052565b0361108357600084815260066020526040812060010154908190036110715760405162461bcd60e51b815260206004820152602260248201527f5769746e657452616e646f6d6e6573733a206661756c74792072616e646f6d696044820152617a6560f01b6064820152608401610633565b61107a81610e28565b95945050505050565b60405162461bcd60e51b815260206004820152602360248201527f5769746e657452616e646f6d6e6573733a2070656e64696e672072616e646f6d604482015262697a6560e81b6064820152608401610633565b5050919050565b6000806110e96116ae565b90506037816000f091506001600160a01b0382166111495760405162461bcd60e51b815260206004820152601760248201527f436c6f6e61626c653a20435245415445206661696c65640000000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a45090565b6040516355a7b9c960e01b815260206004820152600060248201819052906001600160a01b038316906355a7b9c990604401600060405180830381600087803b15801561120357600080fd5b505af1158015611217573d6000803e3d6000fd5b5093949350505050565b600081831161124457600082815260066020526040902054610705908490611221565b50919050565b60008183101561126e5760008281526006602052604090205461070590849061124a565b50600090815260066020526040902060010154919050565b61128f336112c4565b610e2561170f565b6000546001600160a01b03163314610a8f5760405163118cdaa760e01b8152336004820152602401610633565b600180546001600160a01b0319169055610e2581611730565b33806112e7610c61565b6001600160a01b03161461134f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610633565b610e25816112c4565b6000806113636116ae565b9050826037826000f591506001600160a01b0382166113c45760405162461bcd60e51b815260206004820152601860248201527f436c6f6e61626c653a2043524541544532206661696c656400000000000000006044820152606401610633565b6001600160a01b0382167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316336001600160a01b03167ff376596be5039d6b2fb36fead4c8a370eae426e790a869be8db074ab608cc24860405160405180910390a450919050565b60408051610400810182526000808252600960208301526001928201839052600a6060830152600d6080830152601560a0830152600260c08301819052601d60e0840152600b610100840152600e610120840152601061014084018190526012610160850152601661018085015260196101a085015260036101c0850152601e6101e085015260086102008501819052600c6102208601526014610240860152601c610260860152600f61028086015260116102a086015260186102c086015260076102e08601526013610300860152601b610320860181905260176103408701526006610360870152601a61038087015260056103a087015260046103c08701819052601f6103e08801529688901c637fffffff1680891763ffffffff998a1690911790941c939093179586901c630fffffff1680871796881617901c949094179384901c61ffff168085179592948493611599926307c4acdd929091161761219d565b63ffffffff16901c63ffffffff16602081106115b7576115b76123e7565b60200201519392505050565b6000806115d660408401602085016123fd565b6001600160401b03161180156115fb575060006115f6602084018461241a565b60ff16115b801561070a5750607f611611602084018461241a565b60ff16111592915050565b602081015190516001600160f81b031960f89190911b166001600160401b0390911617600581905590565b61164f611297565b6001600160a01b03811661134f57604051631e4fbdf760e01b815260006004820152602401610633565b600081806000015161169d5760405162461bcd60e51b815260040161063390612437565b6106c96116a984611780565b6117b1565b604051733d602d80600a3d3981f3363d3d373d3d3d363d7360601b81527f000000000000000000000000000000000000000000000000000000000000000060601b60148201526e5af43d82803e903d91602b57fd5bf360881b602882015290565b60408051808201909152600a8152633b9aca006020820152610e259061161c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60608180600001516117a45760405162461bcd60e51b815260040161063390612437565b6106c983602001516117be565b600061070a826020611908565b60608160028060ff16826040015160ff16146117fe57604080830151905161800560e51b815260ff91821660048201529082166024820152604401610633565b61181084600001518560600151611980565b6001600160401b03166080850181905263fffffffe19016118e757600061183f85600001518660400151611a48565b905063ffffffff80821610156118e15784516118649063ffffffff80841690611af516565b6040516020016118749190612489565b604051602081830303815290604052935061189785600001518660400151611a48565b905063ffffffff80821610156118e157845184906118be9063ffffffff80851690611af516565b6040516020016118cf9291906124a5565b60405160208183030381529060405293505b506110d7565b608084015184516119019163ffffffff90811690611af516565b92506110d7565b600060208260ff16111561191e5761191e611fd8565b60008260ff16845111611932578351611937565b8260ff165b905060005b81811015611978578060080285828151811061195a5761195a6123e7565b01602001516001600160f81b031916901c929092179160010161193c565b505092915050565b600060188260ff161015611998575060ff811661070a565b8160ff166018036119b6576119ac83611bb5565b60ff16905061070a565b8160ff166019036119d5576119ca83611c17565b61ffff16905061070a565b8160ff16601a036119f6576119e983611c83565b63ffffffff16905061070a565b8160ff16601b03611a1157611a0a83611ce2565b905061070a565b8160ff16601f03611a2a57506001600160401b0361070a565b604051636d785b1360e01b815260ff83166004820152602401610633565b600080611a5484611bb5565b90508060ff1660ff03611a71576001600160401b0391505061070a565b611a7e8482601f16611980565b91506001600160401b0380831610611ab457604051636d785b1360e01b81526001600160401b0383166004820152602401610633565b60ff83166007600583901c1614611aee5760405161800560e51b81526007600583901c16600482015260ff84166024820152604401610633565b5092915050565b6060818360200151611b0791906124d4565b83515180821115611b35576040516363a056dd60e01b81526004810183905260248101829052604401610633565b836001600160401b03811115611b4d57611b4d611e44565b6040519080825280601f01601f191660200182016040528015611b77576020820181803683370190505b5092508315611978578451602080870151908183018101908601611b9c81838a611d41565b611ba889896001611d88565b5050505050505092915050565b6000816020015182600001515180821115611bed576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051808301600101519550908190611c0a826124e7565b8152505050505050919050565b600081602001516002611c2a91906124d4565b82515180821115611c58576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600281840181015196509091611c7682846124d4565b9052509395945050505050565b600081602001516004611c9691906124d4565b82515180821115611cc4576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600481840181015196509091611c7682846124d4565b600081602001516008611cf591906124d4565b82515180821115611d23576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8351602085018051600881840181015196509091611c7682846124d4565b5b60208110611d61578151835260209283019290910190601f1901611d42565b8015611d83578151835160208390036101000a60001901801990921691161783525b505050565b60008284600001515180821115611dbc576040516363a056dd60e01b81526004810183905260248101829052604401610633565b8315611dd4576020860151611dd190866124d4565b94505b5050505060209190910181905290565b803563ffffffff81168114610c5c57600080fd5b600080600060608486031215611e0d57600080fd5b611e1684611de4565b95602085013595506040909401359392505050565b600060208284031215611e3d57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715611e7c57611e7c611e44565b60405290565b60405160c081016001600160401b0381118282101715611e7c57611e7c611e44565b604051601f8201601f191681016001600160401b0381118282101715611ecc57611ecc611e44565b604052919050565b60006001600160401b03821115611eed57611eed611e44565b50601f01601f191660200190565b600060208284031215611f0d57600080fd5b81356001600160401b03811115611f2357600080fd5b8201601f81018413611f3457600080fd5b8035611f47611f4282611ed4565b611ea4565b818152856020838501011115611f5c57600080fd5b81602084016020830137600091810160200191909152949350505050565b815160ff1681526020808301516001600160401b0316908201526040810161070a565b60006040828403121561124457600080fd5b600060208284031215611fc157600080fd5b81356001600160a01b03811681146106c957600080fd5b634e487b7160e01b600052600160045260246000fd5b828152606081016106c96020830184805160ff1682526020908101516001600160401b0316910152565b60006020828403121561202a57600080fd5b5051919050565b60006020828403121561204357600080fd5b8151600581106106c957600080fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60ff828116828216039081111561070a5761070a612068565b600181815b808511156120d25781600019048211156120b8576120b8612068565b808516156120c557918102915b93841c939080029061209c565b509250929050565b6000826120e95750600161070a565b816120f65750600061070a565b816001811461210c576002811461211657612132565b600191505061070a565b60ff84111561212757612127612068565b50506001821b61070a565b5060208310610133831016604e8410600b8410161715612155575081810a61070a565b61215f8383612097565b806000190482111561217357612173612068565b029392505050565b60006106c960ff8416836120da565b8181038181111561070a5761070a612068565b808202811582820484141761070a5761070a612068565b60ff81168114610e2557600080fd5b6001600160401b0381168114610e2557600080fd5b6000604082840312156121ea57600080fd5b6121f2611e5a565b82356121fd816121b4565b8152602083013561220d816121c3565b60208201529392505050565b60006020828403121561222b57600080fd5b8151600681106106c957600080fd5b60005b8381101561225557818101518382015260200161223d565b50506000910152565b8051610c5c816121b4565b8051610c5c816121c3565b6000602080838503121561228757600080fd5b82516001600160401b038082111561229e57600080fd5b90840190604082870312156122b257600080fd5b6122ba611e5a565b825180151581146122ca57600080fd5b815282840151828111156122dd57600080fd5b929092019160c083880312156122f257600080fd5b6122fa611e82565b83518381111561230957600080fd5b84016040818a03121561231b57600080fd5b612323611e5a565b81518581111561233257600080fd5b82019450601f85018a1361234557600080fd5b8451612353611f4282611ed4565b8181528b8983890101111561236757600080fd5b612376828a83018b8a0161223a565b8252509086015186820152815261238e84860161225e565b8582015261239e6040850161225e565b60408201526123af6060850161225e565b60608201526123c060808501612269565b60808201526123d160a08501612269565b60a0820152938101939093525090949350505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561240f57600080fd5b81356106c9816121c3565b60006020828403121561242c57600080fd5b81356106c9816121b4565b60208082526032908201527f5769746e65743a20747269656420746f206465636f64652076616c756520667260408201527137b69032b93937b932b2103932b9bab63a1760711b606082015260800190565b6000825161249b81846020870161223a565b9190910192915050565b600083516124b781846020880161223a565b8351908301906124cb81836020880161223a565b01949350505050565b8082018082111561070a5761070a612068565b6000600182016124f9576124f9612068565b506001019056fea26469706673582212203fd060fcccd6987b1c348cdf6374dade9f3e1d81be8485902e4eaeabbf37cc6a64736f6c63430008160033" -} \ No newline at end of file diff --git a/artifacts/WitnetRequest.json b/artifacts/WitnetRequest.json deleted file mode 100644 index 0713fd52e..000000000 --- a/artifacts/WitnetRequest.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "contractName": "WitnetRequest", - "sourceName": "contracts/WitnetRequest.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "request", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "WitnetRequestBuilt", - "type": "event" - }, - { - "inputs": [], - "name": "aggregator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "buildRequest", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract WitnetRequestFactory", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonAggregator", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getRadonRetrievalByIndex", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonRetrieval", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonRetrievalsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonTally", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "parameterized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "resultDataMaxSize", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "resultDataType", - "outputs": [ - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "retrievals", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tally", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "verifyRadonRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "template", - "outputs": [ - { - "internalType": "contract WitnetRequestTemplate", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "args", - "outputs": [ - { - "internalType": "string[][]", - "name": "", - "type": "string[][]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bytecode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "radHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - } - ] -} \ No newline at end of file diff --git a/artifacts/WitnetRequestBoard.json b/artifacts/WitnetRequestBoard.json deleted file mode 100644 index d47046a6d..000000000 --- a/artifacts/WitnetRequestBoard.json +++ /dev/null @@ -1,815 +0,0 @@ -{ - "contractName": "WitnetRequestBoard", - "sourceName": "contracts/WitnetRequestBoard.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "witReward", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmReward", - "type": "uint256" - } - ], - "name": "WitnetQuery", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - } - ], - "name": "WitnetQueryReported", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmReward", - "type": "uint256" - } - ], - "name": "WitnetQueryRewardUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmCallbackGas", - "type": "uint256" - } - ], - "name": "WitnetResponseDelivered", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "resultCborBytes", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmGasPrice", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "evmCallbackGas", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "evmCallbackRevertReason", - "type": "string" - } - ], - "name": "WitnetResponseDeliveryFailed", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "resultMaxSize", - "type": "uint16" - } - ], - "name": "estimateBaseFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - } - ], - "name": "estimateBaseFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "gasPrice", - "type": "uint256" - }, - { - "internalType": "uint96", - "name": "callbackGasLimit", - "type": "uint96" - } - ], - "name": "estimateBaseFeeWithCallback", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "fetchQueryResponse", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "fromFinality", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQuery", - "outputs": [ - { - "components": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "fromCallbackGas", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "SLA", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "RAD", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "reserved1", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "evmReward", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "bytecode", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Request", - "name": "request", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "bytes32", - "name": "fromFinality", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Response", - "name": "response", - "type": "tuple" - } - ], - "internalType": "struct WitnetV2.Query", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryBytecode", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryResponse", - "outputs": [ - { - "components": [ - { - "internalType": "bytes32", - "name": "fromFinality", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "tallyHash", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "cborBytes", - "type": "bytes" - } - ], - "internalType": "struct WitnetV2.Response", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryResult", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "success", - "type": "bool" - }, - { - "components": [ - { - "components": [ - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "cursor", - "type": "uint256" - } - ], - "internalType": "struct WitnetBuffer.Buffer", - "name": "buffer", - "type": "tuple" - }, - { - "internalType": "uint8", - "name": "initialByte", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "majorType", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "additionalInformation", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "len", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "tag", - "type": "uint64" - } - ], - "internalType": "struct WitnetCBOR.CBOR", - "name": "value", - "type": "tuple" - } - ], - "internalType": "struct Witnet.Result", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryResultAuditTrail", - "outputs": [ - { - "internalType": "uint256", - "name": "witnetTimestamp", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "witnetTallyHash", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "witnetEvmFinalityBlock", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryResultError", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.ResultErrorCodes", - "name": "code", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "internalType": "struct Witnet.ResultError", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryResultStatus", - "outputs": [ - { - "internalType": "enum WitnetV2.ResultStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryReward", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "getQueryStatus", - "outputs": [ - { - "internalType": "enum WitnetV2.QueryStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "queryRAD", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "querySLA", - "type": "tuple" - } - ], - "name": "postRequest", - "outputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "queryUnverifiedBytecode", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "querySLA", - "type": "tuple" - }, - { - "internalType": "uint96", - "name": "queryCallbackGasLimit", - "type": "uint96" - } - ], - "name": "postRequestWithCallback", - "outputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "queryRAD", - "type": "bytes32" - }, - { - "components": [ - { - "internalType": "uint8", - "name": "witnessingCommitteeSize", - "type": "uint8" - }, - { - "internalType": "uint64", - "name": "witnessingWitTotalReward", - "type": "uint64" - } - ], - "internalType": "struct WitnetV2.RadonSLA", - "name": "querySLA", - "type": "tuple" - }, - { - "internalType": "uint96", - "name": "queryCallbackGasLimit", - "type": "uint96" - } - ], - "name": "postRequestWithCallback", - "outputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "queryId", - "type": "uint256" - } - ], - "name": "upgradeQueryReward", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "channel", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract WitnetRequestFactory", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x" -} \ No newline at end of file diff --git a/artifacts/WitnetRequestFactory.json b/artifacts/WitnetRequestFactory.json deleted file mode 100644 index ab4c0c4ad..000000000 --- a/artifacts/WitnetRequestFactory.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "contractName": "WitnetRequestFactory", - "sourceName": "contracts/WitnetRequestFactory.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "template", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "parameterized", - "type": "bool" - } - ], - "name": "WitnetRequestTemplateBuilt", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "bytes32[]", - "name": "sourcesIds", - "type": "bytes32[]" - }, - { - "internalType": "bytes32", - "name": "aggregatorId", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "tallyId", - "type": "bytes32" - }, - { - "internalType": "uint16", - "name": "resultDataMaxSize", - "type": "uint16" - } - ], - "name": "buildRequestTemplate", - "outputs": [ - { - "internalType": "address", - "name": "template", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "0x", - "deployedBytecode": "0x" -} \ No newline at end of file diff --git a/artifacts/WitnetRequestTemplate.json b/artifacts/WitnetRequestTemplate.json deleted file mode 100644 index 623bfd380..000000000 --- a/artifacts/WitnetRequestTemplate.json +++ /dev/null @@ -1,368 +0,0 @@ -{ - "contractName": "WitnetRequestTemplate", - "sourceName": "contracts/WitnetRequestTemplate.sol", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "request", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "radHash", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "WitnetRequestBuilt", - "type": "event" - }, - { - "inputs": [], - "name": "class", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "factory", - "outputs": [ - { - "internalType": "contract WitnetRequestFactory", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "registry", - "outputs": [ - { - "internalType": "contract WitnetBytecodes", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "specs", - "outputs": [ - { - "internalType": "bytes4", - "name": "", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "witnet", - "outputs": [ - { - "internalType": "contract WitnetRequestBoard", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "aggregator", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "parameterized", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "resultDataMaxSize", - "outputs": [ - { - "internalType": "uint16", - "name": "", - "type": "uint16" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "resultDataType", - "outputs": [ - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "retrievals", - "outputs": [ - { - "internalType": "bytes32[]", - "name": "", - "type": "bytes32[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tally", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonAggregator", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "getRadonRetrievalByIndex", - "outputs": [ - { - "components": [ - { - "internalType": "uint8", - "name": "argsCount", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataRequestMethods", - "name": "method", - "type": "uint8" - }, - { - "internalType": "enum Witnet.RadonDataTypes", - "name": "resultDataType", - "type": "uint8" - }, - { - "internalType": "string", - "name": "url", - "type": "string" - }, - { - "internalType": "string", - "name": "body", - "type": "string" - }, - { - "internalType": "string[2][]", - "name": "headers", - "type": "string[2][]" - }, - { - "internalType": "bytes", - "name": "script", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonRetrieval", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonRetrievalsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getRadonTally", - "outputs": [ - { - "components": [ - { - "internalType": "enum Witnet.RadonReducerOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "components": [ - { - "internalType": "enum Witnet.RadonFilterOpcodes", - "name": "opcode", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "args", - "type": "bytes" - } - ], - "internalType": "struct Witnet.RadonFilter[]", - "name": "filters", - "type": "tuple[]" - } - ], - "internalType": "struct Witnet.RadonReducer", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "buildRequest", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string[][]", - "name": "args", - "type": "string[][]" - } - ], - "name": "verifyRadonRequest", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ] -} \ No newline at end of file diff --git a/artifacts/index.js b/artifacts/index.js deleted file mode 100644 index a89a826e7..000000000 --- a/artifacts/index.js +++ /dev/null @@ -1,8 +0,0 @@ -module.exports = { - WitnetBytecodes: require("../artifacts/WitnetBytecodes.json"), - WitnetPriceFeeds: require("../artifacts/WitnetPriceFeeds.json"), - WitnetRandomness: require("../artifacts/WitnetRandomness.json"), - WitnetRequest: require("../artifacts/WitnetRequest.json"), - WitnetRequestFactory: require("../artifacts/witnetRequestFactory.json"), - WitnetRequestTemplate: require("../artifacts/WitnetRequestTemplate.json"), -} diff --git a/hardhat.config.js b/hardhat.config.js new file mode 100644 index 000000000..fecabd47a --- /dev/null +++ b/hardhat.config.js @@ -0,0 +1,6 @@ +const settings = require("./settings") +const utils = require("./src/utils") +const [, target] = utils.getRealmNetworkFromArgs() +module.exports = { + solidity: settings.getCompilers(target), +}; diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 01933e44e..35b588bdd 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -1,5 +1,5 @@ const ethUtils = require("ethereumjs-util") -const { merge } = require("lodash") +const merge = require("lodash.merge") const settings = require("../../settings") const utils = require("../../src/utils") @@ -64,8 +64,6 @@ async function deploy (target) { } const tx = await deployer.proxify(proxySalt, impl.address, initdata, { from }) utils.traceTx(tx) - // save/overwrite exportable abi file - utils.saveJsonArtifact(key, proxy) } else { try { const oldImplAddr = await getProxyImplementation(from, proxyAddr) @@ -110,8 +108,6 @@ async function deploy (target) { } const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) utils.traceTx(tx) - // save/overwrite exportable abi file - utils.saveJsonArtifactAbi(key, proxy) } } else { utils.traceHeader(`Skipped '${key}'`) diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 7eb53e77f..8eab32d32 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -39,7 +39,7 @@ module.exports = async function (_, network, [,,, from]) { intrinsics: { types: ["address", "address"], values: [ - /* _operator */ from, + /* _operator */ from, /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), ], }, @@ -80,8 +80,6 @@ async function deploy (specs) { utils.traceTx(tx) if ((await web3.eth.getCode(dappAddr)).length > 3) { addresses[key] = dappAddr - // save/overwrite exportable abi file - utils.saveJsonArtifact(key, artifact) } else { console.info(`Contract was not deployed on expected address: ${dappAddr}`) console.log(tx.receipt) diff --git a/package.json b/package.json index dff5c9032..ffbe9dbe7 100644 --- a/package.json +++ b/package.json @@ -14,16 +14,19 @@ "witnet", "ethereum" ], - "export": { + "exports": { ".": "./src/index.js", - "./artifacts": "./artifacts/index.js", - "./settings": "./settings/index.js", + "./assets": "./src/index.js", "./utils": "./src/utils" }, "files": [ - "build", + "artifacts/index.js", + "artifacts/contracts", + "build/contracts", "contracts", - "migrations/witnet.*" + "migrations/witnet.addresses.json", + "settings", + "src" ], "scripts": { "addresses": "node ./scripts/addresses.js 2>&1", @@ -48,7 +51,7 @@ "migrate": "node ./scripts/migrate.js 2>&1", "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", + "prepare": "npx truffle compile --all && npx hardhat compile && node ./scripts/prepare.js", "test": "npm run clean && npx truffle test" }, "devDependencies": { @@ -66,8 +69,9 @@ "eslint-plugin-promise": "^6.1.1", "eth-gas-reporter": "^0.2.27", "eth-helpers": "^1.3.0", + "hardhat": "^2.19.5", "js-sha256": "^0.11.0", - "lodash": "^4.17.21", + "lodash.merge": "^4.6.2", "nanoassert": "^2.0.0", "proper-lockfile": "^4.1.2", "sha3-wasm": "^1.0.0", diff --git a/scripts/prepare.js b/scripts/prepare.js new file mode 100644 index 000000000..87f0cd29b --- /dev/null +++ b/scripts/prepare.js @@ -0,0 +1,12 @@ +const exec = require("child_process").execSync +const os = require("os") +const fs = require("fs") + +if (fs.existsSync("./artifacts")) { + if (os.type() === "Windows_NT") { + exec(`del /s /q artifacts\\*.dbg.json`) + } else { + target = target.replace(/\\/g, "/") + exec(`find ./artifacts -name '*.dbg.json' -exec rm -r {} \;`) + } +} diff --git a/settings/index.js b/settings/index.js index 682e195fe..f0e8341e7 100644 --- a/settings/index.js +++ b/settings/index.js @@ -1,5 +1,5 @@ const artifacts = require("./artifacts") -const { merge } = require("lodash") +const merge = require("lodash.merge") const networks = require("./networks") const specs = require("./specs") const solidity = require("./solidity") @@ -22,13 +22,20 @@ module.exports = { solidity[net], ) }, - getNetworks: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network) - return merge( - networks.default, - networks[eco], - networks[net], - ) + getNetworks: () => { + return Object.fromEntries(Object.entries(networks) + .filter(entry => entry[0].indexOf(":") >-1) + .map(entry => { + const [ecosystem, network] = utils.getRealmNetworkFromString(entry[0]) + return [ + network.toLowerCase(), merge( + { ...networks.default }, + networks[ecosystem], + networks[entry[0]] + ) + ]; + }) + ); }, getSpecs: (network) => { const [eco, net] = utils.getRealmNetworkFromArgs(network) @@ -39,7 +46,6 @@ module.exports = { ) }, artifacts, - networks, solidity, specs, } diff --git a/settings/networks.js b/settings/networks.js index 55481b613..374fccd58 100644 --- a/settings/networks.js +++ b/settings/networks.js @@ -3,7 +3,7 @@ module.exports = { host: "localhost", skipDryRun: true, }, - "ethereum.goerli": { + "ethereum:goerli": { network_id: 5, port: 8545, verify: { @@ -11,11 +11,11 @@ module.exports = { browserURL: "https://goerli.etherscan.io/", }, }, - "ethereum.mainnet": { + "ethereum:mainnet": { network_id: 1, port: 9545, }, - "ethereum.sepolia": { + "ethereum:sepolia": { network_id: 11155111, port: 8506, verify: { @@ -23,7 +23,7 @@ module.exports = { browserURL: "https://sepolia.etherscan.io/", }, }, - "arbitrum.goerli": { + "arbitrum:goerli": { network_id: 421613, port: 8517, verify: { @@ -31,15 +31,15 @@ module.exports = { browserURL: "https://goerli.arbiscan.io/", }, }, - "arbitrum.one": { + "arbitrum:one": { network_id: 42161, port: 9517, }, - "avalanche.mainnet": { + "avalanche:mainnet": { network_id: 43114, port: 9533, }, - "avalanche.testnet": { + "avalanche:testnet": { network_id: 43113, port: 8533, verify: { @@ -47,7 +47,7 @@ module.exports = { browserURL: "https://arbiscan.io/", }, }, - "boba.bnb.testnet": { + "boba:bnb:testnet": { network_id: 9728, port: 8510, verify: { @@ -55,7 +55,7 @@ module.exports = { browserURL: "https://boba.testnet.routescan.io/", }, }, - "boba.bnb.mainnet": { + "boba:bnb:mainnet": { network_id: 56288, port: 9510, verify: { @@ -64,7 +64,7 @@ module.exports = { apiKey: "MY_API_KEY", }, }, - "boba.ethereum.mainnet": { + "boba:ethereum:mainnet": { network_id: 288, port: 9539, verify: { @@ -73,7 +73,7 @@ module.exports = { apiKey: "MY_API_KEY", }, }, - "boba.ethereum.goerli": { + "boba:ethereum:goerli": { network_id: 2888, port: 8515, verify: { @@ -81,11 +81,11 @@ module.exports = { browserURL: "https://boba.testnet.routescan.io/", }, }, - "celo.alfajores": { + "celo:alfajores": { network_id: 44787, port: 8538, }, - "celo.mainnet": { + "celo:mainnet": { network_id: 42220, port: 9538, verify: { @@ -94,12 +94,12 @@ module.exports = { browserURL: "https://explorer.celo.org/alfajores/", }, }, - "conflux.core.testnet": { + "conflux:core:testnet": { port: 8540, network_id: 1, gasPrice: 10, }, - "conflux.core.mainnet": { + "conflux:core:mainnet": { port: 9540, network_id: 1029, gasPrice: 10, @@ -108,19 +108,19 @@ module.exports = { browserURL: "https://explorer.celo.org/mainnet/", }, }, - "conflux.espace.testnet": { + "conflux:espace:testnet": { port: 8529, network_id: 71, networkCheckTimeout: 999999, gas: 15000000, }, - "conflux.espace.mainnet": { + "conflux:espace:mainnet": { port: 9529, network_id: 1030, networkCheckTimeout: 999999, gas: 15000000, }, - "cronos.testnet": { + "cronos:testnet": { port: 8530, network_id: 338, verify: { @@ -128,15 +128,15 @@ module.exports = { browserURL: "https://cronos.org/explorer/testnet3", }, }, - "cronos.mainnet": { + "cronos:mainnet": { port: 9530, network_id: 25, }, - "cube.testnet": { + "cube:testnet": { port: 8522, network_id: 1819, }, - "dogechain.testnet": { + "dogechain:testnet": { port: 8519, network_id: 568, gas: 6000000, @@ -146,11 +146,11 @@ module.exports = { browserURL: "https://explorer-testnet.dogechain.dog/", }, }, - "dogechain.mainnet": { + "dogechain:mainnet": { port: 9519, network_id: 2000, }, - "elastos.testnet": { + "elastos:testnet": { port: 8513, network_id: 21, verify: { @@ -159,7 +159,7 @@ module.exports = { browserURL: "https://esc-testnet.elastos.io/address", }, }, - "elastos.mainnet": { + "elastos:mainnet": { port: 9513, network_id: 20, verify: { @@ -167,7 +167,7 @@ module.exports = { browserURL: "https://esc.elastos.io/address", }, }, - "fuse.testnet": { + "fuse:testnet": { port: 8511, network_id: 123, verify: { @@ -176,7 +176,7 @@ module.exports = { apiKey: "MY_API_KEY", }, }, - "gnosis.testnet": { + "gnosis:testnet": { port: 8509, network_id: 10200, verify: { @@ -185,11 +185,11 @@ module.exports = { apiKey: "MY_API_KEY", }, }, - "harmony.testnet#0": { + "harmony:testnet#0": { port: 8534, network_id: 1666700000, }, - "kava.testnet": { + "kava:testnet": { port: 8526, network_id: 2221, verify: { @@ -198,11 +198,11 @@ module.exports = { browserURL: "https://explorer.testnet.kava.io/", }, }, - "kava.mainnet": { + "kava:mainnet": { port: 9526, network_id: 2222, }, - "kcc.testnet": { + "kcc:testnet": { port: 8537, network_id: 322, verify: { @@ -211,19 +211,19 @@ module.exports = { browserURL: "https://scan-testnet.kcc.network/", }, }, - "kcc.mainnet": { + "kcc:mainnet": { port: 9537, network_id: 321, }, - "klaytn.testnet": { + "klaytn:testnet": { port: 8527, network_id: 1001, }, - "klaytn.mainnet": { + "klaytn:mainnet": { port: 9527, network_id: 8217, }, - "mantle.testnet": { + "mantle:testnet": { port: 8508, network_id: 5001, verify: { @@ -232,7 +232,7 @@ module.exports = { explorerUrl: "https://explorer.testnet.mantle.xyz/address", }, }, - "mantle.mainnet": { + "mantle:mainnet": { port: 9508, network_id: 5000, verify: { @@ -241,11 +241,11 @@ module.exports = { explorerUrl: "https://explorer.mantle.xyz/address", }, }, - "metis.mainnet": { + "metis:mainnet": { port: 9536, network_id: 1088, }, - "metis.goerli": { + "metis:goerli": { port: 8536, network_id: 599, verify: { @@ -254,35 +254,35 @@ module.exports = { explorerUrl: "https://goerli.explorer.metisdevops.link/address", }, }, - "meter.testnet": { + "meter:testnet": { port: 8523, network_id: 83, }, - "meter.mainnet": { + "meter:mainnet": { port: 9523, network_id: 82, }, - "moonbeam.mainnet": { + "moonbeam:mainnet": { port: 9531, network_id: 1284, }, - "moonbeam.moonriver": { + "moonbeam:moonriver": { port: 7531, network_id: 1285, }, - "moonbeam.moonbase": { + "moonbeam:moonbase": { port: 8531, network_id: 1287, }, - "okxchain.testnet": { + "okxchain:testnet": { port: 8528, network_id: 65, }, - "okxchain.mainnet": { + "okxchain:mainnet": { port: 9528, network_id: 66, }, - "optimism.goerli": { + "optimism:goerli": { port: 8520, network_id: 420, verify: { @@ -291,20 +291,20 @@ module.exports = { explorerUrl: "https://optimism-goerli.blockscout.com/", }, }, - "optimism.mainnet": { + "optimism:mainnet": { port: 9520, network_id: 10, }, - "polygon.goerli": { + "polygon:goerli": { port: 8535, network_id: 80001, }, - "polygon.mainnet": { + "polygon:mainnet": { port: 9535, network_id: 137, }, - "polygon.zkevm.goerli": { + "polygon:zkevm:goerli": { port: 8512, network_id: 1442, verify: { @@ -312,7 +312,7 @@ module.exports = { explorerUrl: "https://testnet-zkevm.polygonscan.com/address", }, }, - "polygon.zkevm.mainnet": { + "polygon:zkevm:mainnet": { port: 9512, network_id: 1101, verify: { @@ -320,15 +320,15 @@ module.exports = { explorerUrl: "https://zkevm.polygonscan.com/address/", }, }, - "reef.testnet": { + "reef:testnet": { port: 8532, network_id: 13939, }, - "reef.mainnet": { + "reef:mainnet": { port: 9532, network_id: 13939, }, - "scroll.sepolia": { + "scroll:sepolia": { port: 8514, network_id: 534351, verify: { @@ -336,7 +336,7 @@ module.exports = { explorerUrl: "https://sepolia.scrollscan.io/", }, }, - "scroll.mainnet": { + "scroll:mainnet": { port: 9514, network_id: 534352, verify: { @@ -344,15 +344,15 @@ module.exports = { explorerUrl: "https://scrollscan.com/address", }, }, - "syscoin.testnet": { + "syscoin:testnet": { port: 8521, network_id: 5700, }, - "syscoin.mainnet": { + "syscoin:mainnet": { port: 9521, network_id: 57, }, - "syscoin.rollux.testnet": { + "syscoin:rollux:testnet": { port: 8507, network_id: 57000, verify: { @@ -361,11 +361,11 @@ module.exports = { explorerUrl: "https://rollux.tanenbaum.io/address/", }, }, - "ultron.testnet": { + "ultron:testnet": { port: 8516, network_id: 1230, }, - "ultron.mainnet": { + "ultron:mainnet": { port: 9516, network_id: 1231, }, diff --git a/settings/solidity.js b/settings/solidity.js index dcb2b260f..db7b0e5f9 100644 --- a/settings/solidity.js +++ b/settings/solidity.js @@ -1,14 +1,12 @@ module.exports = { default: { - solc: { - version: "0.8.22", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - evmVersion: "paris", + version: "0.8.22", + settings: { + optimizer: { + enabled: true, + runs: 200, }, + evmVersion: "paris", }, }, } diff --git a/src/index.js b/src/index.js index a2b3c2b23..859043d56 100644 --- a/src/index.js +++ b/src/index.js @@ -1,23 +1,36 @@ -const addresses = require("./migrations/witnet.addresses.json") -const { merge } = require("lodash") +const addresses = require("../migrations/witnet.addresses.json") +const merge = require("lodash.merge") const utils = require("./utils") module.exports = { getAddresses: (network) => { const [eco, net] = utils.getRealmNetworkFromArgs(network) - return merge( - addresses.default, - addresses[eco], - addresses[net], - ) + if (addresses[net]) { + return merge( + addresses.default, + addresses[eco], + addresses[net], + ) + } else { + return {} + } }, - getNetworks: () => { + listNetworks: () => { return Object .entries(addresses) .filter(value => value[0].indexOf(":") > -1) .map(value => value[0]) .sort() }, - artifacts: require("../artifacts"), + artifacts: { + WitnetBytecodes: require("../artifacts/contracts/WitnetBytecodes.sol/WitnetBytecodes.json"), + WitnetPriceFeeds: require("../artifacts//contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), + WitnetRandomness: require("../artifacts//contracts/apps/WitnetRandomness.sol/WitnetRandomness.json"), + WitnetRequest: require("../artifacts//contracts/WitnetRequest.sol/WitnetRequest.json"), + WitnetRequestBoard: require("../artifacts//contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), + WitnetRequestFactory: require("../artifacts//contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), + WitnetRequestTemplate: require("../artifacts//contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), + WitnetUpgradableBase: require("../artifacts//contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), + }, settings: require("../settings"), utils, } diff --git a/src/utils/index.js b/src/utils/index.js index 5a18eb719..40c53688a 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -1,6 +1,5 @@ const fs = require("fs") require("dotenv").config() -const { isEqual } = require("lodash") const lockfile = require("proper-lockfile") const readline = require("readline") const web3 = require("web3") @@ -18,7 +17,6 @@ module.exports = { prompt, readAddresses, saveAddresses, - saveJsonArtifact, traceHeader, traceTx, } @@ -106,28 +104,3 @@ async function saveAddresses (network, addrs) { fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }) lockfile.unlockSync(filename) } - -function saveJsonArtifact (key, artifact) { - const { abi, ast, bytecode, deployedBytecode, contractName } = artifact - const version = require("../../package.json").version - const latestFileName = `./artifacts/${key}.json` - const versionFileName = `./artifacts/${key}-${version}.json` - const current = { - contractName, - sourceName: ast?.absolutePath.split("project:/")[1], - abi, - bytecode, - deployedBytecode, - } - let latest = [] - if (fs.existsSync(latestFileName)) { - try { - latest = JSON.parse(fs.readFileSync(latestFileName)) - } catch {} - } - if (!isEqual(current, latest)) { - const json = JSON.stringify(current, null, 4) - fs.writeFileSync(versionFileName, json, { flag: "w+" }) - fs.writeFileSync(latestFileName, json, { flag: "w+" }) - } -} diff --git a/truffle-config.js b/truffle-config.js index f50834566..660c7a0ed 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -13,7 +13,9 @@ module.exports = { contracts_directory: "./contracts/", migrations_directory: "./migrations/scripts/", networks: settings.getNetworks(network), - compilers: settings.getCompilers(network), + compilers: { + solc: settings.getCompilers(network), + }, mocha: { timeout: 300000, useColors: true, From 1b27482fed0cf42f269dc60739eb22c86b1adc02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 8 Feb 2024 10:17:07 +0100 Subject: [PATCH 100/149] chore: refactor assets and utils package exports --- package.json | 8 +- scripts/prepare.js | 1 - scripts/vanity2gen.js | 2 +- scripts/vanity3gen.js | 2 +- src/index.js | 33 +- src/utils/index.js | 36 +- yarn.lock | 1094 +++++++++++++++++++++++++++++++---------- 7 files changed, 881 insertions(+), 295 deletions(-) diff --git a/package.json b/package.json index ffbe9dbe7..1b7a01fc1 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,10 @@ "exports": { ".": "./src/index.js", "./assets": "./src/index.js", - "./utils": "./src/utils" + "./utils": "./src/utils/index.js" }, "files": [ - "artifacts/index.js", - "artifacts/contracts", + "artifacts", "build/contracts", "contracts", "migrations/witnet.addresses.json", @@ -79,7 +78,6 @@ "truffle": "^5.11.5", "truffle-assertions": "^0.9.2", "truffle-flattener": "^1.6.0", - "typescript": "latest", - "web3": "^4.4.0" + "typescript": "latest" } } diff --git a/scripts/prepare.js b/scripts/prepare.js index 87f0cd29b..d8f1872cb 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -6,7 +6,6 @@ if (fs.existsSync("./artifacts")) { if (os.type() === "Windows_NT") { exec(`del /s /q artifacts\\*.dbg.json`) } else { - target = target.replace(/\\/g, "/") exec(`find ./artifacts -name '*.dbg.json' -exec rm -r {} \;`) } } diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index 0ce0ee900..489d1a693 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -1,7 +1,7 @@ const { assert } = require("chai") const create2 = require("./eth-create2") const fs = require("fs") -const utils = require("./utils") +const utils = require("../src/utils") const addresses = require("../migrations/witnet.addresses") diff --git a/scripts/vanity3gen.js b/scripts/vanity3gen.js index d1844ee12..24a7bed59 100644 --- a/scripts/vanity3gen.js +++ b/scripts/vanity3gen.js @@ -1,7 +1,7 @@ const { assert } = require("chai") const create3 = require("./eth-create3") const fs = require("fs") -const utils = require("./utils") +const utils = require("../src/utils") const addresses = require("../migrations/witnet.addresses") diff --git a/src/index.js b/src/index.js index 859043d56..ad434a635 100644 --- a/src/index.js +++ b/src/index.js @@ -3,24 +3,33 @@ const merge = require("lodash.merge") const utils = require("./utils") module.exports = { getAddresses: (network) => { - const [eco, net] = utils.getRealmNetworkFromArgs(network) + const [eco, net] = utils.getRealmNetworkFromString(network) if (addresses[net]) { - return merge( + const merged = merge( addresses.default, addresses[eco], addresses[net], ) + return { + WitnetPriceFeeds: merged?.WitnetPriceFeeds, + WitnetRandomness: merged?.WitnetRandomness, + WitnetRequestBoard: merged?.WitnetRequestBoard, + } } else { return {} } }, - listNetworks: () => { - return Object - .entries(addresses) - .filter(value => value[0].indexOf(":") > -1) - .map(value => value[0]) - .sort() + supportedEcosystems: () => { + let ecosystems = [] + supportedNetworks().forEach(network => { + const [ecosystem,] = utils.getRealmNetworkFromString(network) + if (!ecosystems.includes(ecosystem)) { + ecosystems.push(ecosystem) + } + }); + return ecosystems }, + supportedNetworks, artifacts: { WitnetBytecodes: require("../artifacts/contracts/WitnetBytecodes.sol/WitnetBytecodes.json"), WitnetPriceFeeds: require("../artifacts//contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), @@ -34,3 +43,11 @@ module.exports = { settings: require("../settings"), utils, } + +function supportedNetworks() { + return Object + .entries(addresses) + .filter(value => value[0].indexOf(":") > -1) + .map(value => value[0]) + .sort() +} diff --git a/src/utils/index.js b/src/utils/index.js index 40c53688a..c1981ec83 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -2,7 +2,6 @@ const fs = require("fs") require("dotenv").config() const lockfile = require("proper-lockfile") const readline = require("readline") -const web3 = require("web3") const traceHeader = require("./traceHeader") const traceTx = require("./traceTx") @@ -11,8 +10,9 @@ module.exports = { fromAscii, getRealmNetworkFromArgs, getRealmNetworkFromString, + getWitnetArtifactsFromArgs, + getWitnetRequestMethodString, isDryRun, - isNullAddress, padLeft, prompt, readAddresses, @@ -50,14 +50,34 @@ function getRealmNetworkFromString (network) { } } -function isDryRun (network) { - return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" +function getWitnetRequestMethodString(method) { + if (!method) { + return "HTTP-GET" + } else { + const strings = { + 0: "UNKNOWN", + 1: "HTTP-GET", + 2: "RNG", + 3: "HTTP-POST", + 4: "HTTP-HEAD", + } + return strings[method] || method.toString() + } } -function isNullAddress (addr) { - return !addr || - addr === "0x0000000000000000000000000000000000000000" || - !web3.utils.isAddress(addr) +function getWitnetArtifactsFromArgs() { + let selection = [] + process.argv.map((argv, index, args) => { + if (argv === "--artifacts") { + selection = args[index + 1].split(",") + } + return argv + }) + return selection +}; + +function isDryRun (network) { + return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" } function padLeft (str, char, size) { diff --git a/yarn.lock b/yarn.lock index 2d4ed2329..26599014a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,11 +7,6 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== -"@adraffy/ens-normalize@^1.8.8": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" - integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== - "@apollo/protobufjs@1.2.6": version "1.2.6" resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.6.tgz#d601e65211e06ae1432bf5993a1a0105f2862f27" @@ -149,6 +144,42 @@ dependencies: regenerator-runtime "^0.14.0" +"@chainsafe/as-sha256@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" + integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== + +"@chainsafe/persistent-merkle-tree@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" + integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/persistent-merkle-tree@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" + integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + +"@chainsafe/ssz@^0.10.0": + version "0.10.2" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" + integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.5.0" + +"@chainsafe/ssz@^0.9.2": + version "0.9.4" + resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" + integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== + dependencies: + "@chainsafe/as-sha256" "^0.3.1" + "@chainsafe/persistent-merkle-tree" "^0.4.2" + case "^1.6.3" + "@ensdomains/address-encoder@^0.1.7": version "0.1.9" resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" @@ -270,7 +301,7 @@ ethereum-cryptography "^2.0.0" micro-ftch "^0.3.1" -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== @@ -461,7 +492,7 @@ dependencies: "@ethersproject/logger" "^5.7.0" -"@ethersproject/providers@5.7.2": +"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": version "5.7.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== @@ -612,6 +643,11 @@ "@ethersproject/properties" "^5.7.0" "@ethersproject/strings" "^5.7.0" +"@fastify/busboy@^2.0.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" + integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== + "@graphql-tools/batch-execute@8.5.1": version "8.5.1" resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz#fa3321d58c64041650be44250b1ebc3aab0ba7a9" @@ -724,6 +760,17 @@ resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + "@noble/curves@1.3.0", "@noble/curves@~1.3.0": version "1.3.0" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" @@ -767,6 +814,206 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@nomicfoundation/ethereumjs-block@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" + integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== + 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.1" + +"@nomicfoundation/ethereumjs-blockchain@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" + integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== + 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.3" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + level "^8.0.0" + lru-cache "^5.1.1" + memory-level "^1.0.0" + +"@nomicfoundation/ethereumjs-common@4.0.2": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" + integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.2" + crc-32 "^1.2.0" + +"@nomicfoundation/ethereumjs-ethash@3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" + integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== + dependencies: + "@nomicfoundation/ethereumjs-block" "5.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + abstract-level "^1.0.3" + bigint-crypto-utils "^3.0.23" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-evm@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" + integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== + dependencies: + "@ethersproject/providers" "^5.7.1" + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-tx" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/ethereumjs-rlp@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" + integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== + +"@nomicfoundation/ethereumjs-statemanager@2.0.2": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" + integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.2" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + debug "^4.3.3" + ethereum-cryptography "0.1.3" + ethers "^5.7.1" + js-sdsl "^4.1.4" + +"@nomicfoundation/ethereumjs-trie@6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" + integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + "@nomicfoundation/ethereumjs-util" "9.0.2" + "@types/readable-stream" "^2.3.13" + ethereum-cryptography "0.1.3" + readable-stream "^3.6.0" + +"@nomicfoundation/ethereumjs-tx@5.0.2": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" + integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== + dependencies: + "@chainsafe/ssz" "^0.9.2" + "@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.2": + version "9.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" + integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== + dependencies: + "@chainsafe/ssz" "^0.10.0" + "@nomicfoundation/ethereumjs-rlp" "5.0.2" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-vm@7.0.2": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" + integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== + 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.3" + ethereum-cryptography "0.1.3" + mcl-wasm "^0.7.1" + rustbn.js "~0.2.0" + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + "@openzeppelin/contract-loader@^0.6.2": version "0.6.3" resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" @@ -996,6 +1243,74 @@ "@noble/hashes" "~1.3.2" "@scure/base" "~1.1.4" +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + "@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" @@ -1312,6 +1627,13 @@ dependencies: "@types/node" "*" +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + "@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": version "5.1.5" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" @@ -1427,7 +1749,7 @@ resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== -"@types/lru-cache@5.1.1": +"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== @@ -1481,6 +1803,14 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== +"@types/readable-stream@^2.3.13": + version "2.3.15" + resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" + integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== + dependencies: + "@types/node" "*" + safe-buffer "~5.1.1" + "@types/responselike@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" @@ -1517,23 +1847,11 @@ "@types/mime" "*" "@types/node" "*" -"@types/ws@8.5.3": - version "8.5.3" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.3.tgz#7d25a1ffbecd3c4f2d35068d0b283c037003274d" - integrity sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w== - dependencies: - "@types/node" "*" - "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== -abitype@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/abitype/-/abitype-0.7.1.tgz#16db20abe67de80f6183cf75f3de1ff86453b745" - integrity sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ== - abort-controller@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1559,6 +1877,19 @@ abstract-level@1.0.3: module-error "^1.0.1" queue-microtask "^1.2.3" +abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" + integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== + dependencies: + buffer "^6.0.3" + catering "^2.1.0" + is-buffer "^2.0.5" + level-supports "^4.0.0" + level-transcoder "^1.0.1" + module-error "^1.0.1" + queue-microtask "^1.2.3" + abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" @@ -1618,6 +1949,11 @@ acorn@^8.9.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + ado-contracts@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ado-contracts/-/ado-contracts-1.0.0.tgz#44879d18ab37da1c5f5282e2d1d3a1db42eb34d2" @@ -1630,6 +1966,21 @@ aes-js@3.0.0: resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + ajv-formats@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" @@ -1657,6 +2008,13 @@ ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: require-from-string "^2.0.2" uri-js "^4.2.2" +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + ansi-colors@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" @@ -1667,6 +2025,18 @@ ansi-colors@^3.2.3: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -2054,6 +2424,11 @@ big.js@^6.0.3: resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== +bigint-crypto-utils@^3.0.23: + version "3.3.0" + resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" + integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== + bignumber.js@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" @@ -2135,6 +2510,20 @@ boolbase@^1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2162,6 +2551,16 @@ brorand@^1.1.0: resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== +browser-level@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" + integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.1" + module-error "^1.0.2" + run-parallel-limit "^1.1.0" + browser-stdout@1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" @@ -2337,17 +2736,22 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== -camelcase@^6.0.0: +camelcase@^6.0.0, camelcase@^6.2.0: version "6.3.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== +case@^1.6.3: + version "1.6.3" + resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" + integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== + caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== -catering@^2.0.0, catering@^2.1.0: +catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== @@ -2471,11 +2875,31 @@ chokidar@3.5.3: optionalDependencies: fsevents "~2.3.2" +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + cids@^0.7.1: version "0.7.5" resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" @@ -2500,6 +2924,27 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== +classic-level@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" + integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== + dependencies: + abstract-level "^1.0.2" + catering "^2.1.0" + module-error "^1.0.1" + napi-macros "^2.2.2" + node-gyp-build "^4.3.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + cli-cursor@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" @@ -2588,6 +3033,16 @@ combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + commander@^10.0.0: version "10.0.1" resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" @@ -2676,6 +3131,11 @@ cookie@0.5.0: resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -2704,7 +3164,7 @@ cosmiconfig@^8.0.0: parse-json "^5.2.0" path-type "^4.0.0" -crc-32@^1.2.0, crc-32@^1.2.2: +crc-32@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== @@ -2845,7 +3305,7 @@ debug@3.1.0: dependencies: ms "2.0.0" -debug@4.3.4, debug@^4.3.1, debug@^4.3.2: +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -3052,7 +3512,7 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.4: +elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== @@ -3109,12 +3569,20 @@ end-stream@~0.1.0: dependencies: write-stream "~0.4.3" +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + entities@^4.2.0, entities@^4.4.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -env-paths@^2.2.1: +env-paths@^2.2.0, env-paths@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== @@ -3501,7 +3969,7 @@ ethereum-bloom-filters@^1.0.6: dependencies: js-sha3 "^0.8.0" -ethereum-cryptography@^0.1.3: +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== @@ -3542,6 +4010,27 @@ ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: "@scure/bip32" "1.3.3" "@scure/bip39" "1.2.2" +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: version "7.1.5" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" @@ -3568,7 +4057,7 @@ ethers@^4.0.32: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.0.13, ethers@^5.7.2: +ethers@^5.0.13, ethers@^5.7.1, ethers@^5.7.2: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -3621,6 +4110,14 @@ ethjs-unit@0.1.6: bn.js "4.11.6" number-to-bn "1.7.0" +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -3823,7 +4320,7 @@ flatted@^3.2.9: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== -follow-redirects@^1.15.0, follow-redirects@^1.15.4: +follow-redirects@^1.12.1, follow-redirects@^1.15.0, follow-redirects@^1.15.4: version "1.15.5" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== @@ -3887,6 +4384,16 @@ forwarded@0.2.0: resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3912,6 +4419,15 @@ fs-extra@^4.0.2: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" @@ -4200,7 +4716,7 @@ graceful-fs@4.2.10: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== @@ -4235,6 +4751,61 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hardhat@^2.19.5: + version "2.19.5" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" + integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@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/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + has-bigints@^1.0.1, has-bigints@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" @@ -4416,6 +4987,14 @@ http2-wrapper@^2.1.10: quick-lru "^5.1.1" resolve-alpn "^1.2.0" +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + iconv-lite@0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -4445,6 +5024,11 @@ immediate@3.3.0, immediate@^3.2.3: resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== +immutable@^4.0.0-rc.12: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4458,6 +5042,11 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -4490,6 +5079,13 @@ invert-kv@^1.0.0: resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -4744,16 +5340,16 @@ isomorphic-ws@^4.0.1: resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== -isomorphic-ws@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz#e5529148912ecb9b451b46ed44d53dae1ce04bbf" - integrity sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw== - isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== +js-sdsl@^4.1.4: + version "4.4.2" + resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" + integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== + js-sha256@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.11.0.tgz#256a921d9292f7fe98905face82e367abaca9576" @@ -4902,7 +5498,7 @@ keccak@3.0.2: node-gyp-build "^4.2.0" readable-stream "^3.6.0" -keccak@^3.0.0: +keccak@^3.0.0, keccak@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== @@ -5033,6 +5629,15 @@ level@6.0.1: level-packager "^5.1.0" leveldown "^5.4.0" +level@^8.0.0: + version "8.0.1" + resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" + integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== + dependencies: + abstract-level "^1.0.4" + browser-level "^1.0.1" + classic-level "^1.2.0" + leveldown@5.6.0, leveldown@^5.4.0: version "5.6.0" resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" @@ -5151,7 +5756,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== -lodash@^4.17.14, lodash@^4.17.21, lodash@^4.2.1: +lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21, lodash@^4.2.1: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5215,6 +5820,13 @@ lowercase-keys@^3.0.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -5222,6 +5834,11 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" @@ -5232,6 +5849,11 @@ markdown-table@^1.1.3: resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5258,6 +5880,15 @@ memdown@1.4.1: ltgt "~2.2.0" safe-buffer "~5.1.1" +memory-level@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" + integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== + dependencies: + abstract-level "^1.0.0" + functional-red-black-tree "^1.0.1" + module-error "^1.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -5402,6 +6033,13 @@ mkdirp@^1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + mocha@10.1.0: version "10.1.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" @@ -5429,7 +6067,7 @@ mocha@10.1.0: yargs-parser "20.2.4" yargs-unparser "2.0.0" -mocha@^10.2.0: +mocha@^10.0.0, mocha@^10.2.0: version "10.2.0" resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== @@ -5461,7 +6099,7 @@ mock-fs@^4.1.0: resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== -module-error@^1.0.1: +module-error@^1.0.1, module-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== @@ -5541,6 +6179,11 @@ nanoid@3.3.3: resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== +napi-macros@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" + integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== + napi-macros@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" @@ -5723,6 +6366,11 @@ object.values@^1.1.7: define-properties "^1.2.0" es-abstract "^1.22.1" +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + oboe@2.1.5: version "2.1.5" resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" @@ -5775,6 +6423,11 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + p-cancelable@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" @@ -5834,6 +6487,13 @@ p-locate@^5.0.0: dependencies: p-limit "^3.0.2" +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -5957,7 +6617,7 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== -path-parse@^1.0.7: +path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== @@ -6249,6 +6909,15 @@ promise@^8.0.0: dependencies: asap "~2.0.6" +proper-lockfile@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" + integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== + dependencies: + graceful-fs "^4.2.4" + retry "^0.12.0" + signal-exit "^3.0.2" + proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" @@ -6365,7 +7034,7 @@ raw-body@2.5.1: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@2.5.2: +raw-body@2.5.2, raw-body@^2.4.1: version "2.5.2" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== @@ -6541,7 +7210,7 @@ require-from-string@^1.1.0: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== -require-from-string@^2.0.2: +require-from-string@^2.0.0, require-from-string@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -6590,6 +7259,13 @@ resolve-pkg-maps@^1.0.0: resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + resolve@^1.10.0, resolve@^1.22.2, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" @@ -6626,6 +7302,11 @@ retry@0.13.1: resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== +retry@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" + integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== + reusify@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" @@ -6658,13 +7339,20 @@ ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.2.4: +rlp@^2.2.3, rlp@^2.2.4: version "2.2.7" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== dependencies: bn.js "^5.2.0" +run-parallel-limit@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" + integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== + dependencies: + queue-microtask "^1.2.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -6672,6 +7360,11 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" +rustbn.js@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" + integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== + safe-array-concat@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" @@ -6725,12 +7418,12 @@ secp256k1@4.0.3, secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.3.1: +semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== @@ -6928,6 +7621,21 @@ snake-case@^2.1.0: dependencies: no-case "^2.2.0" +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + solc@^0.4.20: version "0.4.26" resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" @@ -6965,6 +7673,19 @@ solhint@^4.1.1: optionalDependencies: prettier "^2.8.3" +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + spark-md5@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" @@ -7011,6 +7732,13 @@ sshpk@^1.7.0: safer-buffer "^2.0.2" tweetnacl "~0.14.0" +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + statuses@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" @@ -7038,7 +7766,7 @@ string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -7307,6 +8035,13 @@ title-case@^2.1.0: no-case "^2.2.0" upper-case "^1.0.3" +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7385,6 +8120,11 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.1.0, tslib@^2.4.0: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" @@ -7407,11 +8147,21 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" @@ -7429,6 +8179,16 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -7542,6 +8302,13 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici@^5.14.0: + version "5.28.3" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" + integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== + dependencies: + "@fastify/busboy" "^2.0.0" + universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" @@ -7646,7 +8413,7 @@ uuid@2.0.1: resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== -uuid@8.3.2: +uuid@8.3.2, uuid@^8.3.2: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== @@ -7837,29 +8604,6 @@ web3-core@1.10.3: web3-core-requestmanager "1.10.3" web3-utils "1.10.3" -web3-core@^4.3.0, web3-core@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-4.3.2.tgz#f24b11d6a57dee527de8d42c89de2a439f0c4bed" - integrity sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g== - dependencies: - web3-errors "^1.1.4" - web3-eth-accounts "^4.1.0" - web3-eth-iban "^4.0.7" - web3-providers-http "^4.1.0" - web3-providers-ws "^4.0.7" - web3-types "^1.3.1" - web3-utils "^4.1.0" - web3-validator "^2.0.3" - optionalDependencies: - web3-providers-ipc "^4.0.7" - -web3-errors@^1.1.3, web3-errors@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web3-errors/-/web3-errors-1.1.4.tgz#5667a0a5f66fc936e101ef32032ccc1e8ca4d5a1" - integrity sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ== - dependencies: - web3-types "^1.3.1" - web3-eth-abi@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz#53a7a2c95a571e205e27fd9e664df4919483cce1" @@ -7876,17 +8620,6 @@ web3-eth-abi@1.10.3: "@ethersproject/abi" "^5.6.3" web3-utils "1.10.3" -web3-eth-abi@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-4.2.0.tgz#398d415e7783442d06fb7939e40ce3de7a3f04e9" - integrity sha512-x7dUCmk6th+5N63s5kUusoNtsDJKUUQgl9+jECvGTBOTiyHe/V6aOY0120FUjaAGaapOnR7BImQdhqHv6yT2YQ== - dependencies: - abitype "0.7.1" - web3-errors "^1.1.4" - web3-types "^1.3.1" - web3-utils "^4.1.1" - web3-validator "^2.0.4" - web3-eth-accounts@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" @@ -7919,19 +8652,6 @@ web3-eth-accounts@1.10.3: web3-core-method "1.10.3" web3-utils "1.10.3" -web3-eth-accounts@^4.1.0, web3-eth-accounts@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-4.1.1.tgz#55225e5510b961e1cacb4eccc996544998e907fc" - integrity sha512-9JqhRi1YhO1hQOEmmBHgEGsME/B1FHMxpA/AK3vhpvQ8QeP6KbJW+cForTLfPpUbkmPxnRunG4PNNaETNlZfrA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - crc-32 "^1.2.2" - ethereum-cryptography "^2.0.0" - web3-errors "^1.1.4" - web3-types "^1.3.1" - web3-utils "^4.1.1" - web3-validator "^2.0.4" - web3-eth-contract@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz#8e68c7654576773ec3c91903f08e49d0242c503a" @@ -7960,19 +8680,6 @@ web3-eth-contract@1.10.3: web3-eth-abi "1.10.3" web3-utils "1.10.3" -web3-eth-contract@^4.1.2, web3-eth-contract@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-4.2.0.tgz#73f70b19217cd4854211c05846f0c841763b3b29" - integrity sha512-K7bUypsomTs8/Oa0Lgvq5plsSB5afgKJ79NMuXxvC5jfV+AxNrQyKcr5Vd5yEGNqrdQuIPduGQa8DpuY+rMe1g== - dependencies: - web3-core "^4.3.2" - web3-errors "^1.1.4" - web3-eth "^4.4.0" - web3-eth-abi "^4.2.0" - web3-types "^1.3.1" - web3-utils "^4.1.1" - web3-validator "^2.0.4" - web3-eth-ens@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz#96a676524e0b580c87913f557a13ed810cf91cd9" @@ -8001,21 +8708,6 @@ web3-eth-ens@1.10.3: web3-eth-contract "1.10.3" web3-utils "1.10.3" -web3-eth-ens@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-4.0.8.tgz#f4e0a018ce6cc69e37007ee92063867feb5994f0" - integrity sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw== - dependencies: - "@adraffy/ens-normalize" "^1.8.8" - web3-core "^4.3.0" - web3-errors "^1.1.3" - web3-eth "^4.3.1" - web3-eth-contract "^4.1.2" - web3-net "^4.0.7" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-validator "^2.0.3" - web3-eth-iban@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" @@ -8032,16 +8724,6 @@ web3-eth-iban@1.10.3: bn.js "^5.2.1" web3-utils "1.10.3" -web3-eth-iban@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz#ee504f845d7b6315f0be78fcf070ccd5d38e4aaf" - integrity sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ== - dependencies: - web3-errors "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-validator "^2.0.3" - web3-eth-personal@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz#94d525f7a29050a0c2a12032df150ac5ea633071" @@ -8066,18 +8748,6 @@ web3-eth-personal@1.10.3: web3-net "1.10.3" web3-utils "1.10.3" -web3-eth-personal@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-4.0.8.tgz#b51628c560de550ca8b354fa784f9556aae6065c" - integrity sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw== - dependencies: - web3-core "^4.3.0" - web3-eth "^4.3.1" - web3-rpc-methods "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-validator "^2.0.3" - web3-eth@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.0.tgz#38b905e2759697c9624ab080cfcf4e6c60b3a6cf" @@ -8114,23 +8784,6 @@ web3-eth@1.10.3: web3-net "1.10.3" web3-utils "1.10.3" -web3-eth@^4.3.1, web3-eth@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-4.4.0.tgz#755c34a769109836d122a53b33814d63f9ec5a65" - integrity sha512-HswKdzF44wUrciRAtEJaml9O7rDYDxElHmFs+27WcO3nel2zku+n0xs4e2ZAehfrCZ+05/y7TgnOZnaDU8Fb/A== - dependencies: - setimmediate "^1.0.5" - web3-core "^4.3.2" - web3-errors "^1.1.4" - web3-eth-abi "^4.2.0" - web3-eth-accounts "^4.1.1" - web3-net "^4.0.7" - web3-providers-ws "^4.0.7" - web3-rpc-methods "^1.1.4" - web3-types "^1.3.1" - web3-utils "^4.1.1" - web3-validator "^2.0.4" - web3-net@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.0.tgz#be53e7f5dafd55e7c9013d49c505448b92c9c97b" @@ -8149,16 +8802,6 @@ web3-net@1.10.3: web3-core-method "1.10.3" web3-utils "1.10.3" -web3-net@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-4.0.7.tgz#ed2c1bd700cf94be93a6dbd8bd8aa413d8681942" - integrity sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow== - dependencies: - web3-core "^4.3.0" - web3-rpc-methods "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-providers-http@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" @@ -8179,16 +8822,6 @@ web3-providers-http@1.10.3: es6-promise "^4.2.8" web3-core-helpers "1.10.3" -web3-providers-http@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-4.1.0.tgz#8d7afda67d1d8542ca85b30f60a3d1fe1993b561" - integrity sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg== - dependencies: - cross-fetch "^4.0.0" - web3-errors "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-providers-ipc@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" @@ -8205,15 +8838,6 @@ web3-providers-ipc@1.10.3: oboe "2.1.5" web3-core-helpers "1.10.3" -web3-providers-ipc@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz#9ec4c8565053af005a5170ba80cddeb40ff3e3d3" - integrity sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g== - dependencies: - web3-errors "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - web3-providers-ws@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" @@ -8232,27 +8856,6 @@ web3-providers-ws@1.10.3: web3-core-helpers "1.10.3" websocket "^1.0.32" -web3-providers-ws@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-4.0.7.tgz#7a78a0dcf077e0e802da524fbb37d080b356c14b" - integrity sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w== - dependencies: - "@types/ws" "8.5.3" - isomorphic-ws "^5.0.0" - web3-errors "^1.1.3" - web3-types "^1.3.0" - web3-utils "^4.0.7" - ws "^8.8.1" - -web3-rpc-methods@^1.1.3, web3-rpc-methods@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/web3-rpc-methods/-/web3-rpc-methods-1.1.4.tgz#0b478e38231d3f3260ac504307c6dc4059af6fda" - integrity sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ== - dependencies: - web3-core "^4.3.2" - web3-types "^1.3.1" - web3-validator "^2.0.3" - web3-shh@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.0.tgz#c2979b87e0f67a7fef2ce9ee853bd7bfbe9b79a8" @@ -8273,11 +8876,6 @@ web3-shh@1.10.3: web3-core-subscriptions "1.10.3" web3-net "1.10.3" -web3-types@^1.3.0, web3-types@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/web3-types/-/web3-types-1.3.1.tgz#cf6148ad46b68c5c89714613380b270d31e297be" - integrity sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ== - web3-utils@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" @@ -8305,27 +8903,6 @@ web3-utils@1.10.3, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: randombytes "^2.1.0" utf8 "3.0.0" -web3-utils@^4.0.7, web3-utils@^4.1.0, web3-utils@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-4.1.1.tgz#88c0fe404abc3f038b7318f3a31141676cefeb63" - integrity sha512-5AOmLKH6QuwHunLCNdVFlPSDE+T88bJYRQP+HWYoKNbI4STALCYQiJvj7LXE+Ed6cPfqANaK/LwKNbMPLCPFwA== - dependencies: - ethereum-cryptography "^2.0.0" - web3-errors "^1.1.4" - web3-types "^1.3.1" - web3-validator "^2.0.4" - -web3-validator@^2.0.3, web3-validator@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/web3-validator/-/web3-validator-2.0.4.tgz#66f34c94f21a3c94d0dc2a2d30deb8a379825d38" - integrity sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA== - dependencies: - ethereum-cryptography "^2.0.0" - util "^0.12.5" - web3-errors "^1.1.4" - web3-types "^1.3.1" - zod "^3.21.4" - web3@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" @@ -8352,28 +8929,6 @@ web3@^1.2.5: web3-shh "1.10.3" web3-utils "1.10.3" -web3@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/web3/-/web3-4.4.0.tgz#83e5906675608adf9a14841f257e441c9154a8c7" - integrity sha512-WcFA3RgE+cyM96MHLPs5Ec155nkYQuwhjk3JIhxcy6J1QrZK2zvKGzTQCCYHe3JhraduNTMbWy+EeNNGGji9+Q== - dependencies: - web3-core "^4.3.2" - web3-errors "^1.1.4" - web3-eth "^4.4.0" - web3-eth-abi "^4.2.0" - web3-eth-accounts "^4.1.1" - web3-eth-contract "^4.2.0" - web3-eth-ens "^4.0.8" - web3-eth-iban "^4.0.7" - web3-eth-personal "^4.0.8" - web3-net "^4.0.7" - web3-providers-http "^4.1.0" - web3-providers-ws "^4.0.7" - web3-rpc-methods "^1.1.4" - web3-types "^1.3.1" - web3-utils "^4.1.1" - web3-validator "^2.0.4" - webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -8438,6 +8993,13 @@ which@^2.0.1: dependencies: isexe "^2.0.0" +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" @@ -8496,16 +9058,11 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.2.0: +ws@^7.2.0, ws@^7.4.6: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== -ws@^8.8.1: - version "8.16.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.16.0.tgz#d1cd774f36fbc07165066a60e40323eab6446fd4" - integrity sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ== - xhr-request-promise@^0.1.2: version "0.1.3" resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" @@ -8569,7 +9126,7 @@ yaeti@^0.0.6: resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== -yallist@^3.0.0, yallist@^3.1.1: +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -8644,8 +9201,3 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== - -zod@^3.21.4: - version "3.22.4" - resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" - integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg== From 331ec752a5069bb1edf5b6fe0ad12167cca45548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 8 Feb 2024 10:41:55 +0100 Subject: [PATCH 101/149] fix: remove sourcePath from truffle artifacts upon package prepare --- scripts/prepare.js | 4 ++++ src/index.js | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/prepare.js b/scripts/prepare.js index d8f1872cb..f8e36ecc0 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -9,3 +9,7 @@ if (fs.existsSync("./artifacts")) { exec(`find ./artifacts -name '*.dbg.json' -exec rm -r {} \;`) } } + +if (fs.existsSync("./build/contracts")) { + exec(`sed -i -- "/\bsourcePath\b/d" build/contracts/*.json`) +} diff --git a/src/index.js b/src/index.js index ad434a635..ea9eb1817 100644 --- a/src/index.js +++ b/src/index.js @@ -44,10 +44,10 @@ module.exports = { utils, } -function supportedNetworks() { +function supportedNetworks(ecosystem) { return Object .entries(addresses) - .filter(value => value[0].indexOf(":") > -1) + .filter(value => value[0].indexOf(":") > -1 && (!ecosystem || value[0].startsWith(ecosystem))) .map(value => value[0]) .sort() } From 74f665952b01514068476ed18a3c04561cbfb6d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 12 Feb 2024 15:23:55 +0100 Subject: [PATCH 102/149] chore: deprecate WitnetRandomness --- contracts/apps/WitnetRandomness.sol | 481 ---------------------------- migrations/scripts/5_apps.js | 19 +- 2 files changed, 1 insertion(+), 499 deletions(-) delete mode 100644 contracts/apps/WitnetRandomness.sol diff --git a/contracts/apps/WitnetRandomness.sol b/contracts/apps/WitnetRandomness.sol deleted file mode 100644 index 05cdff2f0..000000000 --- a/contracts/apps/WitnetRandomness.sol +++ /dev/null @@ -1,481 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "./UsingWitnet.sol"; -import "../WitnetRequest.sol"; -import "../core/WitnetUpgradableBase.sol"; -import "../interfaces/IWitnetRandomness.sol"; -import "../interfaces/IWitnetRandomnessAdmin.sol"; -import "../patterns/Clonable.sol"; -import "../patterns/Ownable2Step.sol"; - -/// @title WitnetRandomness: Randomness oracle reliant on the Witnet Solidity Bridge. -/// @author Guillermo Díaz - -contract WitnetRandomness - is - IWitnetRandomness, - IWitnetRandomnessAdmin, - Clonable, - Ownable2Step, - UsingWitnet -{ - using Witnet for Witnet.Result; - using WitnetV2 for bytes32; - using WitnetV2 for WitnetV2.RadonSLA; - - bytes4 public immutable specs = type(IWitnetRandomness).interfaceId; - uint256 public override latestRandomizeBlock; - WitnetRequest public immutable override witnetRandomnessRequest; - - bytes32 internal immutable __witnetRandomnessRadHash; - bytes32 internal __witnetRandomnessPackedSLA; - - mapping (uint256 => RandomizeData) internal __randomize_; - struct RandomizeData { - uint256 prevBlock; - uint256 nextBlock; - uint256 witnetQueryId; - } - - constructor(address _operator, WitnetRequestBoard _wrb) - Ownable(_operator) - UsingWitnet(_wrb) - { - assert(_wrb.specs() == type(IWitnetRequestBoard).interfaceId); - WitnetRequestFactory _factory = witnet().factory(); - WitnetBytecodes _registry = witnet().registry(); - { - // Build own Witnet Randomness Request: - bytes32[] memory _retrievals = new bytes32[](1); - _retrievals[0] = _registry.verifyRadonRetrieval( - Witnet.RadonDataRequestMethods.Rng, - "", // no url - "", // no body - new string[2][](0), // no headers - hex"80" // no retrieval script - ); - Witnet.RadonFilter[] memory _filters; - bytes32 _aggregator = _registry.verifyRadonReducer(Witnet.RadonReducer({ - opcode: Witnet.RadonReducerOpcodes.Mode, - filters: _filters // no filters - })); - bytes32 _tally = _registry.verifyRadonReducer(Witnet.RadonReducer({ - opcode: Witnet.RadonReducerOpcodes.ConcatenateAndHash, - filters: _filters // no filters - })); - WitnetRequestTemplate _template = WitnetRequestTemplate(_factory.buildRequestTemplate( - _retrievals, - _aggregator, - _tally, - 32 // 256 bits of pure entropy ;-) - )); - witnetRandomnessRequest = WitnetRequest(_template.buildRequest(new string[][](_retrievals.length))); - __witnetRandomnessRadHash = witnetRandomnessRequest.radHash(); - } - __initializeWitnetRandomnessSLA(); - } - - /// Deploys and returns the address of a minimal proxy clone that replicates contract - /// behaviour while using its own EVM storage. - /// @dev This function should always provide a new address, no matter how many times - /// @dev is actually called from the same `msg.sender`. - function clone() - virtual public - wasInitialized - returns (WitnetRandomness) - { - return __afterClone(_clone()); - } - - /// Deploys and returns the address of a minimal proxy clone that replicates contract - /// behaviour while using its own EVM storage. - /// @dev This function uses the CREATE2 opcode and a `_salt` to deterministically deploy - /// @dev the clone. Using the same `_salt` multiple time will revert, since - /// @dev no contract can be deployed more than once at the same address. - function cloneDeterministic(bytes32 _salt) - virtual public - wasInitialized - returns (WitnetRandomness) - { - return __afterClone(_cloneDeterministic(_salt)); - } - - /// @notice Initializes a cloned instance. - /// @dev Every cloned instance can only get initialized once. - function initializeClone(bytes memory _initData) - virtual external - initializer // => ensure a cloned instance can only be initialized once - onlyDelegateCalls // => this method can only be called upon cloned instances - { - __initialize(_initData); - } - - - /// =============================================================================================================== - /// --- 'IWitnetRandomnessAdmin' implementation ------------------------------------------------------------------- - - function owner() - virtual override (IWitnetRandomnessAdmin, Ownable) - public view - returns (address) - { - return Ownable.owner(); - } - - function acceptOwnership() - virtual override (IWitnetRandomnessAdmin, Ownable2Step) - public - { - Ownable2Step.acceptOwnership(); - } - - function pendingOwner() - virtual override (IWitnetRandomnessAdmin, Ownable2Step) - public view - returns (address) - { - return Ownable2Step.pendingOwner(); - } - - function transferOwnership(address _newOwner) - virtual override (IWitnetRandomnessAdmin, Ownable2Step) - public - onlyOwner - { - Ownable.transferOwnership(_newOwner); - } - - function settleWitnetRandomnessSLA(WitnetV2.RadonSLA calldata sla) - virtual override - public - onlyOwner - returns (bytes32) - { - require(sla.isValid(), "WitnetRandomness: invalid SLA"); - return __settleWitnetRandomnessSLA(sla); - } - - - /// =============================================================================================================== - /// --- 'IWitnetRandomness' implementation ------------------------------------------------------------------------- - - /// Returns amount of wei required to be paid as a fee when requesting randomization with a - /// transaction gas price as the one given. - function estimateRandomizeFee(uint256 _gasPrice) - public view - virtual override - returns (uint256) - { - return __witnet.estimateBaseFee(_gasPrice, 35); - } - - /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. - /// @dev Returns zero values if no randomness request was actually posted within a given block. - /// @param _block Block number whose randomness request is being queried for. - /// @return _id Unique request identifier as provided by the WRB. - /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. - /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. - function getRandomizeData(uint256 _block) - external view - virtual override - returns ( - uint256 _id, - uint256 _prevBlock, - uint256 _nextBlock - ) - { - RandomizeData storage _data = __randomize_[_block]; - _id = _data.witnetQueryId; - _prevBlock = _data.prevBlock; - _nextBlock = _data.nextBlock; - } - - /// Retrieves the randomness generated upon solving a request that was posted within a given block, - /// if any, or to the _first_ request posted after that block, otherwise. Should the intended - /// request happen to be finalized with errors on the Witnet oracle network side, this function - /// will recursively try to return randomness from the next non-faulty randomization request found - /// in storage, if any. - /// @dev Fails if: - /// @dev i. no `randomize()` was not called in either the given block, or afterwards. - /// @dev ii. a request posted in/after given block does exist, but no result has been provided yet. - /// @dev iii. all requests in/after the given block were solved with errors. - /// @param _block Block number from which the search will start. - function getRandomnessAfter(uint256 _block) - public view - virtual override - returns (bytes32) - { - if (__randomize_[_block].witnetQueryId == 0) { - _block = getRandomnessNextBlock(_block); - } - uint256 _queryId = __randomize_[_block].witnetQueryId; - require(_queryId != 0, "WitnetRandomness: not randomized"); - WitnetV2.ResultStatus _resultStatus = witnet().getQueryResultStatus(_queryId); - if (_resultStatus == WitnetV2.ResultStatus.Ready) { - return witnet().getQueryResult(_queryId).asBytes32(); - } else if (_resultStatus == WitnetV2.ResultStatus.Error) { - uint256 _nextRandomizeBlock = __randomize_[_block].nextBlock; - require(_nextRandomizeBlock != 0, "WitnetRandomness: faulty randomize"); - return getRandomnessAfter(_nextRandomizeBlock); - } else { - revert("WitnetRandomness: pending randomize"); - } - } - - /// Tells what is the number of the next block in which a randomization request was posted after the given one. - /// @param _block Block number from which the search will start. - /// @return Number of the first block found after the given one, or `0` otherwise. - function getRandomnessNextBlock(uint256 _block) - public view - virtual override - returns (uint256) - { - return ((__randomize_[_block].witnetQueryId != 0) - ? __randomize_[_block].nextBlock - // start search from the latest block - : _searchNextBlock(_block, latestRandomizeBlock) - ); - } - - /// Gets previous block in which a randomness request was posted before the given one. - /// @param _block Block number from which the search will start. Cannot be zero. - /// @return First block found before the given one, or `0` otherwise. - function getRandomnessPrevBlock(uint256 _block) - public view - virtual override - returns (uint256) - { - assert(_block > 0); - uint256 _latest = latestRandomizeBlock; - return ((_block > _latest) - ? _latest - // start search from the latest block - : _searchPrevBlock(_block, __randomize_[_latest].prevBlock) - ); - } - - /// Returns `true` only when the randomness request that got posted within given block was already - /// reported back from the Witnet oracle, either successfully or with an error of any kind. - function isRandomized(uint256 _block) - public view - virtual override - returns (bool) - { - RandomizeData storage _data = __randomize_[_block]; - WitnetV2.QueryStatus _qstatus = witnet().getQueryStatus(_data.witnetQueryId); - return ( - _data.witnetQueryId != 0 - && (_qstatus == WitnetV2.QueryStatus.Finalized) - ); - } - - /// Generates a pseudo-random number uniformly distributed within the range [0 .. _range), by using - /// the given `_nonce` value and the randomness returned by `getRandomnessAfter(_block)`. - /// @dev Fails under same conditions as `getRandomnessAfter(uint256)` may do. - /// @param _range Range within which the uniformly-distributed random number will be generated. - /// @param _nonce Nonce value enabling multiple random numbers from the same randomness value. - /// @param _block Block number from which the search will start. - function random(uint32 _range, uint256 _nonce, uint256 _block) - external view - virtual override - returns (uint32) - { - return random( - _range, - _nonce, - keccak256( - abi.encode( - msg.sender, - getRandomnessAfter(_block) - ) - ) - ); - } - - /// Generates a pseudo-random number uniformly distributed within the range [0 .. _range), by using - /// the given `_nonce` value and the given `_seed` as a source of entropy. - /// @param _range Range within which the uniformly-distributed random number will be generated. - /// @param _nonce Nonce value enabling multiple random numbers from the same randomness value. - /// @param _seed Seed value used as entropy source. - function random(uint32 _range, uint256 _nonce, bytes32 _seed) - public pure - virtual override - returns (uint32) - { - uint8 _flagBits = uint8(255 - _msbDeBruijn32(_range)); - uint256 _number = uint256( - keccak256( - abi.encode(_seed, _nonce) - ) - ) & uint256(2 ** _flagBits - 1); - return uint32((_number * _range) >> _flagBits); - } - - /// Requests the Witnet oracle to generate an EVM-agnostic and trustless source of randomness. - /// Only one randomness request per block will be actually posted to the WRB. Should there - /// already be a posted request within current block, it will try to upgrade Witnet fee of current's - /// block randomness request according to current gas price. In both cases, all unused funds shall - /// be transfered back to the tx sender. - /// @return _usedFunds Amount of funds actually used from those provided by the tx sender. - function randomize() - external payable - virtual override - returns (uint256) - { - if (latestRandomizeBlock < block.number) { - // Post the Witnet Randomness request: - uint _queryId = __witnet.postRequest{value: msg.value}( - __witnetRandomnessRadHash, - __witnetRandomnessPackedSLA.toRadonSLA() - ); - // Keep Randomize data in storage: - RandomizeData storage __data = __randomize_[block.number]; - __data.witnetQueryId = _queryId; - // Update block links: - uint256 _prevBlock = latestRandomizeBlock; - __data.prevBlock = _prevBlock; - __randomize_[_prevBlock].nextBlock = block.number; - latestRandomizeBlock = block.number; - // Throw event: - emit Randomized( - msg.sender, - _prevBlock, - _queryId, - __witnetRandomnessRadHash - ); - } else { - return upgradeRandomizeFee(block.number); - } - return msg.value; - } - - /// Increases Witnet fee related to a pending-to-be-solved randomness request, as much as it - /// may be required in proportion to how much bigger the current tx gas price is with respect the - /// highest gas price that was paid in either previous fee upgrades, or when the given randomness - /// request was posted. All unused funds shall be transferred back to the tx sender. - /// @return _usedFunds Amount of dunds actually used from those provided by the tx sender. - function upgradeRandomizeFee(uint256 _block) - public payable - virtual override - returns (uint256) - { - RandomizeData storage _data = __randomize_[_block]; - if (_data.witnetQueryId != 0) { - __witnet.upgradeQueryReward{value: msg.value}(_data.witnetQueryId); - } - return msg.value; - } - - /// @notice Result the WitnetRequestBoard address upon which this contract relies on. - function witnet() - virtual override (IWitnetRandomness, UsingWitnet) - public view returns (WitnetRequestBoard) - { - return UsingWitnet.witnet(); - } - - /// @notice Returns SLA parameters that are being used every time there's a new randomness request. - function witnetRandomnessSLA() - virtual override - external view - returns (WitnetV2.RadonSLA memory) - { - return __witnetRandomnessPackedSLA.toRadonSLA(); - } - - - // ================================================================================================================ - // --- 'Clonable' extension --------------------------------------------------------------------------------------- - - /// @notice Tells whether this instance has been initialized. - function initialized() - override - public view - returns (bool) - { - return address(witnetRandomnessRequest) != address(0); - } - - - // ================================================================================================================ - // --- INTERNAL FUNCTIONS ----------------------------------------------------------------------------------------- - - /// @dev Returns index of the Most Significant Bit of the given number, applying De Bruijn O(1) algorithm. - function _msbDeBruijn32(uint32 _v) - internal pure - returns (uint8) - { - uint8[32] memory _bitPosition = [ - 0, 9, 1, 10, 13, 21, 2, 29, - 11, 14, 16, 18, 22, 25, 3, 30, - 8, 12, 20, 28, 15, 17, 24, 7, - 19, 27, 23, 6, 26, 5, 4, 31 - ]; - _v |= _v >> 1; - _v |= _v >> 2; - _v |= _v >> 4; - _v |= _v >> 8; - _v |= _v >> 16; - return _bitPosition[ - uint32(_v * uint256(0x07c4acdd)) >> 27 - ]; - } - - /// @dev Recursively searches for the number of the first block after the given one in which a Witnet randomization request was posted. - /// @dev Returns 0 if none found. - function _searchNextBlock(uint256 _target, uint256 _latest) internal view returns (uint256) { - return ((_target >= _latest) - ? __randomize_[_latest].nextBlock - : _searchNextBlock(_target, __randomize_[_latest].prevBlock) - ); - } - - /// @dev Recursively searches for the number of the first block before the given one in which a Witnet randomization request was posted. - /// @dev Returns 0 if none found. - - function _searchPrevBlock(uint256 _target, uint256 _latest) internal view returns (uint256) { - return ((_target > _latest) - ? _latest - : _searchPrevBlock(_target, __randomize_[_latest].prevBlock) - ); - } - - /// @dev Common steps for both deterministic and non-deterministic cloning. - function __afterClone(address _instance) - virtual internal - returns (WitnetRandomness) - { - WitnetRandomness(_instance).initializeClone(hex""); - return WitnetRandomness(_instance); - } - - /// @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 internal - { - // settle ownership: - _transferOwnership(msg.sender); - // initialize default Witnet SLA parameters used for every randomness request; - __initializeWitnetRandomnessSLA(); - } - - function __initializeWitnetRandomnessSLA() virtual internal { - __settleWitnetRandomnessSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 10, - witnessingWitTotalReward: 10 ** 9 - })); - } - - function __settleWitnetRandomnessSLA(WitnetV2.RadonSLA memory sla) - internal - returns (bytes32 _packed) - { - _packed = sla.toBytes32(); - __witnetRandomnessPackedSLA = _packed; - } - -} diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 8eab32d32..48493598f 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -22,24 +22,7 @@ module.exports = async function (_, network, [,,, from]) { intrinsics: { types: ["address", "address"], values: [ - /* _operator */ from, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ], - }, - }) - // Deploy the WitnetRandomness oracle, if required - await deploy({ - addresses, - from, - targets, - key: targets.WitnetRandomness, - libs: specs.WitnetRandomness?.libs, - vanity: specs.WitnetRandomness?.vanity || 0, - immutables: specs.WitnetRandomness?.immutables, - intrinsics: { - types: ["address", "address"], - values: [ - /* _operator */ from, + /* _operator */ master, /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), ], }, From b64c1e635be5cdef38af2c9983a09d4f6d0c161f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 12 Feb 2024 15:24:41 +0100 Subject: [PATCH 103/149] chore: refactor witnet.addresses file --- migrations/scripts/1_deployer.js | 25 +- migrations/scripts/2_libs.js | 18 +- migrations/scripts/3_core.js | 39 +- migrations/scripts/4_proxies.js | 30 +- migrations/scripts/5_apps.js | 34 +- migrations/witnet.addresses.json | 723 +------------------------------ settings/specs.js | 8 +- src/utils/index.js | 16 +- 8 files changed, 111 insertions(+), 782 deletions(-) diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index 757c0215c..dff93b034 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -2,23 +2,26 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") -module.exports = async function (deployer, network, [, from,, master]) { - const addresses = await utils.readAddresses(network) +module.exports = async function (deployer, network, [,,, master]) { + const addresses = await utils.readAddresses() + if (!addresses[network]) addresses[network] = {}; - let factory - if (utils.isNullAddress(addresses?.WitnetDeployer)) { + const factoryAddr = addresses[network]?.WitnetDeployer || addresses?.default?.WitnetDeployer || "" + if ( + utils.isNullAddress(factoryAddr) + || (await web3.eth.getCode(factoryAddr)).length < 3 + ) { await deployer.deploy(WitnetDeployer, { from: master }) - factory = await WitnetDeployer.deployed() - addresses.WitnetDeployer = factory.address + const factory = await WitnetDeployer.deployed() + addresses[network].WitnetDeployer = factory.address + if (!utils.isDryRun(network)) { + await utils.saveAddresses(addresses) + } } else { - factory = await WitnetDeployer.at(addresses.WitnetDeployer) + const factory = await WitnetDeployer.at(factoryAddr) WitnetDeployer.address = factory.address utils.traceHeader("Skipped 'WitnetDeployer'") console.info(" > Contract address:", factory.address) console.info() } - - if (!utils.isDryRun(network)) { - await utils.saveAddresses(network, addresses) - } } diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 6c32004c3..e5b5b13b0 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,7 +4,8 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const addresses = await utils.readAddresses(network) + const addresses = await utils.readAddresses() + if (!addresses[network]) addresses[network] = {}; const targets = settings.getArtifacts(network) const libs = [ @@ -17,7 +18,10 @@ module.exports = async function (_, network, [, from]) { for (const index in libs) { const key = libs[index] const artifact = artifacts.require(key) - if (utils.isNullAddress(addresses[key])) { + if ( + utils.isNullAddress(addresses[network][key]) + || (await web3.eth.getCode(addresses[network][key])).length < 3 + ) { utils.traceHeader(`Deploying '${key}'...`) const libInitCode = artifact.toJSON().bytecode const libAddr = await deployer.determineAddr.call(libInitCode, "0x0", { from }) @@ -26,20 +30,20 @@ module.exports = async function (_, network, [, from]) { const tx = await deployer.deploy(libInitCode, "0x0", { from }) utils.traceTx(tx) if ((await web3.eth.getCode(libAddr)).length > 3) { - addresses[key] = libAddr + addresses[network][key] = libAddr } else { console.info(`Error: Library was not deployed on expected address: ${libAddr}`) process.exit(1) } + if (!utils.isDryRun(network)) { + await utils.saveAddresses(addresses) + } } else { utils.traceHeader(`Skipped '${key}'`) } - artifact.address = addresses[key] + 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() - if (!utils.isDryRun(network)) { - await utils.saveAddresses(network, addresses) - } } } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 76f5b0068..bbc26a1ed 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -10,16 +10,12 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const addresses = await utils.readAddresses(network) const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) // Deploy/upgrade WitnetBytecodes target implementation, if required - await deploy({ - addresses, - from, - targets, + await deploy({ network, from, targets, key: targets.WitnetBytecodes, libs: specs.WitnetBytecodes.libs, immutables: specs.WitnetBytecodes.immutables, @@ -33,10 +29,7 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestFactory target implementation, if required - await deploy({ - addresses, - from, - targets, + await deploy({ network, from, targets, key: targets.WitnetRequestFactory, libs: specs.WitnetRequestFactory.libs, immutables: specs.WitnetRequestFactory.immutables, @@ -52,10 +45,7 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestBoard target implementation, if required - await deploy({ - addresses, - from, - targets, + await deploy({ network, from, targets, key: targets.WitnetRequestBoard, libs: specs.WitnetRequestBoard.libs, immutables: specs.WitnetRequestBoard.immutables, @@ -70,16 +60,19 @@ module.exports = async function (_, network, [, from]) { }, }) - // save addresses file if required - if (!utils.isDryRun(network)) { - await utils.saveAddresses(network, addresses) - } } async function deploy (specs) { - const { addresses, from, key, libs, intrinsics, immutables, targets } = specs + const { from, key, libs, intrinsics, immutables, network, targets } = specs + + const addresses = await utils.readAddresses() + if (!addresses[network]) addresses[network] = {}; + const contract = artifacts.require(key) - if (utils.isNullAddress(addresses[key])) { + if ( + utils.isNullAddress(addresses[network][key]) + || (await web3.eth.getCode(addresses[network][key])).length < 3 + ) { utils.traceHeader(`Deploying '${key}'...`) console.info(" ", "> account: ", from) console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") @@ -103,15 +96,19 @@ async function deploy (specs) { const tx = await deployer.deploy(coreInitCode, "0x0", { from }) utils.traceTx(tx) if ((await web3.eth.getCode(coreAddr)).length > 3) { - addresses[key] = coreAddr + 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.saveAddresses(addresses) + } } else { utils.traceHeader(`Skipped '${key}'`) } - contract.address = addresses[key] + contract.address = addresses[network][key] console.info(" ", "> contract address: ", contract.address) console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(contract.address))) console.info() diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 35b588bdd..7daf6f244 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -27,35 +27,32 @@ module.exports = async function (_, network, [, from, reporter]) { // Deploy/upgrade singleton proxies, if required for (const index in singletons) { - await deploy({ - addresses, - from, - specs, - targets, + await deploy({ network, from, specs, targets, key: singletons[index], }) - if (!utils.isDryRun(network)) { - await utils.saveAddresses(network, addresses) - } } } async function deploy (target) { - const { addresses, from, key, specs, targets } = target - + const { from, key, network, specs, targets } = target + + const addresses = await utils.readAddresses(network) + 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" - if (utils.isNullAddress(addresses[key])) { + 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() - const proxyAddr = await deployer.determineProxyAddr.call(proxySalt, { from }) + 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) { @@ -81,13 +78,16 @@ async function deploy (target) { } } if ((await web3.eth.getCode(proxyAddr)).length > 3) { - addresses[key] = proxyAddr + addresses[network][key] = proxyAddr } else { console.info(`Error: Contract was not deployed on expected address: ${proxyAddr}`) process.exit(1) } + if (!utils.isDryRun(network)) { + await utils.saveAddresses(addresses) + } } else { - const oldAddr = await getProxyImplementation(from, addresses[key]) + const oldAddr = await getProxyImplementation(from, proxyAddr) const oldImpl = await artifacts.require(targets[key]).at(oldAddr) const newImpl = await artifacts.require(targets[key]).deployed() if (oldAddr !== newImpl.address) { @@ -113,7 +113,7 @@ async function deploy (target) { utils.traceHeader(`Skipped '${key}'`) } } - proxy.address = addresses[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))) diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 48493598f..7cf615a3d 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -4,18 +4,15 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") -module.exports = async function (_, network, [,,, from]) { - const addresses = await utils.readAddresses(network) +module.exports = async function (_, network, [, from,, master]) { const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) // Deploy the WitnetPriceFeeds oracle, if required - await deploy({ - addresses, - from, - targets, + await deploy({ network, from, targets, key: targets.WitnetPriceFeeds, + gas: specs.WitnetPriceFees?.gas || 6000000, libs: specs.WitnetPriceFeeds.libs, vanity: specs.WitnetPriceFeeds?.vanity || 0, immutables: specs.WitnetPriceFeeds.immutables, @@ -28,17 +25,19 @@ module.exports = async function (_, network, [,,, from]) { }, }) - // save addresses file if required - if (!utils.isDryRun(network)) { - await utils.saveAddresses(network, addresses) - } } async function deploy (specs) { - const { addresses, from, key, libs, intrinsics, immutables, targets, vanity } = specs + const { from, gas, key, libs, intrinsics, immutables, network, targets, vanity } = specs + + const addresses = await utils.readAddresses() + if (!addresses[network]) addresses[network] = {}; + const artifact = artifacts.require(key) const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" - if (utils.isNullAddress(addresses[key])) { + + let dappAddr = addresses[network][key] || addresses?.default[key] || "" + if (utils.isNullAddress(dappAddr) || (await web3.eth.getCode(dappAddr)).length < 3) { utils.traceHeader(`Deploying '${key}'...`) const deployer = await WitnetDeployer.deployed() let { types, values } = intrinsics @@ -59,19 +58,24 @@ async function deploy (specs) { const dappAddr = await deployer.determineAddr.call(dappInitCode, salt, { from }) console.info(" ", "> account: ", from) console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const tx = await deployer.deploy(dappInitCode, salt, { from }) + const tx = await deployer.deploy(dappInitCode, salt, { gas, from }) utils.traceTx(tx) if ((await web3.eth.getCode(dappAddr)).length > 3) { - addresses[key] = dappAddr + addresses[network][key] = dappAddr } else { console.info(`Contract was not deployed on expected address: ${dappAddr}`) console.log(tx.receipt) process.exit(1) } + // save addresses file if required + console.log(addresses) + if (!utils.isDryRun(network)) { + await utils.saveAddresses(addresses) + } } else { utils.traceHeader(`Skipped '${key}'`) } - artifact.address = addresses[key] + artifact.address = dappAddr console.info(" ", "> contract address: ", artifact.address) console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) console.info() diff --git a/migrations/witnet.addresses.json b/migrations/witnet.addresses.json index c976a5d67..93f402465 100644 --- a/migrations/witnet.addresses.json +++ b/migrations/witnet.addresses.json @@ -1,710 +1,25 @@ { "default": { - "Create2Factory": "0xDe312a6f7fA35320E8DD109c8ea42e82806DC45b", - "WitnetBytecodes": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceFeeds": "0x9999999d139bdBFbF25923ba39F63bBFc7593400", - "WitnetRandomness": "0x012345000Db5417269d8c70B0142Ae3eF36d7f3e", - "WitnetRequestBoard": "0x777777772C24e6CD34B464D1d71616C444254537", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63" - }, - "arbitrum:goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xAafb2D27E2E0f83dcE501a2879aaD710ec377403", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xa6a6b2cBE9Ce5B8fF94729F1eC402efc5042AbBF", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", - "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", - "WitnetRandomnessImplementationV061": "0xB0C5d40A7658b2ab28360aFa6eB5bAeb2fFe86c3", - "WitnetRequestBoardImplementation": "0x7ab66AB288A143D4e07Aff9b729165bFb71DB73a", - "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2", - "WitnetPriceFeedsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "arbitrum:one": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetPriceRouter": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetRequestRandomness": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - }, - "avalanche:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0x99Af0CF37d1C6b9Bdfe33cc0A89C00D97D3c42F4", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", - "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRandomnessImplementationV061": "0xD47fc24C99fD94f33bD2f33FE373b1447bB10724", - "WitnetRequestBoardImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "avalanche:mainnet": { - "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetPriceRouter": "0xBaaF31F4AAc5ab5334b6E239a83bf4E855C55ea7", - "WitnetRandomness": "0xa4A73a2A32320282a4d7dDe6a7467AeFA3B7950F", - "WitnetRequestBoard": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079" - }, - "boba:bnb:testnet": { - "WitnetProxy": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetPriceRouter": "0x8D20457d968c937b7cb65be6B8cC766613fBcF28", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetErrorsLib": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x5c1dD29563203883A5D5C3136783D3119B2C4e57", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", - "WitnetRandomnessImplementation": "0x08a6a53B8bCE95677fFA85813C32Bb8228cd114c", - "WitnetRequestBoardImplementation": "0x276Da4D5720EFaD1fBE417d27BD838707e61ba8C", - "WitnetRequestFactoryImplementation": "0xce66333c9D7BE37D61d3c5b57D6D41ff082Ca92f" - }, - "boba:bnb:mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetPriceRouter": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xc45c93083F7B97Cdb700D4D2ADE6a727E04793ff", - "WitnetRandomnessImplementation": "0xC467B6E0F700D3E044C9F20BB76957eEC0B33c8C", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRequestRandomness": "0xA99B485363DBAe90D17B10F988C4e1Ae895048e0" - }, - "boba:ethereum:goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomnessImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "boba:ethereum:mainnet": { - "WitnetLib": "0x6473063EBEabC0606A4159b7d9F79BB306ED0D2A", - "WitnetPriceRouter": "0x93f61D0D5F623144e7C390415B70102A9Cc90bA5", - "WitnetRandomness": "0x3D7Ccf6518deBE3d2fd20c4b6AEc3FD904c0Ad29", - "WitnetRequestBoard": "0xd3AD9a4b26527E3bA5Fc60B75Eb002D47D98e292" - }, - "celo:alfajores": { - "WitnetProxy": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93", - "WitnetPriceRouter": "0x6f8A7E2bBc1eDb8782145cD1089251f6e2C738AE", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x99a0B5eb260Fe3BfcF9d658850e3dD6d6B69183A", - "WitnetErrorsLib": "0x364E2b91a4C7563288C3ccF7256BA172935CC550", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x654B79823f244c2476907F21EBD20cFebC04D0A5", - "WitnetRandomnessImplementation": "0xFB36b14df6D319A5A7F418C80b0700664A4f9e6a", - "WitnetRandomnessImplementationV061": "0xbD804467270bCD832b4948242453CA66972860F5", - "WitnetRequestBoardImplementation": "0xe381f706f2932049A844791f41b2863884c4e6CA", - "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "celo:mainnet": { - "WitnetProxy": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetPriceRouter": "0x931673904eB6E69D775e35F522c0EA35575297Cb", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x03E709E6422E30C033456FCde38C70A12553E468", - "WitnetErrorsLib": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x760C146699B76c84Cc8050f57728F2Dc374cbf25", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x76ffF94D527504e90DaCB12d710590ba8227299E", - "WitnetRandomnessImplementation": "0x6Af31B632A20185ff96FC47a8576a6980Cd99FEC", - "WitnetRandomnessImplementationV061": "0x6023fF93A3b37791a94B15D6AEaD488933b01Db3", - "WitnetRequestBoardImplementation": "0x5A13430A283701BE24cE7E1712B38F31d4B9ac58", - "WitnetRequestFactoryImplementation": "0x0d13c6058DDE86da77565ED6038C065Af71e9208" - }, - "conflux:core:testnet": { - "WitnetProxy": "0x8E077eBf150a5f09e26805F1CB1d14671834b63A", - "Create2Factory": "0x8644e9b7306cD4e6E5a3dB2aA7DFDE2744eAE676", - "WitnetBytecodes": "0x8E6AEaC77a18DF3e90B1446BB2210013A331Cb12", - "WitnetPriceFeeds": "0x8FDD679F4D1d2bfb97B5e5fD90c8E3E6ce0ce75c", - "WitnetPriceRouter": "0x8F61C7b18F69bB87D6151B8a5D733E1945ea6c25", - "WitnetRandomness": "0x882D16154E7190eDA27ed4CE6606d204Aa70EC90", - "WitnetRequestBoard": "0x8aB653B73a0e0552dDdce8c76F97c6AA826EFbD4", - "WitnetRequestFactory": "0x83eFF90a51D7da324AE1580eab6Ee0c9D45ad509", - "WitnetErrorsLib": "0x8d5Fda8c48dF35f321301e69c3c605AABCA474b1", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x81f3EB9a7853F8e1357f6BB61E7BB610F73605F1", - "WitnetRandomnessImplementationV061": "0x887bC8Db7D91413D1575071925Ee8d77fE2CBc81", - "WitnetRequestBoardImplementation": "0x8d19a968CeAA0d31cD9E0434574C8dC5710ddBac", - "WitnetRequestFactoryImplementation": "0x89a49b46864049b16dFcf185740Ac89Eec8Fd670", - "WitnetPriceFeedsLib": "0x87cA78592Cb691BA3a1919c2d83Ed578e8E0Ae0a" - }, - "conflux:core:mainnet": { - "WitnetLib": "0x8A026e6956B4DB3E81bb113401798e59cFBEA4C6", - "WitnetPriceRouter": "0x806c8dFd322EE2d52b188CC472e0814F64304C32", - "WitnetRandomness": "0x8C3824A9A6C3F5B0ac107E2c7dBc8d88c14aF6D9", - "WitnetRequestBoard": "0x84C708bfd79bBC83Ad8753dAb1852EfE9D6712CC" - }, - "conflux:espace:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0x49C0BCce51a8B28f92d008394F06d5B259657F33", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x0C4be6AA667df48de54BA174bE7948875fdf152B", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0x0b75886DeB58F80A75E5cAF10702C5d15FA54437", - "WitnetRandomnessImplementationV061": "0xa784093826e2894Ab3Db315f4e05F0F26407BBfF", - "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" - }, - "conflux:espace:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "cronos:testnet": { - "WitnetProxy": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xB1Ee13a85B2593D5191f3a2A08f175b1c918B9bb", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7538f6Bff94B0F7F0A0802376238Aab0D2528521", - "WitnetRandomnessImplementation": "0xe145A4D3335D5F78d7e9cB6a3C1832155cB4Be01", - "WitnetRandomnessImplementationV061": "0x0017A464A86f48B342Cae3b8Fe29cFCDaA7b0643", - "WitnetRequestBoardImplementation": "0x3093731aECf4d9Be53b153E27A36D2E02647479F", - "WitnetRequestFactoryImplementation": "0xA8767A6EA3099De344499B35f725A38E3cD15562" - }, - "cronos:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x3737be6FcFf5B3B0f9DCc9a9ae1Da56561D0d0d3", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "cube:testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "cube:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "dogechain:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomnessImplementation": "0x8762508A67e71Df04212B256E19faB1771F9a2F4", - "WitnetRandomnessImplementationV061": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetRequestBoardImplementation": "0xb6E0e5a64C7c02Fa477A5254dca35ED967570DF5", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "dogechain:mainnet": { - "WitnetLib": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetPriceRouter": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", - "WitnetRandomness": "0xD7f7933992c25A504e9Ddf7e76a3c1D6c432b25D", - "WitnetRequestBoard": "0xF2712e7114A237625EFC8bBA6a6ed1Bb8b6029c9" - }, - "elastos:testnet": { - "WitnetProxy": "0x840bafDC40D88F54Db41327fe1C85241f9151243", - "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetErrorsLib": "0xEdb5535994bF19d56c30F5BEa0937232E198F671", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xC1266fA3D24f5d63E2e34633b3F829E9156be0d6", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdA489690BDfd6e4d76DE3b937f40342bAd281bc9", - "WitnetRandomnessImplementation": "0x83587BcfD1f75B5D08c4e27F098F99783cc693cb", - "WitnetRandomnessImplementationV079": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", - "WitnetRequestBoardImplementation": "0xfC62b6B0ec3eCF1Fa031B31b468be51E025a36f1", - "WitnetRequestFactoryImplementation": "0x4779A692aC089E02FD1301B0b53Fa1a02985a83F" - }, - "elastos:mainnet": { - "WitnetProxy": "0x0000000e3a3d22d7510B36BdC88994dab11eadc8", - "WitnetPriceRouter": "0x0Aa147F25CE8BfaA4E6B4B2CCa91f595bD732CD4", - "WitnetRandomness": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x79c27c0555C95DBfd38e97023c3257376aaa154d", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "0x7AA219C444f68eDBD5789d89076efA8A3f09996b", - "WitnetRequestRandomness": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", - "WitnetPriceFeedsLib": "0x62a1b1D6E5bA031846894FC5C3609f586c78D23D" - }, - "ethereum:goerli": { - "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetPriceRouter": "0x1cF3Aa9DBF4880d797945726B94B9d29164211BE", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xb58D05247d16b3F1BD6B59c52f7f61fFef02BeC8", - "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomnessImplementation": "0x685528FA605c31aE076e1ee1707041B7Cb356573", - "WitnetRandomnessImplementationV061": "0x6Eb87EcCe6218Cd0e97299331D2aa5d2e53da5cD", - "WitnetRequestBoardImplementation": "0x0e86a89D9Ae5D6182a853375F19dB23e5c600268", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" + "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", + "WitnetBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", + "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000", + "WitnetRequestBoard": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", + "WitnetPriceFeeds": "0x159Dd4C95C52fAc17b23de911dD518845c78D022" }, "ethereum:sepolia": { - "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetErrorsLib": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", - "WitnetEncodingLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", - "WitnetPriceFeedsImplementation": "0x7a56A80A9B169c046EdD1d8f584455a394bc9C71", - "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" - }, - "ethereum:mainnet": { - "WitnetBytecodes": "0xB8CdB2577dA632a77D6b90526aB53Eb5694Ed2D1", - "WitnetBytecodesImplementation": "", - "WitnetEncodingLib": "", - "WitnetLib": "0xaD18Fd3CC724A11c2B0D8cc7f1B108d8A3388416", - "WitnetPriceRouter": "0x83A757eAe821Ad7B520D9A74952337138A80b2AF", - "WitnetRandomness": "0x894907c7Ab64C1092620B5c8Ba039BB6E611eba8", - "WitnetRequestBoard": "0x9E4fae1c7ac543a81E4E2a5486a0dDaad8194bdA", - "WitnetRequestFactory": "0xdABE9E1B328d5Dd6b96271e5562ee3f7D8D035c4", - "WitnetRequestFactoryImplementation": "0xBfe9473720CC8DCa9615b8B6CFE228C7e1089396" - }, - "fuse:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", - "WitnetErrorsLib": "0x123a7AcE0879C4645b19A69c2ba8B3E4d01fBfD6", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xEeA1423D8cAf1e9440495842613Ec042046065aC", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x3280539A77C578C3eF698f53f29CDba00eC9B72E", - "WitnetRandomnessImplementation": "0x1e7e21B4b1102cf3b8bD5e110bbBdc80D43A9dEa", - "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", - "WitnetRequestFactoryImplementation": "0x83e8f5B6D4D94CAC5943689616B96786c2465c9A" - }, - "gnosis:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xA8767A6EA3099De344499B35f725A38E3cD15562", - "WitnetErrorsLib": "0x9F026F081b5E1f60d583CE380f30A0a4eF0AB97a", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x69891cE36F6dFbef4A7BdD0E95A15CBA916f206b", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xd8875D7D3087DEec0103d47d4cE0C4a5414874E1", - "WitnetRandomnessImplementation": "0x9597b5708CDB58fF057ca494574951Fc3d9163f7", - "WitnetRandomnessImplementationv079": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRequestBoardImplementation": "0xF58115533e681295CC1F07A135539E72c5116855", - "WitnetRequestFactoryImplementation": "0x6F68A4d58cEd8e094b42511350527Ed628ACB970" - }, - "kava:testnet": { - "WitnetProxy": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xa45206cC3Ae76630Cc4D47A730590Ff9B6d8Ee54", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0xA9cC3101735b248964e90fA8506219A9CF0b1091", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x8684d396366C21AA01B120F69df2070f840aC134", - "WitnetRequestFactoryImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF" - }, - "kava:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "kcc:testnet": { - "WitnetProxy": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetPriceRouter": "0xba7CF62498340fa3734EC51Ca8A69928F0d9E03a", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomnessImplementation": "0x98DbB216138aA6a0b3ff2ae9bBdeC254398E5B2E", - "WitnetRandomnessImplementationV061": "0x76c72518060952FAec3f90666F047e39E3333f7E", - "WitnetRequestBoardImplementation": "0xeF262eCBF9c61A0e71688D90d8fe75B0C3a48901", - "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" - }, - "kcc:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebd93231a7fe551e1d6405404df34909eff4c2c", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "klaytn:testnet": { - "WitnetProxy": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetPriceRouter": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xc71A87657b13A370594967A04b4301a3AcEAF007", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomnessImplementation": "0xd6d4B24219751A7725ce972E68B1067Ee57CC85a", - "WitnetRandomnessImplementationV061": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRequestBoardImplementation": "0x1f35F6d6BE5Bd574b2B00Ac2Dc0BeCAfcc04Ed51", - "WitnetRequestFactoryImplementation": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D" - }, - "klaytn:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "mantle:testnet": { - "WitnetProxy": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetPriceRouter": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xB4f1f8E27799256ec95C5b5A8d2A5722Bd542E69", - "WitnetRandomnessImplementation": "0x620e20d91C9b0e11ecAE439E7b85138DA2a1003F", - "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", - "WitnetRequestFactoryImplementation": "0xb5F3c9Dc6Ca7C1078cE5c51c1cE030D6BEEd57E2" - }, - "mantle:mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", - "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "0x3eA2fa27D997A938925299f91e49215218Ec4f7d", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - }, - "meter:testnet": { - "WitnetProxy": "0xc6BdB5fd0113358Aaa6e9B56D6bA3A689cAbf65C", - "Create2Factory": "0x2d9dD590b8ebfEe76285f4398dC718D687A4B3e2", - "WitnetBytecodes": "0x1C116937844d705C4b0252C5340D4281C5D8D555", - "WitnetPriceFeeds": "0x7BBA94e4f3a596AD0E528e51d49CaD789Bd6a22D", - "WitnetPriceRouter": "0xBbDB82a16d7b66bb076879f766042b914F1C7572", - "WitnetRandomness": "0x8D416B786Ae7F5c583df36a6952E53834BDFf386", - "WitnetRequestBoard": "0xF99883aa51Fb76E37De6aC37854230d2337D2752", - "WitnetRequestFactory": "0x693cC8829Cb9AC14F75E6EbE5878652817C9e6a4", - "WitnetErrorsLib": "0x34AD22616E4FfED3EB1e9580C9D7156E1bF8ea7C", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xaB7FEec38465EA6E1Cf216E188F3Bd11355824dc", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xD62848a74c0d08BA233D625d8691ea5Fee7d7719", - "WitnetRandomnessImplementation": "0xde9988f1397C0a7D4887707ec8A2Ea265D4E0572", - "WitnetRandomnessImplementationV061": "0xa254632ae454bae18ff0221c2040aa387f044f0e", - "WitnetRequestBoardImplementation": "0x7a624e7742F7A26f7BddDde06Ad7d9e7A6804298", - "WitnetRequestFactoryImplementation": "0xf1fb7170cB8832213Fb4C506f883bca0a910861D" - }, - "meter:mainnet": { - "WitnetLib": "0x60507Ef497EC61d407cD6Fa1c65FE820620bfA88", - "WitnetPriceRouter": "0xA0Ea8C99159843afdAE9eD092E8eaec0368e8A20", - "WitnetRandomness": "0xE189B1D26dAAB45cd344452f29Db8E93B5C7FaF1", - "WitnetRequestBoard": "0x4e645446799776B9670D18E1ecBCad059987eaCa" - }, - "metis:goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetErrorsLib": "0xc229345B9B95515C69A64842182e37cAdB52A00d", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x4a0264714E368A6888c5D755F47Bd924549Fd625", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", - "WitnetRandomnessImplementation": "0x4326d5b067EC4Bb5c2F71909E278Def8e4906B19", - "WitnetRandomnessImplementationV079": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0x7833F9B08F4236D77ec6287d667F533bc2F1c1EE", - "WitnetRequestFactoryImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08" - }, - "metis:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0xB280e3B785f615C000A8BeBb55C35eCD2376F2eb", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "moonbeam:moonbase": { - "WitnetProxy": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetPriceRouter": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x02Cd4089679EAA9431a88170fd784e7dE78A2425", - "WitnetErrorsLib": "0x2163DBCBdbBeC066EF8d8Adab75Af8b0B9A5cfAA", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6f0da7F65Aaa090C48B371ADEfA1997e4e3cE39a", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x2F0912fa566B5B3215e746Dc108d85fDd4A8113A", - "WitnetRandomnessImplementation": "0xcf9F6DD90221d5A23a6c4E2252bF690acdf6eedC", - "WitnetRandomnessImplementationv079": "0x65772461641A4A6E8B10c81bae1a132E04e77262", - "WitnetRequestBoardImplementation": "0xCA9e7861643febcEa7C657eA8F012645D6acceC4", - "WitnetRequestFactoryImplementation": "0x6395d83C9Aa803498980A5ab78217785d4db7bE7" - }, - "moonbeam:moonriver": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "moonbeam:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "okxchain:testnet": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRandomnessImplementation": "0x078EE90E16e2e5332EDaA87da19d2743cD8C64DD", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x20f4B1793bb81FFa357E1705AD954BdC232Edc00", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "okxchain:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "optimism:goerli": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xD9465D38f50f364b3263Cb219e58d4dB2D584530", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x0985FDe9f424fe4f5AC516F66bAf5591e18aCBEb", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRandomnessImplementation": "0x12E5FBdaB02cC2336114353CA7BE9e2cc8E4Cc25", - "WitnetRandomnessImplementationV061": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRequestBoardImplementation": "0xAa3BE012baab697c1AEAC34A96bb16aa381FA7F7", - "WitnetRequestFactoryImplementation": "0x364E2b91a4C7563288C3ccF7256BA172935CC550" - }, - "optimism:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "polygon:goerli": { - "WitnetProxy": "0xF9bC9c1d66e4B28F56069c98A8c5373ec0200a25", - "WitnetPriceRouter": "0x6d5544ca5b35bf2e7a78ace4E7B8d191fe5C9FAb", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xA7389B84D6ABC46b40e88aAD2bbDAf9921649E9E", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xA149B0ED1D7d506AAB4B48275B9F761336aD916A", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x632147c657743906F332EB05E5C775B738254e1b", - "WitnetRandomnessImplementation": "0xD7C67eA4BFB2e85b5a8a07E295c640F2d1811e41", - "WitnetRandomnessImplementationv079": "0x24Cc52D0603F161E16c3DB29Da4c2bCc07d17C4b", - "WitnetRequestBoardImplementation": "0x2bD210b8193780A9A74A2864E6Eb007745244092", - "WitnetRequestFactoryImplementation": "0x5Acb0fEf96A307660c6B2fBdB271af12Dcdb3E68" - }, - "polygon:mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetPriceRouter": "0x3806311c7138ddF2bAF2C2093ff3633E5A73AbD4", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xa239729c399c9eBae7fdc188A1Dbb2c4a06Cd4Bb", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xf56E739C436EA6e65A17DBfaC9D7E57062D19422", - "WitnetRandomnessImplementation": "0xF1Aba51c5097487a62DA9c72fb9Aa7B0c98676C1", - "WitnetRandomnessImplementationv061": "0xc8c0d4dB2D7801D6E2A863934597cFD31689f7D5", - "WitnetRequestBoardImplementation": "0xF395CEeb77cE9cDc44Fd276bE5Ff307B1902D3f7", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - }, - "polygon:zkevm:goerli": { - "WitnetProxy": "0xd0f725Bf11bA75D291506d396FbcbeCAb5384e95", - "WitnetPriceRouter": "0xc2462eE5d9F8C70f3E0C4CE5881dFFF291Ff2205", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRandomnessV079": "0x88888885966F8F77cC6E797aE263C4d091e44A55", - "WitnetErrorsLib": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", - "WitnetEncodingLib": "0x6D198FC7F1573E3bf4AEd1f9307fff6b2A05e38e", - "WitnetPriceFeedsLib": "0xFB2A291CaE095a63f50846a63aE729506A3D1C40", - "WitnetBytecodesImplementation": "0xda5223Df6c769B91C50517C9C0b1563F618A89e4", - "WitnetPriceFeedsImplementation": "0xA14a1fD9b1C6023f87f3A7E97DbdFdf1a9413D0A", - "WitnetRandomnessImplementation": "0x89A0EF4eDEEfA128931b353bdf494Bad97a3D448", - "WitnetRandomnessImplementationV079": "0x3f189fAc162d3CC6d84EF72c8177afAd8f3DBeE1", - "WitnetRequestBoardImplementation": "0x49030E216d49Fbf443CBe3692De5A6B97AEcFFCA", - "WitnetRequestFactoryImplementation": "0xB740E58D185558FF4FaaBf430fc87a6801208f38" - }, - "polygon:zkevm:mainnet": { - "WitnetProxy": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetPriceRouter": "0xb99FA0430C73E7B82604Aa99d351d6aFdCe46A16", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetErrorsLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", - "WitnetEncodingLib": "0x9a83a23066766991E6cA113eB425fFe806f62ecF", - "WitnetPriceFeedsLib": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetBytecodesImplementation": "0xD038E50cD189BF94CC0393C19606688A38D63D77", - "WitnetPriceFeedsImplementation": "0xe936a946FA591eCed937996Ef3df5c89d59f4dbb", - "WitnetRandomnessImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRequestBoardImplementation": "0x217C32Cf5755aB281809f29F21c107cD0E4652B3", - "WitnetRequestFactoryImplementation": "0x5FB499336aee67EC1183F49A8265CC3E2599C2ae" - }, - "reef:testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "", - "WitnetRandomness": "", - "WitnetRequestBoard": "", - "WitnetRequestFactory": "", - "WitnetRequestRandomness": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRandomnessImplementation": "", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "reef:mainnet": { - "WitnetParserLib": "0xD3e5A6F4653C5D596d16c947cfA30973C5aa9f34", - "WitnetPriceRouter": "0xa22AbF47Fd1eDDf7C0967C9d7fF06FB3c42B26E2", - "WitnetRandomness": "0x03e82c280ae03af908edb250d3d187db0018e501", - "WitnetRequestBoard": "0x61E11e5f496936Ef7f9600f6D1E81b1E7c12b172" - }, - "scroll:sepolia": { - "WitnetProxy": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetPriceRouter": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetErrorsLib": "0xf6d52770453166de85B6B6260Cf22196bC460E88", - "WitnetEncodingLib": "0xB5447342cA17A40e59d410b340ba412E22e36201", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetBytecodesImplementation": "0x705E076F3387cFd59708D8D8508CECe3e1C65C87", - "WitnetPriceFeedsImplementation": "0x6bF6F65Ad0859e9Ee869DAD252a29c9daAa27449", - "WitnetRandomnessImplementation": "0x7A6C2Aad6b4b08De09477D0F663b8f90b0db9662", - "WitnetRequestBoardImplementation": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", - "WitnetRequestFactoryImplementation": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865" - }, - "scroll:mainnet": { - "WitnetProxy": "0x0Dd81412825b9C3960195ab47F14dFa9Fd70e36e", - "WitnetPriceRouter": "0x0d13c6058DDE86da77565ED6038C065Af71e9208", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestFactory": "0x1111111FDE7dC956E3d7922Bc779D9E2349Afb63", - "WitnetErrorsLib": "0x1225A47bC743199dFef9FEEf065b3B76695AaaaC", - "WitnetEncodingLib": "0x30e7D86b3DcdC0CC90509b1F7C27eA8e5481FAc5", - "WitnetPriceFeedsLib": "0xe33bD10fb2f1C5F4c6eF4259aAd4cE8A5868c222", - "WitnetBytecodesImplementation": "0x5832e99368877a63dd1c2cea941C2b43E1F6b16A", - "WitnetPriceFeedsImplementation": "0x4756097b9184327713D07b3ac4C2a898468220B1", - "WitnetRandomnessImplementation": "0x92a68143Ee3C2527C2B07e4354efAF89fd75a359", - "WitnetRequestBoardImplementation": "0x0e4F5763f417BB13AF759da4d36af50d13F02730", - "WitnetRequestFactoryImplementation": "0xc42656C501623859565C6d080a7Feb1f2B72b55a" - }, - "syscoin:testnet": { - "WitnetProxy": "", - "Create2Factory": "", - "WitnetBytecodes": "", - "WitnetPriceFeeds": "", - "WitnetPriceRouter": "0x9E943Ab1FD0D35B3BaDe31AA78D60C485EA1a604", - "WitnetRandomness": "0x56834Ff8D4b27db647Da97CA3bd8540f7fA0e89D", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetRequestFactory": "", - "WitnetErrorsLib": "", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "", - "WitnetRequestBoardImplementation": "", - "WitnetRequestFactoryImplementation": "" - }, - "syscoin:mainnet": { - "WitnetLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xE22f48DDdcb34BD34489fE224d7fFC1b0a361D87", - "WitnetRandomness": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" - }, - "syscoin:rollux:testnet": { - "WitnetProxy": "0x60768ce66aF2f3957e7280c6CfC4ab9c575a7FCF", - "WitnetErrorsLib": "0x1b91eAB33362f10A5F803Fe3f0d181F42caFaac3", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0xBfFA2ec6225390C517A1bEB83b27a171C6734294", - "WitnetPriceRouter": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0xdC101573cB42EB7006Ad6C7E08ce8C91fEAcB62C", - "WitnetRandomnessImplementation": "0x6dc0E2AC80550F901cd4d5F5a4C48333A0ca97Ee", - "WitnetRequestBoardImplementation": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetRequestFactoryImplementation": "0x4743325168af9195Aa5b25e491E9bE87d87E7F93" - }, - "ultron:testnet": { - "WitnetProxy": "0x4374a050f808d1FF18bCcf73270daE3EdF8D0865", - "WitnetPriceRouter": "0xB4B2E2e00e9d6E5490d55623E4F403EC84c6D33f", - "WitnetRandomness": "0x0123456fbBC59E181D76B6Fe8771953d1953B51a", - "WitnetRequestBoard": "0x58D8ECe142c60f5707594a7C1D90e46eAE5AF431", - "WitnetErrorsLib": "0xeDA4f244FEe1D6a3EA0fB2c0Fc6b7D1c49fEF01D", - "WitnetEncodingLib": "", - "WitnetPriceFeedsLib": "0x9f9bAB64229680E170835BC9cC1c96F2C63f7d16", - "WitnetBytecodesImplementation": "", - "WitnetPriceFeedsImplementation": "0x50AA08187D2F648Dd428784AF6489c3F12e942CC", - "WitnetRandomnessImplementation": "0x07024BBdFbE0b7560A0f5B49745A372e15954d08", - "WitnetRandomnessImplementationV061": "0xeD074DA2A76FD2Ca90C1508930b4FB4420e413B0", - "WitnetRequestBoardImplementation": "0x88a456C0Bd557DDA942FBc1DB86C0E35c529A6AE", - "WitnetRequestFactoryImplementation": "0x4874cb1732eE1167A006E0Ab047D940ACF04D771" - }, - "ultron:mainnet": { - "WitnetParserLib": "0x1D9c4a8f8B7b5F9B8e2641D81927f8F8Cc7fF079", - "WitnetPriceRouter": "0xD39D4d972C7E166856c4eb29E54D3548B4597F53", - "WitnetRandomness": "0x1ebD93231a7fE551E1d6405404Df34909eff4c2C", - "WitnetRequestBoard": "0xd653fbd7c736838289262F0F41A458f35393C88a" + "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", + "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", + "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", + "WitnetBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", + "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", + "WitnetRequestBoardTrustableDefault": "0x7FEf83f7078F6135C006E770251039e59F952D2E" + }, + "ten:testnet": { + "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", + "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", + "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", + "WitnetBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", + "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", + "WitnetRequestBoardTrustableObscuro": "0xeAcf2949b6396d4fF973Ab8A0F085F18063D61aF" } } \ No newline at end of file diff --git a/settings/specs.js b/settings/specs.js index 41fbc90ac..fb292c698 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -2,7 +2,7 @@ module.exports = { default: { WitnetBytecodes: { libs: ["WitnetEncodingLib"], - vanity: 172582, + vanity: 2561527884, // 0x0000B677d4a6d20C3B087c52A36E4Bed558De000 }, WitnetRandomness: { vanity: 4, @@ -18,14 +18,14 @@ module.exports = { ], }, libs: ["WitnetErrorsLib"], - vanity: 899032812, // => 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 + vanity: 3648098779, // 0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000 }, WitnetRequestFactory: { - vanity: 178848, + vanity: 7945530998, // 0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000 }, WitnetPriceFeeds: { libs: ["WitnetPriceFeedsLib"], - vanity: 5, + vanity: 7089974217, // 0x000080d4d4896c2c5959883430495AD58436E000 }, }, avalanche: { diff --git a/src/utils/index.js b/src/utils/index.js index c1981ec83..accb4fb32 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -13,6 +13,7 @@ module.exports = { getWitnetArtifactsFromArgs, getWitnetRequestMethodString, isDryRun, + isNullAddress, padLeft, prompt, readAddresses, @@ -80,6 +81,12 @@ function isDryRun (network) { return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" } +function isNullAddress(addr) { + return !addr || + addr === "" || + addr === "0x0000000000000000000000000000000000000000" +} + function padLeft (str, char, size) { if (str.length < size) { return char.repeat((size - str.length) / char.length) + str @@ -108,19 +115,18 @@ async function prompt (text) { return answer } -async function readAddresses (network) { +async function readAddresses () { const filename = "./migrations/witnet.addresses.json" lockfile.lockSync(filename) const addrs = JSON.parse(await fs.readFileSync(filename)) lockfile.unlockSync(filename) - return addrs[network] || {} + return addrs || {} } -async function saveAddresses (network, addrs) { +async function saveAddresses (addrs) { const filename = "./migrations/witnet.addresses.json" lockfile.lockSync(filename) - const json = JSON.parse(fs.readFileSync(filename)) - json[network] = addrs + const json = { ...JSON.parse(fs.readFileSync(filename)), ...addrs }; fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }) lockfile.unlockSync(filename) } From 259561bf52c9926b3550734349e5dbc1ebd654cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 12 Feb 2024 15:25:54 +0100 Subject: [PATCH 104/149] feat: customize WRB for Obscuro --- .../WitnetRequestBoardTrustableObscuro.sol | 79 +++++++++++++++++++ .../WitnetRequestBoardTrustableBase.sol | 12 +-- 2 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol diff --git a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol new file mode 100644 index 000000000..f596b4cfe --- /dev/null +++ b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol @@ -0,0 +1,79 @@ +// SPDX-License-Identifier: MIT + +/* solhint-disable var-name-mixedcase */ + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../defaults/WitnetRequestBoardTrustableDefault.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 +contract WitnetRequestBoardTrustableObscuro + is + WitnetRequestBoardTrustableDefault +{ + constructor( + WitnetRequestFactory _factory, + WitnetBytecodes _registry, + bool _upgradable, + bytes32 _versionTag, + uint256 _reportResultGasBase, + uint256 _reportResultWithCallbackGasBase, + uint256 _reportResultWithCallbackRevertGasBase, + uint256 _sstoreFromZeroGas + ) + WitnetRequestBoardTrustableDefault( + _factory, + _registry, + _upgradable, + _versionTag, + _reportResultGasBase, + _reportResultWithCallbackGasBase, + _reportResultWithCallbackRevertGasBase, + _sstoreFromZeroGas + ) + {} + + // ================================================================================================================ + // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ + + /// @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. + function getQuery(uint256 _queryId) + public view + virtual override + onlyRequester(_queryId) + returns (WitnetV2.Query memory) + { + return WitnetRequestBoardTrustableBase.getQuery(_queryId); + } + + /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or if `msg.sender` is not the actual requester. + /// @param _queryId The unique query identifier + function getQueryResponse(uint256 _queryId) + public view + virtual override + onlyRequester(_queryId) + returns (WitnetV2.Response memory _response) + { + return WitnetRequestBoardTrustableBase.getQueryResponse(_queryId); + } + + /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. + /// @dev Fails if the `_queryId` is not in 'Reported' status, or if `msg.sender` is not the actual requester. + /// @param _queryId The unique query identifier + function getQueryResult(uint256 _queryId) + public view + virtual override + onlyRequester(_queryId) + returns (Witnet.Result memory) + { + return WitnetRequestBoardTrustableBase.getQueryResult(_queryId); + } + +} diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index b924b4c8b..cbd7dbfd2 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -232,8 +232,8 @@ abstract contract WitnetRequestBoardTrustableBase /// Gets the whole Query data contents, if any, no matter its current status. function getQuery(uint256 _witnetQueryId) - external view - override + public view + virtual override returns (WitnetV2.Query memory) { return __storage().queries[_witnetQueryId]; @@ -277,8 +277,8 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Fails if the `_witnetQueryId` is not in 'Reported' status. /// @param _witnetQueryId The unique query identifier function getQueryResponse(uint256 _witnetQueryId) - external view - override + public view + virtual override returns (WitnetV2.Response memory _response) { return __seekQueryResponse(_witnetQueryId); @@ -287,8 +287,8 @@ abstract contract WitnetRequestBoardTrustableBase /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. /// @param _witnetQueryId The unique query identifier. function getQueryResult(uint256 _witnetQueryId) - external view - override + public view + virtual override returns (Witnet.Result memory) { // todo: fail if not in finalized status ? From ac368d229b66c145878009077bd30050e7297b3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 12 Feb 2024 15:26:34 +0100 Subject: [PATCH 105/149] chore: deploy on ten:testnet --- package.json | 4 ++-- settings/artifacts.js | 3 +++ settings/networks.js | 6 ++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 1b7a01fc1..dd941d791 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "clean": "npm run clean:build && npm run clean:flattened", "clean:build": "node ./scripts/clean.js build", "clean:flattened": "node ./scripts/clean.js flattened", - "compile": "npx truffle compile --all --network", + "compile": "npx truffle compile --all", "console": "npx truffle console", "coverage": "solidity-coverage", "flatten": "node ./scripts/flatten.js 2>&1", @@ -47,7 +47,7 @@ "fmt!:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\" --fix && solhint \"test/**/*.sol\" --fix && solhint \"flattened/**/*.sol\"", "fmt!": "npm run fmt!:js && npm run fmt!:sol", "fmt": "npm run fmt:js && npm run fmt:sol", - "migrate": "node ./scripts/migrate.js 2>&1", + "migrate": "npx truffle migrate --network", "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 && node ./scripts/prepare.js", diff --git a/settings/artifacts.js b/settings/artifacts.js index ae0aeda6b..79560e01b 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -36,4 +36,7 @@ module.exports = { "syscoin.rollux.testnet": { WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", }, + ten: { + WitnetRequestBoard: "WitnetRequestBoardTrustableObscuro", + } } diff --git a/settings/networks.js b/settings/networks.js index 374fccd58..43c6076ce 100644 --- a/settings/networks.js +++ b/settings/networks.js @@ -361,6 +361,12 @@ module.exports = { explorerUrl: "https://rollux.tanenbaum.io/address/", }, }, + "ten:testnet": { + port: 8504, + network_id: 443, + gas: 6000000, + gasPrice: 10, + }, "ultron:testnet": { port: 8516, network_id: 1230, From aea3ba1839c93dabd0dbc30ddf2db7162b6adb2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:14:51 +0100 Subject: [PATCH 106/149] chore: revert to sequential query ids Until WIP on DDRs is fully defined and approved. --- .../core/defaults/WitnetRequestBoardTrustableBase.sol | 9 ++++++++- contracts/interfaces/V2/IWitnetRequestBoard.sol | 4 ++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index cbd7dbfd2..bb72b12d4 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -400,7 +400,14 @@ abstract contract WitnetRequestBoardTrustableBase returns (WitnetV2.QueryStatus) { return _statusOf(_witnetQueryId); + } + function getNextQueryId() + external view + override + returns (uint256) + { + return __storage().nonce; } @@ -784,7 +791,7 @@ abstract contract WitnetRequestBoardTrustableBase virtual internal returns (uint256 _witnetQueryId) { - _witnetQueryId = __newQueryId(_radHash, _packedSLA); + _witnetQueryId = ++ __storage().nonce; //__newQueryId(_radHash, _packedSLA); WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); require( __request.fromCallbackGas == bytes32(0), diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol index aa4ec2d16..f8bed98a7 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -80,8 +80,8 @@ interface IWitnetRequestBoard { /// @notice Gets current status of given query. function getQueryStatus(uint256 queryId) external view returns (WitnetV2.QueryStatus); - // /// @notice Returns next query id to be generated by the Witnet Request Board. - // function getNextQueryId() external view returns (uint256); + /// @notice Returns next query id to be generated by the Witnet Request Board. + function getNextQueryId() external view returns (uint256); /// @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 From 44ecab07a9ae5a19c6ffadc5f5df226cab08f6bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:16:51 +0100 Subject: [PATCH 107/149] chore: deprecate WitnetRandomness --- contracts/mocks/WitnetMockedRandomness.sol | 155 --------------------- migrations/scripts/4_proxies.js | 2 +- migrations/scripts/5_apps.js | 1 - src/index.js | 2 - 4 files changed, 1 insertion(+), 159 deletions(-) delete mode 100644 contracts/mocks/WitnetMockedRandomness.sol diff --git a/contracts/mocks/WitnetMockedRandomness.sol b/contracts/mocks/WitnetMockedRandomness.sol deleted file mode 100644 index e77d04c55..000000000 --- a/contracts/mocks/WitnetMockedRandomness.sol +++ /dev/null @@ -1,155 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../apps/WitnetRandomness.sol"; - -/// @title Mocked implementation of `WitnetRandomness`. -/// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. -/// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE -/// @dev THE `WitnetRandomness` CONTRACT ADDRESS PROVIDED -/// @dev BY THE WITNET FOUNDATION. -contract WitnetMockedRandomness - is - WitnetRandomness -{ - uint8 internal __mockRandomizeLatencyBlocks; - uint256 internal __mockRandomizeFee; - uint256 internal __mockRandomizeLatestId; - - /// Constructor: new WitnetMockedRandomness contract - /// @param _mockRandomizeLatencyBlocks Mocked number of blocks in which a new randomness will be provided after `randomize()` - /// @param _mockRandomizeFee Mocked randomize fee (will be constant no matter what tx gas price is provided). - constructor ( - WitnetRequestBoard _wrb, - uint8 _mockRandomizeLatencyBlocks, - uint256 _mockRandomizeFee - ) - WitnetRandomness(msg.sender, _wrb) - { - __mockRandomizeLatencyBlocks = _mockRandomizeLatencyBlocks; - __mockRandomizeFee = _mockRandomizeFee; - } - - /// Returns mocked amount of wei required to be paid as a fee when requesting new randomization. - function estimateRandomizeFee(uint256) - public view - virtual override - returns (uint256) - { - return __mockRandomizeFee; - } - - /// Retrieves data of a randomization request that got successfully posted to the WRB within a given block. - /// @dev Returns zero values if no randomness request was actually posted within a given block. - /// @param _block Block number whose randomness request is being queried for. - /// @return _id Unique request identifier as provided by the WRB. - /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. - /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. - function getRandomizeData(uint256 _block) - external view - virtual override - returns ( - uint256 _id, - uint256 _prevBlock, - uint256 _nextBlock - ) - { - RandomizeData storage _data = __randomize_[_block]; - _id = _data.witnetQueryId; - _prevBlock = _data.prevBlock; - _nextBlock = _data.nextBlock; - } - - /// Mocks randomness generated upon solving a request that was posted within a given block, - /// if more than `__mockRandomizeLatencyBlocks` have elapsed since rquest, or to the _first_ request - /// posted after that block, otherwise. - /// @dev Please, note that 256 blocks after a `randomize()` request, randomness will be possibly returned - /// @dev as `bytes32(0)` (depending on actual EVM implementation). - /// @dev Fails if: - /// @dev i. no `randomize()` was not called in either the given block, or afterwards. - /// @dev ii. a request posted in/after given block does exist, but lest than `__mockRandomizeLatencyBlocks` have elapsed. - /// @param _block Block number from which the search will start. - function getRandomnessAfter(uint256 _block) - public view - virtual override - returns (bytes32) - { - if (__randomize_[_block].witnetQueryId == 0) { - _block = getRandomnessNextBlock(_block); - } - uint256 _queryId = __randomize_[_block].witnetQueryId; - require(_queryId != 0, "WitnetMockedRandomness: not randomized"); - require(block.number >= _block + __mockRandomizeLatencyBlocks, "WitnetMockedRandomness: pending randomize"); - return blockhash(_block); - } - - /// Mocks `true` only when a randomness request got actually posted within given block, - /// and at least `__mockRandomizeLatencyBlocks` have elapsed since then. - function isRandomized(uint256 _block) - public view - virtual override - returns (bool) - { - RandomizeData storage _data = __randomize_[_block]; - return ( - _data.witnetQueryId != 0 - && block.number >= _block + __mockRandomizeLatencyBlocks - ); - } - - /// Mocks request to generate randomness, using underlying EVM as entropy source. - /// Only one randomness request per block will be actually posted. Unused funds shall - /// be transfered back to the tx sender. - /// @dev FOR UNITARY TESTING ONLY. DO NOT USE IN PRODUCTION, AS PROVIDED RANDOMNESS - /// @dev WILL NEITHER BE EVM-AGNOSTIC, NOR SECURE. - /// @return _usedFunds Amount of funds actually used from those provided by the tx sender. - function randomize() - external payable - virtual override - returns (uint256 _usedFunds) - { - if (latestRandomizeBlock < block.number) { - _usedFunds = __mockRandomizeFee; - require( - msg.value >= _usedFunds, - "WitnetMockedRandomness: insufficient reward" - ); - // Post the Witnet Randomness request: - uint _queryId = ++ __mockRandomizeLatestId; - RandomizeData storage _data = __randomize_[block.number]; - _data.witnetQueryId = _queryId; - // Update block links: - uint256 _prevBlock = latestRandomizeBlock; - _data.prevBlock = _prevBlock; - __randomize_[_prevBlock].nextBlock = block.number; - latestRandomizeBlock = block.number; - // Throw event: - emit Randomized( - msg.sender, - _prevBlock, - _queryId, - __witnetRandomnessRadHash - ); - } - // Transfer back unused tx value: - if (_usedFunds < msg.value) { - payable(msg.sender).transfer(msg.value - _usedFunds); - } - } - - /// Mocks by ignoring any fee increase on a pending-to-be-solved randomness request. - /// @dev The whole `msg.value` shall be transferred back to the tx sender. - /// @return _usedFunds Amount of funds actually used from those provided by the tx sender. - function upgradeRandomizeFee(uint256) - public payable - virtual override - returns (uint256) - { - if (msg.value > 0) { - payable(msg.sender).transfer(msg.value); - } - return 0; - } -} diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 7daf6f244..d0af36f23 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -97,7 +97,7 @@ async function deploy (target) { if ( (process.argv.length >= 3 && process.argv[2].includes("--upgrade-all")) || ( ["y", "yes"].includes( - (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? [y / N]`)).toLowerCase().trim() + (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? (y/N) `)).toLowerCase().trim() ) ) ) { diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index 7cf615a3d..a5f2cda3d 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -68,7 +68,6 @@ async function deploy (specs) { process.exit(1) } // save addresses file if required - console.log(addresses) if (!utils.isDryRun(network)) { await utils.saveAddresses(addresses) } diff --git a/src/index.js b/src/index.js index ea9eb1817..f688d1a41 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,6 @@ module.exports = { ) return { WitnetPriceFeeds: merged?.WitnetPriceFeeds, - WitnetRandomness: merged?.WitnetRandomness, WitnetRequestBoard: merged?.WitnetRequestBoard, } } else { @@ -33,7 +32,6 @@ module.exports = { artifacts: { WitnetBytecodes: require("../artifacts/contracts/WitnetBytecodes.sol/WitnetBytecodes.json"), WitnetPriceFeeds: require("../artifacts//contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), - WitnetRandomness: require("../artifacts//contracts/apps/WitnetRandomness.sol/WitnetRandomness.json"), WitnetRequest: require("../artifacts//contracts/WitnetRequest.sol/WitnetRequest.json"), WitnetRequestBoard: require("../artifacts//contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), WitnetRequestFactory: require("../artifacts//contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), From 2040fc1ebb696f892e04730d844a10d97d3b89af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:18:04 +0100 Subject: [PATCH 108/149] chore: let WRB and WPF return legacy RadonSLAs --- .../defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- contracts/interfaces/V2/IWitnetFeeds.sol | 4 ++-- contracts/interfaces/V2/IWitnetRequestBoard.sol | 2 +- contracts/libs/WitnetV2.sol | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index bb72b12d4..34e04d904 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -264,12 +264,12 @@ abstract contract WitnetRequestBoardTrustableBase function getQueryRequest(uint256 _witnetQueryId) external view override - returns (bytes32, WitnetV2.RadonSLA memory) + returns (bytes32, Witnet.RadonSLA memory) { WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); return ( __request.RAD == bytes32(0) ? registry.hashOf(__request.bytecode) : __request.RAD, - WitnetV2.toRadonSLA(__request.SLA) + WitnetV2.toRadonSLA(__request.SLA).toV1() ); } diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index d0721b3df..b8d73cf7f 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -19,14 +19,14 @@ interface IWitnetFeeds { function registry() external view returns (WitnetBytecodes); function witnet() external view returns (WitnetRequestBoard); - function defaultRadonSLA() external view returns (WitnetV2.RadonSLA memory); + function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); function estimateUpdateBaseFee(uint256 evmGasPrice) external view returns (uint); function latestResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); function latestResult(bytes4 feedId) external view returns (Witnet.Result memory); function latestUpdateQueryId(bytes4 feedId) external view returns (uint256); - function latestUpdateRequest(bytes4 feedId) external view returns (bytes32, WitnetV2.RadonSLA memory); + function latestUpdateRequest(bytes4 feedId) external view returns (bytes32, Witnet.RadonSLA memory); function latestUpdateResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); function latestUpdateResultError(bytes4 feedId) external view returns (Witnet.ResultError memory); function latestUpdateResultStatus(bytes4 feedId) external view returns (WitnetV2.ResultStatus); diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol index f8bed98a7..adcd9f49b 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -39,7 +39,7 @@ interface IWitnetRequestBoard { /// @notice Retrieves the RAD hash and SLA parameters of the given query. /// @param queryId The unique query identifier. - function getQueryRequest(uint256 queryId) external view returns (bytes32, WitnetV2.RadonSLA memory); + function getQueryRequest(uint256 queryId) external view returns (bytes32, Witnet.RadonSLA memory); /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. /// @param queryId The unique query identifier. diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 270825626..40f5eee52 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -111,6 +111,20 @@ library WitnetV2 { /// =============================================================================================================== /// --- 'WitnetV2.RadonSLA' helper methods ------------------------------------------------------------------------ + function toV1(RadonSLA memory self) + internal pure + returns (Witnet.RadonSLA memory) + { + uint64 _witnessReward = self.witnessingWitTotalReward / (self.witnessingCommitteeSize + 3); + return Witnet.RadonSLA({ + numWitnesses: self.witnessingCommitteeSize, + minConsensusPercentage: 51, + witnessReward: _witnessReward, + witnessCollateral: _witnessReward * 100, + minerCommitRevealFee: _witnessReward * 3 + }); + } + function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) { From 7fe583b08049602f1e2028906fc9398a62822717 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:18:27 +0100 Subject: [PATCH 109/149] chore: declare WPF to emit IWitnetRequestBoardEvents --- contracts/apps/WitnetPriceFeeds.sol | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 5fa107a1b..37826b989 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -22,6 +22,7 @@ contract WitnetPriceFeeds IERC2362, IWitnetPriceFeeds, IWitnetPriceSolverDeployer, + IWitnetRequestBoardEvents, Ownable2Step, WitnetFeeds, WitnetPriceFeedsData @@ -136,9 +137,9 @@ contract WitnetPriceFeeds function defaultRadonSLA() override public view - returns (WitnetV2.RadonSLA memory) + returns (Witnet.RadonSLA memory) { - return WitnetV2.toRadonSLA(__storage().packedDefaultSLA); + return WitnetV2.toRadonSLA(__storage().packedDefaultSLA).toV1(); } function estimateUpdateBaseFee(uint256 _evmGasPrice) @@ -172,7 +173,7 @@ contract WitnetPriceFeeds function latestUpdateRequest(bytes4 feedId) override external view - returns (bytes32, WitnetV2.RadonSLA memory) + returns (bytes32, Witnet.RadonSLA memory) { return witnet.getQueryRequest(latestUpdateQueryId(feedId)); } @@ -249,7 +250,7 @@ contract WitnetPriceFeeds returns (uint256 _usedFunds) { require( - updateSLA.equalOrGreaterThan(defaultRadonSLA()), + updateSLA.equalOrGreaterThan(WitnetV2.toRadonSLA(__storage().packedDefaultSLA)), "WitnetPriceFeeds: unsecure update" ); return __requestUpdate(feedId, updateSLA); From 295b22328c9e2ac8671d9ab32c408e92da0d6c91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:22:26 +0100 Subject: [PATCH 110/149] chore: prepare for hardhat verify --- hardhat.config.js | 39 +++++++++++++++++++++++++++++++++ migrations/scripts/4_proxies.js | 2 +- package.json | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/hardhat.config.js b/hardhat.config.js index fecabd47a..d9e12467a 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,6 +1,45 @@ +require("@nomicfoundation/hardhat-verify"); + const settings = require("./settings") const utils = require("./src/utils") const [, target] = utils.getRealmNetworkFromArgs() + module.exports = { + networks: Object.fromEntries( + Object.entries(settings.getNetworks()) + .map(([network, config]) => { + return [network, { + chainId: config.network_id, + url: `http://${config?.host || "localhost"}:${config?.port || 8545}` + }] + }) + ), solidity: settings.getCompilers(target), + sourcify: { + enabled: true, + apiUrl: "https://sourcify.dev/server", + browserUrl: "https://repo.sourcify.dev", + }, + etherscan: { + apiKey: Object.fromEntries( + Object.entries(settings.getNetworks()) + .filter(([,config]) => config?.verify) + .map(([network, config]) => { + const [ecosystem,] = utils.getRealmNetworkFromString(network) + return [network, config?.verify?.apiKey ?? `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY`] + }), + ), + customChains: Object.entries(settings.getNetworks()) + .filter(([,config]) => config?.verify) + .map(([network, config]) => { + return { + network, + chainId: config.network_id, + urls: { + apiURL: config?.apiUrl, + browserURL: config?.browserUrl + } + } + }), + } }; diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index d0af36f23..e5af61855 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -97,7 +97,7 @@ async function deploy (target) { if ( (process.argv.length >= 3 && process.argv[2].includes("--upgrade-all")) || ( ["y", "yes"].includes( - (await utils.prompt(` > From v${oldVersion} to v${newVersion} ? (y/N) `)).toLowerCase().trim() + (await utils.prompt(` > From v${oldVersion} to ${targets[key]} v${newVersion} ? (y/N) `)).toLowerCase().trim() ) ) ) { diff --git a/package.json b/package.json index dd941d791..5f36da766 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "test": "npm run clean && npx truffle test" }, "devDependencies": { + "@nomicfoundation/hardhat-verify": "^2.0.4", "@openzeppelin/contracts": "^5.0.1", "@openzeppelin/contracts-upgradeable": "^5.0.1", "@openzeppelin/test-helpers": "~0.5.16", From dfb31556a90dc0f6ce86a4df674237174f1c0128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 08:43:10 +0100 Subject: [PATCH 111/149] feat: smarter migrations Libs and core artifacts can be forced updated individually. Core/libs deps attended. --- migrations/scripts/2_libs.js | 3 +++ migrations/scripts/3_core.js | 6 +++++- migrations/scripts/4_proxies.js | 14 ++++++++++---- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index e5b5b13b0..cfac8690b 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -14,6 +14,8 @@ module.exports = async function (_, network, [, from]) { targets.WitnetPriceFeedsLib, ] + const selection = utils.getWitnetArtifactsFromArgs() + const deployer = await WitnetDeployer.deployed() for (const index in libs) { const key = libs[index] @@ -21,6 +23,7 @@ module.exports = async function (_, network, [, from]) { if ( utils.isNullAddress(addresses[network][key]) || (await web3.eth.getCode(addresses[network][key])).length < 3 + || selection.includes(key) ) { utils.traceHeader(`Deploying '${key}'...`) const libInitCode = artifact.toJSON().bytecode diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index bbc26a1ed..35a059403 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -67,11 +67,15 @@ async function deploy (specs) { const addresses = await utils.readAddresses() 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) @@ -82,7 +86,7 @@ async function deploy (specs) { if (immutables?.values) values = [...values, ...immutables.values] const constructorArgs = web3.eth.abi.encodeParameters(types, values) if (constructorArgs.length > 2) { - console.info(" ", "> constructor types:", types) + console.info(" ", "> constructor types:", JSON.stringify(types)) console.info(" ", "> constructor args: ", constructorArgs.slice(2)) } const coreBytecode = link(contract.toJSON().bytecode, libs, targets) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index e5af61855..b4dedfe44 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -3,11 +3,16 @@ 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 addresses = await utils.readAddresses(network) const targets = settings.getArtifacts(network) const specs = settings.getSpecs(network) @@ -94,11 +99,12 @@ async function deploy (target) { utils.traceHeader(`Upgrading '${key}'...`) const oldVersion = await oldImpl.version.call({ from }) 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(` > From v${oldVersion} to ${targets[key]} v${newVersion} ? (y/N) `)).toLowerCase().trim() - ) + ["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" From 3b0fbcbefd76bd32fe252a735d46786248978940 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 09:19:28 +0100 Subject: [PATCH 112/149] chore: refactor addresses file name --- migrations/{witnet.addresses.json => addresses.json} | 5 +++-- migrations/ops/rng/sla/1_set-randomness-sla.js | 2 +- scripts/addresses.js | 2 +- scripts/vanity2gen.js | 2 +- scripts/vanity3gen.js | 2 +- src/index.js | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) rename migrations/{witnet.addresses.json => addresses.json} (83%) diff --git a/migrations/witnet.addresses.json b/migrations/addresses.json similarity index 83% rename from migrations/witnet.addresses.json rename to migrations/addresses.json index 93f402465..4326f7c85 100644 --- a/migrations/witnet.addresses.json +++ b/migrations/addresses.json @@ -15,11 +15,12 @@ "WitnetRequestBoardTrustableDefault": "0x7FEf83f7078F6135C006E770251039e59F952D2E" }, "ten:testnet": { - "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", + "WitnetErrorsLib": "0x05F47A53598ff14899f7cdA2320E4D6059Aa2D91", "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", "WitnetBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", - "WitnetRequestBoardTrustableObscuro": "0xeAcf2949b6396d4fF973Ab8A0F085F18063D61aF" + "WitnetRequestBoardTrustableObscuro": "0x4b9afCCb4f1A1827B080b38ae23D09AbA2243ec3", + "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3" } } \ No newline at end of file diff --git a/migrations/ops/rng/sla/1_set-randomness-sla.js b/migrations/ops/rng/sla/1_set-randomness-sla.js index 0e53eeef1..50b753ff3 100644 --- a/migrations/ops/rng/sla/1_set-randomness-sla.js +++ b/migrations/ops/rng/sla/1_set-randomness-sla.js @@ -1,4 +1,4 @@ -const addresses = require("../../../witnet.addresses") +const addresses = require("../../../addresses") const utils = require("../../../../scripts/utils") const WitnetRandomness = artifacts.require("WitnetRandomness") diff --git a/scripts/addresses.js b/scripts/addresses.js index ba962c6d3..12af4b0e4 100644 --- a/scripts/addresses.js +++ b/scripts/addresses.js @@ -1,4 +1,4 @@ -let addresses = require("../migrations/witnet.addresses") +let addresses = require("../migrations/addresses") let realm, network if (process.argv.length >= 3) { network = process.argv[2].toLowerCase() diff --git a/scripts/vanity2gen.js b/scripts/vanity2gen.js index 489d1a693..4b3847d7a 100644 --- a/scripts/vanity2gen.js +++ b/scripts/vanity2gen.js @@ -3,7 +3,7 @@ const create2 = require("./eth-create2") const fs = require("fs") const utils = require("../src/utils") -const addresses = require("../migrations/witnet.addresses") +const addresses = require("../migrations/addresses") module.exports = async function () { let artifact diff --git a/scripts/vanity3gen.js b/scripts/vanity3gen.js index 24a7bed59..6b20d7e45 100644 --- a/scripts/vanity3gen.js +++ b/scripts/vanity3gen.js @@ -3,7 +3,7 @@ const create3 = require("./eth-create3") const fs = require("fs") const utils = require("../src/utils") -const addresses = require("../migrations/witnet.addresses") +const addresses = require("../migrations/addresses") module.exports = async function () { let count = 0 diff --git a/src/index.js b/src/index.js index f688d1a41..a516bdf99 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -const addresses = require("../migrations/witnet.addresses.json") +const addresses = require("../migrations/addresses.json") const merge = require("lodash.merge") const utils = require("./utils") module.exports = { From 72b60248095e2323c885bec3a5712f06e48f45d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 09:20:38 +0100 Subject: [PATCH 113/149] feat: create constructorArgs json file upon migrations --- migrations/constructorArgs.json | 5 +++++ migrations/scripts/1_deployer.js | 4 ++-- migrations/scripts/2_libs.js | 4 ++-- migrations/scripts/3_core.js | 6 ++++-- migrations/scripts/4_proxies.js | 4 ++-- migrations/scripts/5_apps.js | 4 ++-- package.json | 4 ++-- src/{utils/index.js => utils.js} | 37 +++++++++++++++++++++----------- src/utils/traceHeader.js | 5 ----- src/utils/traceTx.js | 12 ----------- 10 files changed, 44 insertions(+), 41 deletions(-) create mode 100644 migrations/constructorArgs.json rename src/{utils/index.js => utils.js} (74%) delete mode 100644 src/utils/traceHeader.js delete mode 100644 src/utils/traceTx.js diff --git a/migrations/constructorArgs.json b/migrations/constructorArgs.json new file mode 100644 index 000000000..a33db013e --- /dev/null +++ b/migrations/constructorArgs.json @@ -0,0 +1,5 @@ +{ + "ten:testnet": { + "WitnetRequestBoardTrustableObscuro": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d6466623331353500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" + } +} \ No newline at end of file diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index dff93b034..d4a97e3ac 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -3,7 +3,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (deployer, network, [,,, master]) { - const addresses = await utils.readAddresses() + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {}; const factoryAddr = addresses[network]?.WitnetDeployer || addresses?.default?.WitnetDeployer || "" @@ -15,7 +15,7 @@ module.exports = async function (deployer, network, [,,, master]) { const factory = await WitnetDeployer.deployed() addresses[network].WitnetDeployer = factory.address if (!utils.isDryRun(network)) { - await utils.saveAddresses(addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) } } else { const factory = await WitnetDeployer.at(factoryAddr) diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index cfac8690b..332711f19 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,7 +4,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const addresses = await utils.readAddresses() + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {}; const targets = settings.getArtifacts(network) @@ -39,7 +39,7 @@ module.exports = async function (_, network, [, from]) { process.exit(1) } if (!utils.isDryRun(network)) { - await utils.saveAddresses(addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) } } else { utils.traceHeader(`Skipped '${key}'`) diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 35a059403..82e44bd7c 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -65,7 +65,7 @@ module.exports = async function (_, network, [, from]) { async function deploy (specs) { const { from, key, libs, intrinsics, immutables, network, targets } = specs - const addresses = await utils.readAddresses() + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {}; const selection = utils.getWitnetArtifactsFromArgs() @@ -107,7 +107,9 @@ async function deploy (specs) { } // save addresses file if required if (!utils.isDryRun(network)) { - await utils.saveAddresses(addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2); + await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) } } else { utils.traceHeader(`Skipped '${key}'`) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index b4dedfe44..841b1dfc1 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -41,7 +41,7 @@ module.exports = async function (_, network, [, from, reporter]) { async function deploy (target) { const { from, key, network, specs, targets } = target - const addresses = await utils.readAddresses(network) + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {}; const mutables = specs[key].mutables @@ -89,7 +89,7 @@ async function deploy (target) { process.exit(1) } if (!utils.isDryRun(network)) { - await utils.saveAddresses(addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) } } else { const oldAddr = await getProxyImplementation(from, proxyAddr) diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index a5f2cda3d..fdea12d1b 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -30,7 +30,7 @@ module.exports = async function (_, network, [, from,, master]) { async function deploy (specs) { const { from, gas, key, libs, intrinsics, immutables, network, targets, vanity } = specs - const addresses = await utils.readAddresses() + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {}; const artifact = artifacts.require(key) @@ -69,7 +69,7 @@ async function deploy (specs) { } // save addresses file if required if (!utils.isDryRun(network)) { - await utils.saveAddresses(addresses) + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) } } else { utils.traceHeader(`Skipped '${key}'`) diff --git a/package.json b/package.json index 5f36da766..fc5c5721c 100644 --- a/package.json +++ b/package.json @@ -17,13 +17,13 @@ "exports": { ".": "./src/index.js", "./assets": "./src/index.js", - "./utils": "./src/utils/index.js" + "./utils": "./src/utils.js" }, "files": [ "artifacts", "build/contracts", "contracts", - "migrations/witnet.addresses.json", + "migrations/*.json", "settings", "src" ], diff --git a/src/utils/index.js b/src/utils.js similarity index 74% rename from src/utils/index.js rename to src/utils.js index accb4fb32..0a71e0a88 100644 --- a/src/utils/index.js +++ b/src/utils.js @@ -2,9 +2,7 @@ const fs = require("fs") require("dotenv").config() const lockfile = require("proper-lockfile") const readline = require("readline") - -const traceHeader = require("./traceHeader") -const traceTx = require("./traceTx") +const web3 = require("web3") module.exports = { fromAscii, @@ -16,8 +14,8 @@ module.exports = { isNullAddress, padLeft, prompt, - readAddresses, - saveAddresses, + readJsonFromFile, + overwriteJsonFile, traceHeader, traceTx, } @@ -115,18 +113,33 @@ async function prompt (text) { return answer } -async function readAddresses () { - const filename = "./migrations/witnet.addresses.json" +async function readJsonFromFile (filename) { lockfile.lockSync(filename) - const addrs = JSON.parse(await fs.readFileSync(filename)) + const json = JSON.parse(await fs.readFileSync(filename)) lockfile.unlockSync(filename) - return addrs || {} + return json|| {} } -async function saveAddresses (addrs) { - const filename = "./migrations/witnet.addresses.json" +async function overwriteJsonFile (filename, extra) { lockfile.lockSync(filename) - const json = { ...JSON.parse(fs.readFileSync(filename)), ...addrs }; + const json = { ...JSON.parse(fs.readFileSync(filename)), ...extra }; fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }) lockfile.unlockSync(filename) } + +function traceHeader (header) { + console.log("") + console.log(" ", header) + console.log(" ", `${"-".repeat(header.length)}`) +} + +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(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") + console.info(" ", "> total cost: ", web3.utils.fromWei( + BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), + "ether" + ), "ETH" + ) +} diff --git a/src/utils/traceHeader.js b/src/utils/traceHeader.js deleted file mode 100644 index de350909d..000000000 --- a/src/utils/traceHeader.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = function (header) { - console.log("") - console.log(" ", header) - console.log(" ", `${"-".repeat(header.length)}`) -} diff --git a/src/utils/traceTx.js b/src/utils/traceTx.js deleted file mode 100644 index 2a8f73679..000000000 --- a/src/utils/traceTx.js +++ /dev/null @@ -1,12 +0,0 @@ -const web3 = require("web3") - -module.exports = function (tx) { - console.info(" ", "> transaction hash: ", tx.receipt.transactionHash) - console.info(" ", "> gas used: ", tx.receipt.gasUsed.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",")) - console.info(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei( - BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), - "ether" - ), "ETH" - ) -} From 74edd20b4f935f321d969a174068856f1ef84aae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 17:53:41 +0100 Subject: [PATCH 114/149] fix(pfs): set collateral >= 20 wit as default --- contracts/apps/WitnetPriceFeeds.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 37826b989..7acd0785f 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -47,8 +47,8 @@ contract WitnetPriceFeeds ); witnet = _wrb; __settleDefaultRadonSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 10, - witnessingWitTotalReward: 10 ** 9 + witnessingCommitteeSize: 7, + witnessingWitTotalReward: 7 * 2 ** 8 })); } From 4ad5d0540ca89263bbd0cb858ae7dba7d04d6e3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 17:56:05 +0100 Subject: [PATCH 115/149] chore: move in WitnetPriceSolverBase --- contracts/apps/WitnetPriceSolverBase.sol | 62 +++++++++++++++++++ .../interfaces/V2/IWitnetPriceSolver.sol | 1 + contracts/libs/WitnetPriceFeedsLib.sol | 3 +- contracts/libs/WitnetV2.sol | 2 +- 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 contracts/apps/WitnetPriceSolverBase.sol diff --git a/contracts/apps/WitnetPriceSolverBase.sol b/contracts/apps/WitnetPriceSolverBase.sol new file mode 100644 index 000000000..c76de2cb3 --- /dev/null +++ b/contracts/apps/WitnetPriceSolverBase.sol @@ -0,0 +1,62 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.8.0 <0.9.0; + +import "../data/WitnetPriceFeedsData.sol"; +import "../interfaces/V2/IWitnetPriceFeeds.sol"; + +abstract contract WitnetPriceSolverBase + is + IWitnetPriceSolver, + WitnetPriceFeedsData +{ + address public immutable override delegator; + + modifier onlyDelegator { + require( + address(this) == delegator, + "WitnetPriceSolverBase: not the delegator" + ); + _; + } + + constructor() { + delegator = msg.sender; + } + + function specs() external pure returns (bytes4) { + return type(IWitnetPriceSolver).interfaceId; + } + + function validate(bytes4 feedId, string[] calldata deps) virtual override external { + bytes32 _depsFlag; + uint256 _innerDecimals; + require( + deps.length <= 8, + "WitnetPriceSolverBase: too many dependencies" + ); + for (uint _ix = 0; _ix < deps.length; _ix ++) { + bytes4 _depsId4 = bytes4(keccak256(bytes(deps[_ix]))); + Record storage __depsFeed = __records_(_depsId4); + require( + __depsFeed.index > 0, + string(abi.encodePacked( + "WitnetPriceSolverBase: unsupported ", + deps[_ix] + )) + ); + require( + _depsId4 != feedId, + string(abi.encodePacked( + "WitnetPriceSolverBase: loop on ", + deps[_ix] + )) + ); + _depsFlag |= (bytes32(_depsId4) >> (32 * _ix)); + _innerDecimals += __depsFeed.decimals; + } + Record storage __feed = __records_(feedId); + __feed.solverReductor = int(uint(__feed.decimals)) - int(_innerDecimals); + __feed.solverDepsFlag = _depsFlag; + } +} \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetPriceSolver.sol b/contracts/interfaces/V2/IWitnetPriceSolver.sol index 9cd5ce030..342c7b975 100644 --- a/contracts/interfaces/V2/IWitnetPriceSolver.sol +++ b/contracts/interfaces/V2/IWitnetPriceSolver.sol @@ -11,6 +11,7 @@ interface IWitnetPriceSolver { bytes32 tallyHash; WitnetV2.ResultStatus status; } + function class() external pure returns (string memory); function delegator() external view returns (address); function solve(bytes4 feedId) external view returns (Price memory); function specs() external pure returns (bytes4); diff --git a/contracts/libs/WitnetPriceFeedsLib.sol b/contracts/libs/WitnetPriceFeedsLib.sol index b16bf2ce5..c46d51630 100644 --- a/contracts/libs/WitnetPriceFeedsLib.sol +++ b/contracts/libs/WitnetPriceFeedsLib.sol @@ -37,7 +37,8 @@ library WitnetPriceFeedsLib { 0 ) } - assert(_solver == _createdContract); + // assert(_solver == _createdContract); // fails on TEN chains + _solver = _createdContract; require( IWitnetPriceSolver(_solver).specs() == type(IWitnetPriceSolver).interfaceId, "WitnetPriceFeedsLib: uncompliant solver implementation" diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 40f5eee52..873b4c85d 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -121,7 +121,7 @@ library WitnetV2 { minConsensusPercentage: 51, witnessReward: _witnessReward, witnessCollateral: _witnessReward * 100, - minerCommitRevealFee: _witnessReward * 3 + minerCommitRevealFee: _witnessReward }); } From 581daf67740aa652cd5f78dc0463d6b611812c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 17:56:38 +0100 Subject: [PATCH 116/149] feat: export gas and gasPrice on hardhat networks config --- hardhat.config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardhat.config.js b/hardhat.config.js index d9e12467a..b14caf745 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,6 +10,8 @@ module.exports = { .map(([network, config]) => { return [network, { chainId: config.network_id, + gas: config?.gas || "auto", + gasPrice: config?.gasPrice || "auto", url: `http://${config?.host || "localhost"}:${config?.port || 8545}` }] }) From 6b05a6d57aaa4aeaeee3b800cdf3baa69905f38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 17:57:05 +0100 Subject: [PATCH 117/149] chore: export IWitnetPriceSolver artifact --- src/index.js | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/index.js b/src/index.js index a516bdf99..6ed51d3f3 100644 --- a/src/index.js +++ b/src/index.js @@ -31,12 +31,13 @@ module.exports = { supportedNetworks, artifacts: { WitnetBytecodes: require("../artifacts/contracts/WitnetBytecodes.sol/WitnetBytecodes.json"), - WitnetPriceFeeds: require("../artifacts//contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), - WitnetRequest: require("../artifacts//contracts/WitnetRequest.sol/WitnetRequest.json"), - WitnetRequestBoard: require("../artifacts//contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), - WitnetRequestFactory: require("../artifacts//contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), - WitnetRequestTemplate: require("../artifacts//contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), - WitnetUpgradableBase: require("../artifacts//contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), + WitnetPriceFeeds: require("../artifacts/contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), + WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), + WitnetRequestBoard: require("../artifacts/contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), + WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), + WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), + WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), + IWitnetPriceSolver: require("../artifacts/contracts/interfaces/V2/IWitnetPriceSolver.sol/IWitnetPriceSolver.json") }, settings: require("../settings"), utils, From 550ee8b582d153f8eb40d51b5e560ab284de910e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 17:57:39 +0100 Subject: [PATCH 118/149] feat: populate constructorArgs files on migrations --- migrations/constructorArgs.json | 2 +- migrations/scripts/5_apps.js | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/migrations/constructorArgs.json b/migrations/constructorArgs.json index a33db013e..4a0321297 100644 --- a/migrations/constructorArgs.json +++ b/migrations/constructorArgs.json @@ -1,5 +1,5 @@ { "ten:testnet": { - "WitnetRequestBoardTrustableObscuro": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d6466623331353500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" + "WitnetPriceFeeds": "000000000000000000000000f121b71715e71dded592f1125a06d4ed06f0694d00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b1000" } } \ No newline at end of file diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js index fdea12d1b..18708907a 100644 --- a/migrations/scripts/5_apps.js +++ b/migrations/scripts/5_apps.js @@ -35,9 +35,16 @@ async function deploy (specs) { const artifact = artifacts.require(key) const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" + + const selection = utils.getWitnetArtifactsFromArgs() let dappAddr = addresses[network][key] || addresses?.default[key] || "" - if (utils.isNullAddress(dappAddr) || (await web3.eth.getCode(dappAddr)).length < 3) { + if ( + utils.isNullAddress(dappAddr) + || (await web3.eth.getCode(dappAddr)).length < 3 + || selection.includes(key) + || (libs && selection.filter(item => libs.includes(item)).length > 0) + ) { utils.traceHeader(`Deploying '${key}'...`) const deployer = await WitnetDeployer.deployed() let { types, values } = intrinsics @@ -70,6 +77,8 @@ async function deploy (specs) { // save addresses file if required if (!utils.isDryRun(network)) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2); + await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) } } else { utils.traceHeader(`Skipped '${key}'`) From 71488ccc1ee0a82c5a3118061ba4462b1262be87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Tue, 13 Feb 2024 19:58:31 +0100 Subject: [PATCH 119/149] fix(pfs): default sla params --- contracts/apps/WitnetPriceFeeds.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/apps/WitnetPriceFeeds.sol index 7acd0785f..3311d9515 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/apps/WitnetPriceFeeds.sol @@ -48,7 +48,7 @@ contract WitnetPriceFeeds witnet = _wrb; __settleDefaultRadonSLA(WitnetV2.RadonSLA({ witnessingCommitteeSize: 7, - witnessingWitTotalReward: 7 * 2 ** 8 + witnessingWitTotalReward: (2 * (7 + 3)) * 10 ** 8 })); } From 14673038b2e6694b520d8cac166c0aba2b06dbef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:00:06 +0100 Subject: [PATCH 120/149] chore: refactor WPF as core artifact --- contracts/WitnetPriceFeeds.sol | 26 ++++ contracts/apps/WitnetFeeds.sol | 14 +- .../defaults/WitnetPriceFeedsDefault.sol} | 132 ++++++++++++------ contracts/mocks/WitnetMockedPriceFeeds.sol | 14 +- contracts/patterns/Proxiable.sol | 1 + migrations/scripts/3_core.js | 25 +++- migrations/scripts/4_proxies.js | 6 +- migrations/scripts/5_apps.js | 110 --------------- settings/artifacts.js | 2 +- settings/specs.js | 1 + 10 files changed, 164 insertions(+), 167 deletions(-) create mode 100644 contracts/WitnetPriceFeeds.sol rename contracts/{apps/WitnetPriceFeeds.sol => core/defaults/WitnetPriceFeedsDefault.sol} (86%) delete mode 100644 migrations/scripts/5_apps.js diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol new file mode 100644 index 000000000..7eaed4789 --- /dev/null +++ b/contracts/WitnetPriceFeeds.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; + +import "./apps/WitnetFeeds.sol"; + +import "./interfaces/V2/IWitnetPriceFeeds.sol"; +import "./interfaces/V2/IWitnetPriceSolverDeployer.sol"; + +/// @title WitnetPriceFeeds: Price Feeds live repository reliant on the Witnet Oracle blockchain. +/// @author The Witnet Foundation. +abstract contract WitnetPriceFeeds + is + WitnetFeeds, + IWitnetPriceFeeds, + IWitnetPriceSolverDeployer +{ + function class() override external pure returns (string memory) { + return type(WitnetPriceFeeds).name; + } + + constructor() + WitnetFeeds(Witnet.RadonDataTypes.Integer, "Price-") + {} + +} diff --git a/contracts/apps/WitnetFeeds.sol b/contracts/apps/WitnetFeeds.sol index 0eb7ef337..ea2f1648a 100644 --- a/contracts/apps/WitnetFeeds.sol +++ b/contracts/apps/WitnetFeeds.sol @@ -6,15 +6,21 @@ import "../interfaces/V2/IFeeds.sol"; import "../interfaces/V2/IWitnetFeeds.sol"; import "../interfaces/V2/IWitnetFeedsAdmin.sol"; +import "ado-contracts/contracts/interfaces/IERC2362.sol"; + abstract contract WitnetFeeds is + IERC2362, IFeeds, IWitnetFeeds, - IWitnetFeedsAdmin + IWitnetFeedsAdmin, + IWitnetRequestBoardEvents { Witnet.RadonDataTypes immutable public override dataType; - bytes32 immutable internal __prefix; + function class() virtual external view returns (string memory); + function specs() virtual external view returns (bytes4); + function witnet() virtual external view returns (WitnetRequestBoard); constructor( Witnet.RadonDataTypes _dataType, @@ -25,7 +31,9 @@ abstract contract WitnetFeeds __prefix = Witnet.toBytes32(bytes(_prefix)); } + bytes32 immutable internal __prefix; + function prefix() override public view returns (string memory) { return Witnet.toString(__prefix); } -} \ No newline at end of file +} diff --git a/contracts/apps/WitnetPriceFeeds.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol similarity index 86% rename from contracts/apps/WitnetPriceFeeds.sol rename to contracts/core/defaults/WitnetPriceFeedsDefault.sol index 3311d9515..730fbcbee 100644 --- a/contracts/apps/WitnetPriceFeeds.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -3,48 +3,44 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "ado-contracts/contracts/interfaces/IERC2362.sol"; - -import "./WitnetFeeds.sol"; -import "../WitnetRequestBoard.sol"; -import "../data/WitnetPriceFeedsData.sol"; -import "../interfaces/V2/IWitnetPriceFeeds.sol"; -import "../interfaces/V2/IWitnetPriceSolver.sol"; -import "../interfaces/V2/IWitnetPriceSolverDeployer.sol"; -import "../libs/WitnetPriceFeedsLib.sol"; -import "../patterns/Ownable2Step.sol"; - -/// @title WitnetPriceFeeds: Price Feeds oracle reliant on the Witnet Solidity Bridge. +import "../WitnetUpgradableBase.sol"; + +import "../../WitnetPriceFeeds.sol"; + +import "../../data/WitnetPriceFeedsData.sol"; +import "../../libs/WitnetPriceFeedsLib.sol"; +import "../../patterns/Ownable2Step.sol"; + +/// @title WitnetPriceFeedsDefault: Price Feeds live repository reliant on the Witnet Oracle blockchain. /// @author Guillermo Díaz -contract WitnetPriceFeeds +contract WitnetPriceFeedsDefault is - IERC2362, - IWitnetPriceFeeds, - IWitnetPriceSolverDeployer, - IWitnetRequestBoardEvents, Ownable2Step, - WitnetFeeds, - WitnetPriceFeedsData + WitnetPriceFeeds, + WitnetPriceFeedsData, + WitnetUpgradableBase + { using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.Response; using WitnetV2 for WitnetV2.RadonSLA; - bytes4 immutable public specs = type(IWitnetPriceFeeds).interfaceId; + bytes4 immutable public override specs = type(IWitnetPriceFeeds).interfaceId; WitnetRequestBoard immutable public override witnet; - constructor(address _operator, WitnetRequestBoard _wrb) - Ownable(_operator) - WitnetFeeds( - Witnet.RadonDataTypes.Integer, - "Price-" + constructor( + WitnetRequestBoard _wrb, + bool _upgradable, + bytes32 _versionTag + ) + Ownable(address(msg.sender)) + WitnetUpgradableBase( + _upgradable, + _versionTag, + "io.witnet.proxiable.feeds.price" ) { - require( - _wrb.specs() == type(IWitnetRequestBoard).interfaceId, - "WitnetPriceFeeds: uncompliant request board" - ); witnet = _wrb; __settleDefaultRadonSLA(WitnetV2.RadonSLA({ witnessingCommitteeSize: 7, @@ -53,7 +49,7 @@ contract WitnetPriceFeeds } // solhint-disable-next-line payable-fallback - fallback() external { + fallback() override external { if ( msg.sig == IWitnetPriceSolver.solve.selector && msg.sender == address(this) @@ -61,7 +57,7 @@ contract WitnetPriceFeeds address _solver = __records_(bytes4(bytes8(msg.data) << 32)).solver; require( _solver != address(0), - "WitnetPriceFeeds: unsettled solver" + "WitnetPriceFeedsDefault: unsettled solver" ); assembly { let ptr := mload(0x40) @@ -74,11 +70,63 @@ contract WitnetPriceFeeds default { return(ptr, size) } } } else { - revert("WitnetPriceFeeds: not implemented"); + revert("WitnetPriceFeedsDefault: not implemented"); } } + // ================================================================================================================ + // --- 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); + } else { + // only the owner can initialize: + require( + msg.sender == _owner, + "WitnetPriceFeedsDefault: not the owner" + ); + } + + if ( + __proxiable().codehash != bytes32(0) + && __proxiable().codehash == codehash() + ) { + revert("WitnetPriceFeedsDefault: already upgraded"); + } + __proxiable().codehash = codehash(); + + require( + address(witnet).code.length > 0, + "WitnetPriceFeedsDefault: inexistent oracle" + ); + require( + witnet.specs() == type(IWitnetRequestBoard).interfaceId, + "WitnetPriceFeedsDefault: 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(); + return ( + // false if the WRB is intrinsically not upgradable, or `_from` is no owner + isUpgradable() + && _owner == _from + ); + } + + // ================================================================================================================ // --- Implements 'IFeeds' ---------------------------------------------------------------------------------------- @@ -206,7 +254,7 @@ contract WitnetPriceFeeds Record storage __record = __records_(feedId); require( __record.radHash != 0, - "WitnetPriceFeeds: no RAD hash" + "WitnetPriceFeedsDefault: no RAD hash" ); return registry().bytecodeOf(__record.radHash); } @@ -251,7 +299,7 @@ contract WitnetPriceFeeds { require( updateSLA.equalOrGreaterThan(WitnetV2.toRadonSLA(__storage().packedDefaultSLA)), - "WitnetPriceFeeds: unsecure update" + "WitnetPriceFeedsDefault: unsecure update" ); return __requestUpdate(feedId, updateSLA); } @@ -300,7 +348,7 @@ contract WitnetPriceFeeds bytes4[] storage __ids = __storage().ids; Record storage __record = __records_(feedId); uint _index = __record.index; - require(_index != 0, "WitnetPriceFeeds: unknown feed"); + require(_index != 0, "WitnetPriceFeedsDefault: unknown feed"); { bytes4 _lastFeedId = __ids[__ids.length - 1]; __ids[_index - 1] = _lastFeedId; @@ -323,7 +371,7 @@ contract WitnetPriceFeeds { require( registry().lookupRadonRequestResultDataType(radHash) == dataType, - "WitnetPriceFeeds: bad result data type" + "WitnetPriceFeedsDefault: bad result data type" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -370,7 +418,7 @@ contract WitnetPriceFeeds { require( solver != address(0), - "WitnetPriceFeeds: no solver address" + "WitnetPriceFeedsDefault: no solver address" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -416,7 +464,7 @@ contract WitnetPriceFeeds _reason := add(_reason, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeeds: smoke-test failed: ", + "WitnetPriceFeedsDefault: smoke-test failed: ", string(abi.decode(_reason,(string))) ))); } @@ -477,7 +525,7 @@ contract WitnetPriceFeeds _result := add(_result, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeeds: ", + "WitnetPriceFeedsDefault: ", string(abi.decode(_result, (string))) ))); } else { @@ -592,7 +640,7 @@ contract WitnetPriceFeeds return _decimals; } catch Error(string memory reason) { revert(string(abi.encodePacked( - "WitnetPriceFeeds: ", + "WitnetPriceFeedsDefault: ", reason ))); } @@ -617,7 +665,7 @@ contract WitnetPriceFeeds _usedFunds = estimateUpdateBaseFee(tx.gasprice); require( msg.value >= _usedFunds, - "WitnetPriceFeeds: insufficient reward" + "WitnetPriceFeedsDefault: insufficient reward" ); uint _latestId = __feed.latestUpdateQueryId; WitnetV2.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); @@ -665,7 +713,7 @@ contract WitnetPriceFeeds querySLA ); } else { - revert("WitnetPriceFeeds: unknown feed"); + revert("WitnetPriceFeedsDefault: unknown feed"); } if (_usedFunds < msg.value) { // transfer back unused funds: diff --git a/contracts/mocks/WitnetMockedPriceFeeds.sol b/contracts/mocks/WitnetMockedPriceFeeds.sol index b16e883a0..6d1efb169 100644 --- a/contracts/mocks/WitnetMockedPriceFeeds.sol +++ b/contracts/mocks/WitnetMockedPriceFeeds.sol @@ -3,18 +3,20 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../apps/WitnetPriceFeeds.sol"; +import "./WitnetMockedRequestBoard.sol"; +import "../core/defaults/WitnetPriceFeedsDefault.sol"; /// @title Mocked implementation of `WitnetPriceFeeds`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE /// @dev THE `WitnetPriceFeeds` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. -contract WitnetMockedPriceFeeds is WitnetPriceFeeds { - constructor(WitnetRequestBoard _wrb) - WitnetPriceFeeds( - msg.sender, - _wrb +contract WitnetMockedPriceFeeds is WitnetPriceFeedsDefault { + constructor(WitnetMockedRequestBoard _wrb) + WitnetPriceFeedsDefault( + _wrb, + false, + bytes32("mocked") ) {} } diff --git a/contracts/patterns/Proxiable.sol b/contracts/patterns/Proxiable.sol index 966c5802d..a2eb2bf73 100644 --- a/contracts/patterns/Proxiable.sol +++ b/contracts/patterns/Proxiable.sol @@ -10,6 +10,7 @@ abstract contract Proxiable { struct ProxiableSlot { address implementation; address proxy; + bytes32 codehash; } function __implementation() internal view returns (address) { diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 82e44bd7c..1ee23c192 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -15,7 +15,8 @@ module.exports = async function (_, network, [, from]) { const targets = settings.getArtifacts(network) // Deploy/upgrade WitnetBytecodes target implementation, if required - await deploy({ network, from, targets, + await deploy({ network, targets, + from: utils.isDryRun(network) ? from : specs.WitnetBytecodes.from || from, key: targets.WitnetBytecodes, libs: specs.WitnetBytecodes.libs, immutables: specs.WitnetBytecodes.immutables, @@ -29,7 +30,8 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestFactory target implementation, if required - await deploy({ network, from, targets, + await deploy({ network, targets, + from: utils.isDryRun(network) ? from : specs.WitnetRequestFactory.from || from, key: targets.WitnetRequestFactory, libs: specs.WitnetRequestFactory.libs, immutables: specs.WitnetRequestFactory.immutables, @@ -45,7 +47,8 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestBoard target implementation, if required - await deploy({ network, from, targets, + await deploy({ network, targets, + from: utils.isDryRun(network) ? from : specs.WitnetRequestBoard.from || from, key: targets.WitnetRequestBoard, libs: specs.WitnetRequestBoard.libs, immutables: specs.WitnetRequestBoard.immutables, @@ -60,6 +63,22 @@ module.exports = async function (_, network, [, from]) { }, }) + // Deploy/upgrade WitnetPriceFeeds target implementation, if required + await deploy({ network, targets, + from: utils.isDryRun(network) ? from : specs.WitnetPriceFeeds.from || from, + key: targets.WitnetPriceFeeds, + libs: specs.WitnetPriceFeeds.libs, + immutables: specs.WitnetPriceFeeds.immutables, + intrinsics: { + types: ["address", "bool", "bytes32"], + values: [ + /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + /* _upgradable */ true, + /* _versionTag */ utils.fromAscii(version), + ], + }, + }) + } async function deploy (specs) { diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 841b1dfc1..5d7fb2652 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -21,6 +21,7 @@ module.exports = async function (_, network, [, from, reporter]) { "WitnetBytecodes", "WitnetRequestFactory", "WitnetRequestBoard", + "WitnetPriceFeeds", ] // inject `reporter` within array of addresses as first initialization args @@ -32,8 +33,9 @@ module.exports = async function (_, network, [, from, reporter]) { // Deploy/upgrade singleton proxies, if required for (const index in singletons) { - await deploy({ network, from, specs, targets, - key: singletons[index], + const key = singletons[index] + await deploy({ network, specs, targets, key, + from: utils.isDryRun(network) ? from : specs[key].from || from, }) } } diff --git a/migrations/scripts/5_apps.js b/migrations/scripts/5_apps.js deleted file mode 100644 index 18708907a..000000000 --- a/migrations/scripts/5_apps.js +++ /dev/null @@ -1,110 +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,, master]) { - - const specs = settings.getSpecs(network) - const targets = settings.getArtifacts(network) - - // Deploy the WitnetPriceFeeds oracle, if required - await deploy({ network, from, targets, - key: targets.WitnetPriceFeeds, - gas: specs.WitnetPriceFees?.gas || 6000000, - libs: specs.WitnetPriceFeeds.libs, - vanity: specs.WitnetPriceFeeds?.vanity || 0, - immutables: specs.WitnetPriceFeeds.immutables, - intrinsics: { - types: ["address", "address"], - values: [ - /* _operator */ master, - /* _wrb */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - ], - }, - }) - -} - -async function deploy (specs) { - const { from, gas, key, libs, intrinsics, immutables, network, targets, vanity } = specs - - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {}; - - const artifact = artifacts.require(key) - const salt = vanity ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(vanity), 32).toString("hex") : "0x0" - - const selection = utils.getWitnetArtifactsFromArgs() - - let dappAddr = addresses[network][key] || addresses?.default[key] || "" - if ( - utils.isNullAddress(dappAddr) - || (await web3.eth.getCode(dappAddr)).length < 3 - || selection.includes(key) - || (libs && selection.filter(item => libs.includes(item)).length > 0) - ) { - utils.traceHeader(`Deploying '${key}'...`) - 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:", types) - console.info(" ", "> constructor args: ", constructorArgs.slice(2)) - } - const coreBytecode = link(artifact.toJSON().bytecode, libs, targets) - if (coreBytecode.indexOf("__") > -1) { - console.info(coreBytecode) - console.info("Cannot deploy due to some missing libs") - process.exit(1) - } - const dappInitCode = coreBytecode + constructorArgs.slice(2) - const dappAddr = await deployer.determineAddr.call(dappInitCode, salt, { from }) - console.info(" ", "> account: ", from) - console.info(" ", "> balance: ", web3.utils.fromWei(await web3.eth.getBalance(from), "ether"), "ETH") - const tx = await deployer.deploy(dappInitCode, salt, { gas, from }) - utils.traceTx(tx) - if ((await web3.eth.getCode(dappAddr)).length > 3) { - addresses[network][key] = dappAddr - } else { - console.info(`Contract was not deployed on expected address: ${dappAddr}`) - console.log(tx.receipt) - process.exit(1) - } - // save addresses file if required - if (!utils.isDryRun(network)) { - await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2); - await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) - } - } else { - utils.traceHeader(`Skipped '${key}'`) - } - artifact.address = dappAddr - console.info(" ", "> contract address: ", artifact.address) - console.info(" ", "> contract codehash:", web3.utils.soliditySha3(await web3.eth.getCode(artifact.address))) - console.info() - return artifact -} - -async function determineProxyAddr (from, nonce) { - const salt = nonce ? "0x" + ethUtils.setLengthLeft(ethUtils.toBuffer(nonce), 32).toString("hex") : "0x0" - const deployer = await WitnetDeployer.deployed() - const addr = await deployer.determineProxyAddr.call(salt, { from }) - return addr -} - -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 79560e01b..6884a706e 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -3,7 +3,7 @@ module.exports = { WitnetBytecodes: "WitnetBytecodesDefault", WitnetEncodingLib: "WitnetEncodingLib", WitnetErrorsLib: "WitnetErrorsLib", - WitnetPriceFeeds: "WitnetPriceFeeds", + WitnetPriceFeeds: "WitnetPriceFeedsDefault", WitnetPriceFeedsLib: "WitnetPriceFeedsLib", WitnetRandomness: "WitnetRandomness", WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", diff --git a/settings/specs.js b/settings/specs.js index fb292c698..ec9a1eae5 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -24,6 +24,7 @@ module.exports = { vanity: 7945530998, // 0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000 }, WitnetPriceFeeds: { + from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", libs: ["WitnetPriceFeedsLib"], vanity: 7089974217, // 0x000080d4d4896c2c5959883430495AD58436E000 }, From b6e1a0859b1a1e3ac156c965975ccb26f81cc0ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:04:12 +0100 Subject: [PATCH 121/149] chore: fmt! --- hardhat.config.js | 82 ++++++++++++++++---------------- migrations/scripts/1_deployer.js | 6 +-- migrations/scripts/2_libs.js | 8 ++-- migrations/scripts/3_core.js | 34 +++++++------ migrations/scripts/4_proxies.js | 21 ++++---- scripts/prepare.js | 6 +-- settings/artifacts.js | 2 +- settings/index.js | 8 ++-- src/index.js | 12 ++--- src/utils.js | 36 +++++++------- 10 files changed, 111 insertions(+), 104 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index b14caf745..c4280fcba 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -1,47 +1,47 @@ -require("@nomicfoundation/hardhat-verify"); +require("@nomicfoundation/hardhat-verify") const settings = require("./settings") const utils = require("./src/utils") const [, target] = utils.getRealmNetworkFromArgs() module.exports = { - networks: Object.fromEntries( - Object.entries(settings.getNetworks()) - .map(([network, config]) => { - return [network, { - chainId: config.network_id, - gas: config?.gas || "auto", - gasPrice: config?.gasPrice || "auto", - url: `http://${config?.host || "localhost"}:${config?.port || 8545}` - }] - }) - ), - solidity: settings.getCompilers(target), - sourcify: { - enabled: true, - apiUrl: "https://sourcify.dev/server", - browserUrl: "https://repo.sourcify.dev", - }, - etherscan: { - apiKey: Object.fromEntries( - Object.entries(settings.getNetworks()) - .filter(([,config]) => config?.verify) - .map(([network, config]) => { - const [ecosystem,] = utils.getRealmNetworkFromString(network) - return [network, config?.verify?.apiKey ?? `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY`] - }), - ), - customChains: Object.entries(settings.getNetworks()) - .filter(([,config]) => config?.verify) - .map(([network, config]) => { - return { - network, - chainId: config.network_id, - urls: { - apiURL: config?.apiUrl, - browserURL: config?.browserUrl - } - } - }), - } -}; + networks: Object.fromEntries( + Object.entries(settings.getNetworks()) + .map(([network, config]) => { + return [network, { + chainId: config.network_id, + gas: config?.gas || "auto", + gasPrice: config?.gasPrice || "auto", + url: `http://${config?.host || "localhost"}:${config?.port || 8545}`, + }] + }) + ), + solidity: settings.getCompilers(target), + sourcify: { + enabled: true, + apiUrl: "https://sourcify.dev/server", + browserUrl: "https://repo.sourcify.dev", + }, + etherscan: { + apiKey: Object.fromEntries( + Object.entries(settings.getNetworks()) + .filter(([, config]) => config?.verify) + .map(([network, config]) => { + const [ecosystem] = utils.getRealmNetworkFromString(network) + return [network, config?.verify?.apiKey ?? `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY`] + }), + ), + customChains: Object.entries(settings.getNetworks()) + .filter(([, config]) => config?.verify) + .map(([network, config]) => { + return { + network, + chainId: config.network_id, + urls: { + apiURL: config?.apiUrl, + browserURL: config?.browserUrl, + }, + } + }), + }, +} diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index d4a97e3ac..5e419e172 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -4,12 +4,12 @@ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (deployer, network, [,,, master]) { const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {}; + if (!addresses[network]) addresses[network] = {} const factoryAddr = addresses[network]?.WitnetDeployer || addresses?.default?.WitnetDeployer || "" if ( - utils.isNullAddress(factoryAddr) - || (await web3.eth.getCode(factoryAddr)).length < 3 + utils.isNullAddress(factoryAddr) || + (await web3.eth.getCode(factoryAddr)).length < 3 ) { await deployer.deploy(WitnetDeployer, { from: master }) const factory = await WitnetDeployer.deployed() diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 332711f19..859fe8aa9 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -5,7 +5,7 @@ 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]) addresses[network] = {} const targets = settings.getArtifacts(network) const libs = [ @@ -21,9 +21,9 @@ module.exports = async function (_, network, [, from]) { const key = libs[index] const artifact = artifacts.require(key) if ( - utils.isNullAddress(addresses[network][key]) - || (await web3.eth.getCode(addresses[network][key])).length < 3 - || selection.includes(key) + utils.isNullAddress(addresses[network][key]) || + (await web3.eth.getCode(addresses[network][key])).length < 3 || + selection.includes(key) ) { utils.traceHeader(`Deploying '${key}'...`) const libInitCode = artifact.toJSON().bytecode diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 1ee23c192..1d3bfb65e 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -10,12 +10,13 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) // Deploy/upgrade WitnetBytecodes target implementation, if required - await deploy({ network, targets, + await deploy({ + network, + targets, from: utils.isDryRun(network) ? from : specs.WitnetBytecodes.from || from, key: targets.WitnetBytecodes, libs: specs.WitnetBytecodes.libs, @@ -30,7 +31,9 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestFactory target implementation, if required - await deploy({ network, targets, + await deploy({ + network, + targets, from: utils.isDryRun(network) ? from : specs.WitnetRequestFactory.from || from, key: targets.WitnetRequestFactory, libs: specs.WitnetRequestFactory.libs, @@ -47,7 +50,9 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetRequestBoard target implementation, if required - await deploy({ network, targets, + await deploy({ + network, + targets, from: utils.isDryRun(network) ? from : specs.WitnetRequestBoard.from || from, key: targets.WitnetRequestBoard, libs: specs.WitnetRequestBoard.libs, @@ -64,7 +69,9 @@ module.exports = async function (_, network, [, from]) { }) // Deploy/upgrade WitnetPriceFeeds target implementation, if required - await deploy({ network, targets, + await deploy({ + network, + targets, from: utils.isDryRun(network) ? from : specs.WitnetPriceFeeds.from || from, key: targets.WitnetPriceFeeds, libs: specs.WitnetPriceFeeds.libs, @@ -78,23 +85,22 @@ module.exports = async function (_, network, [, from]) { ], }, }) - } 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] = {}; + 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.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) @@ -127,7 +133,7 @@ async function deploy (specs) { // save addresses file if required if (!utils.isDryRun(network)) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2); + const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2) await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) } } else { diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 5d7fb2652..b25a5a8f3 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -13,7 +13,6 @@ 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) @@ -34,7 +33,11 @@ module.exports = async function (_, network, [, from, reporter]) { // Deploy/upgrade singleton proxies, if required for (const index in singletons) { const key = singletons[index] - await deploy({ network, specs, targets, key, + await deploy({ + network, + specs, + targets, + key, from: utils.isDryRun(network) ? from : specs[key].from || from, }) } @@ -42,10 +45,10 @@ module.exports = async function (_, network, [, from, reporter]) { async function deploy (target) { const { from, key, network, specs, targets } = target - + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") - if (!addresses[network]) addresses[network] = {}; - + if (!addresses[network]) addresses[network] = {} + const mutables = specs[key].mutables const proxy = artifacts.require(key) const proxySalt = specs[key].vanity @@ -95,17 +98,15 @@ async function deploy (target) { } } else { const oldAddr = await getProxyImplementation(from, proxyAddr) - const oldImpl = await artifacts.require(targets[key]).at(oldAddr) const newImpl = await artifacts.require(targets[key]).deployed() if (oldAddr !== newImpl.address) { utils.traceHeader(`Upgrading '${key}'...`) - const oldVersion = await oldImpl.version.call({ from }) const newVersion = await newImpl.version.call({ from }) - const color = newVersion === version ? `\x1b[1;97m` : `\x1b[93m` + 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) `) + ["y", "yes"].includes((await + utils.prompt(` > Upgrade to ${color}${targets[key]} v${newVersion}\x1b[0m? (y/N) `) ).toLowerCase().trim()) ) ) { diff --git a/scripts/prepare.js b/scripts/prepare.js index f8e36ecc0..4d7b78449 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -4,12 +4,12 @@ const fs = require("fs") if (fs.existsSync("./artifacts")) { if (os.type() === "Windows_NT") { - exec(`del /s /q artifacts\\*.dbg.json`) + exec("del /s /q artifacts\\*.dbg.json") } else { - exec(`find ./artifacts -name '*.dbg.json' -exec rm -r {} \;`) + exec("find ./artifacts -name *.dbg.json -exec rm -r {} \\;") } } if (fs.existsSync("./build/contracts")) { - exec(`sed -i -- "/\bsourcePath\b/d" build/contracts/*.json`) + exec("sed -i -- \"/\bsourcePath\b/d\" build/contracts/*.json") } diff --git a/settings/artifacts.js b/settings/artifacts.js index 6884a706e..3ed367df9 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -38,5 +38,5 @@ module.exports = { }, ten: { WitnetRequestBoard: "WitnetRequestBoardTrustableObscuro", - } + }, } diff --git a/settings/index.js b/settings/index.js index f0e8341e7..b055264fd 100644 --- a/settings/index.js +++ b/settings/index.js @@ -24,7 +24,7 @@ module.exports = { }, getNetworks: () => { return Object.fromEntries(Object.entries(networks) - .filter(entry => entry[0].indexOf(":") >-1) + .filter(entry => entry[0].indexOf(":") > -1) .map(entry => { const [ecosystem, network] = utils.getRealmNetworkFromString(entry[0]) return [ @@ -32,10 +32,10 @@ module.exports = { { ...networks.default }, networks[ecosystem], networks[entry[0]] - ) - ]; + ), + ] }) - ); + ) }, getSpecs: (network) => { const [eco, net] = utils.getRealmNetworkFromArgs(network) diff --git a/src/index.js b/src/index.js index 6ed51d3f3..32faf1046 100644 --- a/src/index.js +++ b/src/index.js @@ -12,20 +12,20 @@ module.exports = { ) return { WitnetPriceFeeds: merged?.WitnetPriceFeeds, - WitnetRequestBoard: merged?.WitnetRequestBoard, + WitnetRequestBoard: merged?.WitnetRequestBoard, } } else { return {} } }, supportedEcosystems: () => { - let ecosystems = [] + const ecosystems = [] supportedNetworks().forEach(network => { - const [ecosystem,] = utils.getRealmNetworkFromString(network) + const [ecosystem] = utils.getRealmNetworkFromString(network) if (!ecosystems.includes(ecosystem)) { ecosystems.push(ecosystem) } - }); + }) return ecosystems }, supportedNetworks, @@ -37,13 +37,13 @@ module.exports = { WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), - IWitnetPriceSolver: require("../artifacts/contracts/interfaces/V2/IWitnetPriceSolver.sol/IWitnetPriceSolver.json") + IWitnetPriceSolver: require("../artifacts/contracts/interfaces/V2/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), }, settings: require("../settings"), utils, } -function supportedNetworks(ecosystem) { +function supportedNetworks (ecosystem) { return Object .entries(addresses) .filter(value => value[0].indexOf(":") > -1 && (!ecosystem || value[0].startsWith(ecosystem))) diff --git a/src/utils.js b/src/utils.js index 0a71e0a88..e0b1ab6e6 100644 --- a/src/utils.js +++ b/src/utils.js @@ -49,28 +49,28 @@ function getRealmNetworkFromString (network) { } } -function getWitnetRequestMethodString(method) { +function getWitnetRequestMethodString (method) { if (!method) { - return "HTTP-GET" + return "HTTP-GET" } else { - const strings = { - 0: "UNKNOWN", - 1: "HTTP-GET", - 2: "RNG", - 3: "HTTP-POST", - 4: "HTTP-HEAD", - } - return strings[method] || method.toString() + const strings = { + 0: "UNKNOWN", + 1: "HTTP-GET", + 2: "RNG", + 3: "HTTP-POST", + 4: "HTTP-HEAD", + } + return strings[method] || method.toString() } } -function getWitnetArtifactsFromArgs() { +function getWitnetArtifactsFromArgs () { let selection = [] process.argv.map((argv, index, args) => { - if (argv === "--artifacts") { - selection = args[index + 1].split(",") - } - return argv + if (argv === "--artifacts") { + selection = args[index + 1].split(",") + } + return argv }) return selection }; @@ -79,7 +79,7 @@ function isDryRun (network) { return network === "test" || network.split("-")[1] === "fork" || network.split("-")[0] === "develop" } -function isNullAddress(addr) { +function isNullAddress (addr) { return !addr || addr === "" || addr === "0x0000000000000000000000000000000000000000" @@ -117,12 +117,12 @@ async function readJsonFromFile (filename) { lockfile.lockSync(filename) const json = JSON.parse(await fs.readFileSync(filename)) lockfile.unlockSync(filename) - return json|| {} + return json || {} } async function overwriteJsonFile (filename, extra) { lockfile.lockSync(filename) - const json = { ...JSON.parse(fs.readFileSync(filename)), ...extra }; + const json = { ...JSON.parse(fs.readFileSync(filename)), ...extra } fs.writeFileSync(filename, JSON.stringify(json, null, 4), { flag: "w+" }) lockfile.unlockSync(filename) } From e91874ff99273ffe98d701b2b627633dae2f4c71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:13:39 +0100 Subject: [PATCH 122/149] chore: refactor *Witnet*Bytecodes -> *Witnet*RequestBytecodes --- contracts/WitnetRequestBoard.sol | 4 +-- ...tecodes.sol => WitnetRequestBytecodes.sol} | 8 ++--- contracts/WitnetRequestFactory.sol | 4 +-- contracts/WitnetRequestTemplate.sol | 4 +-- contracts/apps/UsingWitnetRandomness.sol | 2 +- .../WitnetRequestBoardTrustableObscuro.sol | 2 +- .../WitnetRequestBoardTrustableOvm2.sol | 2 +- .../WitnetRequestBoardTrustableReef.sol | 2 +- ...sol => WitnetRequestBytecodesNoSha256.sol} | 6 ++-- .../customs/WitnetRequestFactoryCfxCore.sol | 2 +- .../core/defaults/WitnetPriceFeedsDefault.sol | 2 +- .../WitnetRequestBoardTrustableBase.sol | 10 +++---- .../WitnetRequestBoardTrustableDefault.sol | 2 +- ....sol => WitnetRequestBytecodesDefault.sol} | 30 +++++++++---------- .../defaults/WitnetRequestFactoryDefault.sol | 8 ++--- ...ata.sol => WitnetRequestBytecodesData.sol} | 2 +- contracts/interfaces/V2/IWitnetFeeds.sol | 4 +-- .../interfaces/V2/IWitnetRequestBoard.sol | 6 ++-- ...ecodes.sol => IWitnetRequestBytecodes.sol} | 2 +- contracts/mocks/WitnetMockedRequestBoard.sol | 6 ++-- ...s.sol => WitnetMockedRequestBytecodes.sol} | 10 +++---- .../mocks/WitnetMockedRequestFactory.sol | 2 +- migrations/addresses.json | 11 +++---- migrations/scripts/3_core.js | 14 ++++----- migrations/scripts/4_proxies.js | 2 +- settings/artifacts.js | 8 ++--- settings/specs.js | 2 +- src/index.js | 2 +- test/witnet_bytecodes.test.js | 22 +++++++------- 29 files changed, 91 insertions(+), 90 deletions(-) rename contracts/{WitnetBytecodes.sol => WitnetRequestBytecodes.sol} (58%) rename contracts/core/customs/{WitnetBytecodesNoSha256.sol => WitnetRequestBytecodesNoSha256.sol} (61%) rename contracts/core/defaults/{WitnetBytecodesDefault.sol => WitnetRequestBytecodesDefault.sol} (94%) rename contracts/data/{WitnetBytecodesData.sol => WitnetRequestBytecodesData.sol} (98%) rename contracts/interfaces/V2/{IWitnetBytecodes.sol => IWitnetRequestBytecodes.sol} (98%) rename contracts/mocks/{WitnetMockedBytecodes.sol => WitnetMockedRequestBytecodes.sol} (52%) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetRequestBoard.sol index 93da562cd..f25dfc945 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetRequestBoard.sol @@ -2,7 +2,7 @@ pragma solidity >=0.7.0 <0.9.0; -import "./WitnetBytecodes.sol"; +import "./WitnetRequestBytecodes.sol"; import "./WitnetRequestFactory.sol"; import "./interfaces/V2/IWitnetRequestBoard.sol"; import "./interfaces/V2/IWitnetRequestBoardEvents.sol"; @@ -19,6 +19,6 @@ abstract contract WitnetRequestBoard } function channel() virtual external view returns (bytes4); function factory() virtual external view returns (WitnetRequestFactory); - function registry() virtual external view returns (WitnetBytecodes); + function registry() virtual external view returns (WitnetRequestBytecodes); function specs() virtual external view returns (bytes4); } \ No newline at end of file diff --git a/contracts/WitnetBytecodes.sol b/contracts/WitnetRequestBytecodes.sol similarity index 58% rename from contracts/WitnetBytecodes.sol rename to contracts/WitnetRequestBytecodes.sol index 6a1235331..6993db34e 100644 --- a/contracts/WitnetBytecodes.sol +++ b/contracts/WitnetRequestBytecodes.sol @@ -3,14 +3,14 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./interfaces/V2/IWitnetBytecodes.sol"; +import "./interfaces/V2/IWitnetRequestBytecodes.sol"; -abstract contract WitnetBytecodes +abstract contract WitnetRequestBytecodes is - IWitnetBytecodes + IWitnetRequestBytecodes { function class() virtual external view returns (string memory) { - return type(WitnetBytecodes).name; + return type(WitnetRequestBytecodes).name; } function specs() virtual external view returns (bytes4); } \ No newline at end of file diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index b6cf5c61d..83d1ec386 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetBytecodes.sol"; +import "./WitnetRequestBytecodes.sol"; import "./WitnetRequestBoard.sol"; import "./interfaces/V2/IWitnetRequestFactory.sol"; @@ -12,7 +12,7 @@ abstract contract WitnetRequestFactory IWitnetRequestFactory { function class() virtual external view returns (string memory); - function registry() virtual external view returns (WitnetBytecodes); + function registry() virtual external view returns (WitnetRequestBytecodes); function specs() virtual external view returns (bytes4); function witnet() virtual external view returns (WitnetRequestBoard); } \ No newline at end of file diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 5a6b47930..4a3b1d2fa 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetBytecodes.sol"; +import "./WitnetRequestBytecodes.sol"; import "./WitnetRequestBoard.sol"; import "./WitnetRequestFactory.sol"; @@ -13,7 +13,7 @@ abstract contract WitnetRequestTemplate function class() virtual external view returns (string memory); function factory() virtual external view returns (WitnetRequestFactory); - function registry() virtual external view returns (WitnetBytecodes); + function registry() virtual external view returns (WitnetRequestBytecodes); function specs() virtual external view returns (bytes4); function version() virtual external view returns (string memory); function witnet() virtual external view returns (WitnetRequestBoard); diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index fa62d6f45..7b1a2314f 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -33,7 +33,7 @@ abstract contract UsingWitnetRandomness // On-chain building of the Witnet Randomness Request: { WitnetRequestFactory _factory = witnet().factory(); - WitnetBytecodes _registry = witnet().registry(); + WitnetRequestBytecodes _registry = witnet().registry(); // Build own Witnet Randomness Request: bytes32[] memory _retrievals = new bytes32[](1); _retrievals[0] = _registry.verifyRadonRetrieval( diff --git a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol index f596b4cfe..7cf7480cd 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol @@ -18,7 +18,7 @@ contract WitnetRequestBoardTrustableObscuro { constructor( WitnetRequestFactory _factory, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 85feec5dc..1c4b59be8 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -25,7 +25,7 @@ contract WitnetRequestBoardTrustableOvm2 constructor( WitnetRequestFactory _factory, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 682c7f500..21c806e54 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -19,7 +19,7 @@ contract WitnetRequestBoardTrustableReef { constructor( WitnetRequestFactory _factory, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, diff --git a/contracts/core/customs/WitnetBytecodesNoSha256.sol b/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol similarity index 61% rename from contracts/core/customs/WitnetBytecodesNoSha256.sol rename to contracts/core/customs/WitnetRequestBytecodesNoSha256.sol index 684f27268..537ad7ad5 100644 --- a/contracts/core/customs/WitnetBytecodesNoSha256.sol +++ b/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol @@ -3,12 +3,12 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../defaults/WitnetBytecodesDefault.sol"; +import "../defaults/WitnetRequestBytecodesDefault.sol"; -contract WitnetBytecodesNoSha256 is WitnetBytecodesDefault { +contract WitnetRequestBytecodesNoSha256 is WitnetRequestBytecodesDefault { constructor(bool _upgradable, bytes32 _versionTag) - WitnetBytecodesDefault(_upgradable, _versionTag) + WitnetRequestBytecodesDefault(_upgradable, _versionTag) {} function _witnetHash(bytes memory chunk) virtual override internal pure returns (bytes32) { diff --git a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol index fbb8574b1..5a44e95ac 100644 --- a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol @@ -8,7 +8,7 @@ import "../defaults/WitnetRequestFactoryDefault.sol"; contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { constructor( WitnetRequestBoard _witnet, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag ) diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index 730fbcbee..c20af0db9 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -277,7 +277,7 @@ contract WitnetPriceFeedsDefault } } - function registry() public view virtual override returns (WitnetBytecodes) { + function registry() public view virtual override returns (WitnetRequestBytecodes) { return WitnetRequestBoard(address(witnet)).registry(); } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 34e04d904..99f6abec5 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -37,7 +37,7 @@ abstract contract WitnetRequestBoardTrustableBase using WitnetV2 for WitnetV2.Response; bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; - WitnetBytecodes immutable public override registry; + WitnetRequestBytecodes immutable public override registry; WitnetRequestFactory immutable private __factory; @@ -64,7 +64,7 @@ abstract contract WitnetRequestBoardTrustableBase constructor( WitnetRequestFactory _factory, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag, address _currency @@ -198,7 +198,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @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 WitnetBytecodes registry. + /// @param radHash The hash of some Witnet Data Request previously posted in the WitnetRequestBytecodes registry. function estimateBaseFee(uint256 gasPrice, bytes32 radHash) override public view @@ -415,7 +415,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @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 WitnetBytecodes registry; + /// @dev - the RAD hash was not previously verified by the WitnetRequestBytecodes 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. @@ -447,7 +447,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @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 IWitnetConsumer interface; - /// @dev - the RAD hash was not previously verified by the WitnetBytecodes registry; + /// @dev - the RAD hash was not previously verified by the WitnetRequestBytecodes registry; /// @dev - invalid SLA parameters were provided; /// @dev - zero callback gas limit is provided; /// @dev - insufficient value is paid as reward. diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index eb71a0cc2..2581e6713 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -23,7 +23,7 @@ contract WitnetRequestBoardTrustableDefault constructor( WitnetRequestFactory _factory, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag, uint256 _reportResultGasBase, diff --git a/contracts/core/defaults/WitnetBytecodesDefault.sol b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol similarity index 94% rename from contracts/core/defaults/WitnetBytecodesDefault.sol rename to contracts/core/defaults/WitnetRequestBytecodesDefault.sol index 3961e072d..d6d2bc89e 100644 --- a/contracts/core/defaults/WitnetBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol @@ -3,8 +3,8 @@ pragma solidity >=0.8.4 <0.9.0; import "../WitnetUpgradableBase.sol"; -import "../../WitnetBytecodes.sol"; -import "../../data/WitnetBytecodesData.sol"; +import "../../WitnetRequestBytecodes.sol"; +import "../../data/WitnetRequestBytecodesData.sol"; import "../../libs/WitnetEncodingLib.sol"; /// @title Witnet Request Board EVM-default implementation contract. @@ -12,10 +12,10 @@ import "../../libs/WitnetEncodingLib.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 WitnetBytecodesDefault +contract WitnetRequestBytecodesDefault is - WitnetBytecodes, - WitnetBytecodesData, + WitnetRequestBytecodes, + WitnetRequestBytecodesData, WitnetUpgradableBase { using Witnet for bytes; @@ -28,7 +28,7 @@ contract WitnetBytecodesDefault using WitnetEncodingLib for Witnet.RadonSLA; using WitnetEncodingLib for Witnet.RadonDataTypes; - bytes4 public immutable override specs = type(IWitnetBytecodes).interfaceId; + bytes4 public immutable override specs = type(IWitnetRequestBytecodes).interfaceId; constructor(bool _upgradable, bytes32 _versionTag) Ownable(address(msg.sender)) @@ -40,7 +40,7 @@ contract WitnetBytecodesDefault {} receive() external payable { - revert("WitnetBytecodesDefault: no transfers"); + revert("WitnetRequestBytecodesDefault: no transfers"); } @@ -108,14 +108,14 @@ contract WitnetBytecodesDefault } else { // only owner can initialize: if (msg.sender != _owner) { - revert("WitnetBytecodesDefault: not the owner"); + revert("WitnetRequestBytecodesDefault: not the owner"); } } if (__bytecodes().base != address(0)) { // current implementation cannot be initialized more than once: if(__bytecodes().base == base()) { - revert("WitnetBytecodesDefault: already initialized"); + revert("WitnetRequestBytecodesDefault: already initialized"); } } __bytecodes().base = base(); @@ -140,7 +140,7 @@ contract WitnetBytecodesDefault // ================================================================================================================ - // --- Implementation of 'IWitnetBytecodes' ----------------------------------------------------------------------- + // --- Implementation of 'IWitnetRequestBytecodes' ----------------------------------------------------------------------- function bytecodeOf(bytes32 _radHash) public view @@ -414,12 +414,12 @@ contract WitnetBytecodesDefault // Check that at least one source is provided; if (_retrievalsIds.length == 0) { - revert("WitnetBytecodesDefault: no retrievals"); + revert("WitnetRequestBytecodesDefault: no retrievals"); } // Check that number of args arrays matches the number of sources: if ( _retrievalsIds.length != _args.length) { - revert("WitnetBytecodesDefault: args mismatch"); + revert("WitnetRequestBytecodesDefault: args mismatch"); } // Check sources and tally reducers: @@ -435,11 +435,11 @@ contract WitnetBytecodesDefault if (_ix == 0) { _resultDataType = _retrievals[0].resultDataType; } else if (_retrievals[_ix].resultDataType != _resultDataType) { - revert("WitnetBytecodesDefault: mismatching retrievals"); + revert("WitnetRequestBytecodesDefault: mismatching retrievals"); } // check enough args are provided for each source if (_args[_ix].length < uint(_retrievals[_ix].argsCount)) { - revert("WitnetBytecodesDefault: missing args"); + revert("WitnetRequestBytecodesDefault: missing args"); } } @@ -454,7 +454,7 @@ contract WitnetBytecodesDefault _resultMaxSize ); if (_bytecode.length > 65535) { - revert("WitnetBytecodesDefault: too heavy request"); + revert("WitnetRequestBytecodesDefault: too heavy request"); } // Calculate radhash and add request metadata and rad bytecode to storage: diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 792e21ff8..d9eb42998 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -4,7 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "../WitnetUpgradableBase.sol"; -import "../../WitnetBytecodes.sol"; +import "../../WitnetRequestBytecodes.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestFactoryData.sol"; import "../../patterns/Clonable.sol"; @@ -18,7 +18,7 @@ contract WitnetRequestFactoryDefault WitnetUpgradableBase { /// @notice Reference to Witnet Data Requests Bytecode Registry. - WitnetBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; + WitnetRequestBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; /// @notice Reference to the Witnet Request Board that all templates built out from this factory will refer to. WitnetRequestBoard immutable public override(WitnetRequestFactory, WitnetRequestTemplate) witnet; @@ -50,7 +50,7 @@ contract WitnetRequestFactoryDefault constructor( WitnetRequestBoard _witnet, - WitnetBytecodes _registry, + WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag ) @@ -308,7 +308,7 @@ contract WitnetRequestFactoryDefault __proxiable().implementation = base(); require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent requests registry"); - require(registry.specs() == type(IWitnetBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); + require(registry.specs() == type(IWitnetRequestBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); emit Upgraded(msg.sender, base(), codehash(), version()); } diff --git a/contracts/data/WitnetBytecodesData.sol b/contracts/data/WitnetRequestBytecodesData.sol similarity index 98% rename from contracts/data/WitnetBytecodesData.sol rename to contracts/data/WitnetRequestBytecodesData.sol index 624f5f4e3..a2703d933 100644 --- a/contracts/data/WitnetBytecodesData.sol +++ b/contracts/data/WitnetRequestBytecodesData.sol @@ -6,7 +6,7 @@ import "../libs/WitnetV2.sol"; /// @title Witnet Request Board base data model. /// @author The Witnet Foundation. -abstract contract WitnetBytecodesData { +abstract contract WitnetRequestBytecodesData { bytes32 private constant _WITNET_BYTECODES_DATA_SLOTHASH = /* keccak256("io.witnet.bytecodes.data") */ diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index b8d73cf7f..40bd49270 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -2,7 +2,7 @@ pragma solidity >=0.8.0 <0.9.0; -import "../../WitnetBytecodes.sol"; +import "../../WitnetRequestBytecodes.sol"; import "../../WitnetRequestBoard.sol"; interface IWitnetFeeds { @@ -16,7 +16,7 @@ interface IWitnetFeeds { function dataType() external view returns (Witnet.RadonDataTypes); function prefix() external view returns (string memory); - function registry() external view returns (WitnetBytecodes); + function registry() external view returns (WitnetRequestBytecodes); function witnet() external view returns (WitnetRequestBoard); function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetRequestBoard.sol index adcd9f49b..cfe6631b0 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetRequestBoard.sol @@ -12,7 +12,7 @@ interface IWitnetRequestBoard { function estimateBaseFee(uint256 gasPrice, uint16 resultMaxSize) external view returns (uint256); /// @notice Estimate the minimum reward required for posting a data request. - /// @dev Fails if the RAD hash was not previously verified on the WitnetBytecodes registry. + /// @dev Fails if the RAD hash was not previously verified on the WitnetRequestBytecodes registry. /// @param gasPrice Expected gas price to pay upon posting the data request. /// @param radHash The RAD hash of the data request to be solved by Witnet. function estimateBaseFee(uint256 gasPrice, bytes32 radHash) external view returns (uint256); @@ -87,7 +87,7 @@ interface IWitnetRequestBoard { /// @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 WitnetBytecodes registry; + /// @dev - the RAD hash was not previously verified by the WitnetRequestBytecodes 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. @@ -105,7 +105,7 @@ interface IWitnetRequestBoard { /// @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 IWitnetConsumer interface; - /// @dev - the RAD hash was not previously verified by the WitnetBytecodes registry; + /// @dev - the RAD hash was not previously verified by the WitnetRequestBytecodes 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. diff --git a/contracts/interfaces/V2/IWitnetBytecodes.sol b/contracts/interfaces/V2/IWitnetRequestBytecodes.sol similarity index 98% rename from contracts/interfaces/V2/IWitnetBytecodes.sol rename to contracts/interfaces/V2/IWitnetRequestBytecodes.sol index c6d383fec..5d1f51987 100644 --- a/contracts/interfaces/V2/IWitnetBytecodes.sol +++ b/contracts/interfaces/V2/IWitnetRequestBytecodes.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import "../../libs/Witnet.sol"; -interface IWitnetBytecodes { +interface IWitnetRequestBytecodes { error UnknownRadonRetrieval(bytes32 hash); error UnknownRadonReducer(bytes32 hash); diff --git a/contracts/mocks/WitnetMockedRequestBoard.sol b/contracts/mocks/WitnetMockedRequestBoard.sol index f429060b6..f3ca97ed3 100644 --- a/contracts/mocks/WitnetMockedRequestBoard.sol +++ b/contracts/mocks/WitnetMockedRequestBoard.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./WitnetMockedBytecodes.sol"; +import "./WitnetMockedRequestBytecodes.sol"; import "./WitnetMockedRequestFactory.sol"; import "../core/defaults/WitnetRequestBoardTrustableDefault.sol"; @@ -20,10 +20,10 @@ contract WitnetMockedRequestBoard { WitnetRequestFactory private __factory; - constructor(WitnetMockedBytecodes _registry) + constructor(WitnetMockedRequestBytecodes _registry) WitnetRequestBoardTrustableDefault( WitnetRequestFactory(address(0)), - WitnetBytecodes(address(_registry)), + WitnetRequestBytecodes(address(_registry)), false, bytes32("mocked"), 60000, 65000, 70000, 20000 diff --git a/contracts/mocks/WitnetMockedBytecodes.sol b/contracts/mocks/WitnetMockedRequestBytecodes.sol similarity index 52% rename from contracts/mocks/WitnetMockedBytecodes.sol rename to contracts/mocks/WitnetMockedRequestBytecodes.sol index 144738cbd..43f9926dc 100644 --- a/contracts/mocks/WitnetMockedBytecodes.sol +++ b/contracts/mocks/WitnetMockedRequestBytecodes.sol @@ -3,16 +3,16 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../core/defaults/WitnetBytecodesDefault.sol"; +import "../core/defaults/WitnetRequestBytecodesDefault.sol"; -/// @title Mocked implementation of `WitnetBytecodes`. +/// @title Mocked implementation of `WitnetRequestBytecodes`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE -/// @dev THE `WitnetBytecodes` CONTRACT ADDRESS PROVIDED +/// @dev THE `WitnetRequestBytecodes` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. -contract WitnetMockedBytecodes is WitnetBytecodesDefault { +contract WitnetMockedRequestBytecodes is WitnetRequestBytecodesDefault { constructor() - WitnetBytecodesDefault( + WitnetRequestBytecodesDefault( false, bytes32("mocked") ) diff --git a/contracts/mocks/WitnetMockedRequestFactory.sol b/contracts/mocks/WitnetMockedRequestFactory.sol index bfabbba44..7da10b129 100644 --- a/contracts/mocks/WitnetMockedRequestFactory.sol +++ b/contracts/mocks/WitnetMockedRequestFactory.sol @@ -18,7 +18,7 @@ contract WitnetMockedRequestFactory constructor (WitnetMockedRequestBoard _wrb) WitnetRequestFactoryDefault( WitnetRequestBoard(address(_wrb)), - WitnetBytecodes(_wrb.registry()), + WitnetRequestBytecodes(_wrb.registry()), false, bytes32("mocked") ) diff --git a/migrations/addresses.json b/migrations/addresses.json index 4326f7c85..84fcfd916 100644 --- a/migrations/addresses.json +++ b/migrations/addresses.json @@ -1,7 +1,7 @@ { "default": { "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", - "WitnetBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", + "WitnetRequestBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000", "WitnetRequestBoard": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", "WitnetPriceFeeds": "0x159Dd4C95C52fAc17b23de911dD518845c78D022" @@ -10,17 +10,18 @@ "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", - "WitnetBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", + "WitnetRequestBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", "WitnetRequestBoardTrustableDefault": "0x7FEf83f7078F6135C006E770251039e59F952D2E" }, "ten:testnet": { "WitnetErrorsLib": "0x05F47A53598ff14899f7cdA2320E4D6059Aa2D91", "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", - "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", - "WitnetBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", + "WitnetPriceFeedsLib": "0x6d0d66743AC85A58cEbad01c3F41896617D084CE", + "WitnetRequestBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", "WitnetRequestBoardTrustableObscuro": "0x4b9afCCb4f1A1827B080b38ae23D09AbA2243ec3", - "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3" + "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3", + "WitnetPriceFeeds": "0xbF35a988B9ae7608db0C67cb92f340b44Bb8E980" } } \ No newline at end of file diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 1d3bfb65e..88a507faa 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -13,14 +13,14 @@ module.exports = async function (_, network, [, from]) { const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) - // Deploy/upgrade WitnetBytecodes target implementation, if required + // Deploy/upgrade WitnetRequestBytecodes target implementation, if required await deploy({ network, targets, - from: utils.isDryRun(network) ? from : specs.WitnetBytecodes.from || from, - key: targets.WitnetBytecodes, - libs: specs.WitnetBytecodes.libs, - immutables: specs.WitnetBytecodes.immutables, + from: utils.isDryRun(network) ? from : specs.WitnetRequestBytecodes.from || from, + key: targets.WitnetRequestBytecodes, + libs: specs.WitnetRequestBytecodes.libs, + immutables: specs.WitnetRequestBytecodes.immutables, intrinsics: { types: ["bool", "bytes32"], values: [ @@ -42,7 +42,7 @@ module.exports = async function (_, network, [, from]) { types: ["address", "address", "bool", "bytes32"], values: [ /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _registry */ await determineProxyAddr(from, specs.WitnetRequestBytecodes?.vanity || 1), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), ], @@ -61,7 +61,7 @@ module.exports = async function (_, network, [, from]) { types: ["address", "address", "bool", "bytes32"], values: [ /* _factory */ await determineProxyAddr(from, specs.WitnetRequestFactory?.vanity || 2), - /* _registry */ await determineProxyAddr(from, specs.WitnetBytecodes?.vanity || 1), + /* _registry */ await determineProxyAddr(from, specs.WitnetRequestBytecodes?.vanity || 1), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), ], diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index b25a5a8f3..9f7955e35 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -17,7 +17,7 @@ module.exports = async function (_, network, [, from, reporter]) { const specs = settings.getSpecs(network) const singletons = [ - "WitnetBytecodes", + "WitnetRequestBytecodes", "WitnetRequestFactory", "WitnetRequestBoard", "WitnetPriceFeeds", diff --git a/settings/artifacts.js b/settings/artifacts.js index 3ed367df9..288c8759e 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -1,6 +1,6 @@ module.exports = { default: { - WitnetBytecodes: "WitnetBytecodesDefault", + WitnetRequestBytecodes: "WitnetRequestBytecodesDefault", WitnetEncodingLib: "WitnetEncodingLib", WitnetErrorsLib: "WitnetErrorsLib", WitnetPriceFeeds: "WitnetPriceFeedsDefault", @@ -22,16 +22,16 @@ module.exports = { WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", }, "polygon.zkevm.goerli": { - WitnetBytecodes: "WitnetBytecodesNoSha256", + WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", }, "polygon.zkevm.mainnet": { - WitnetBytecodes: "WitnetBytecodesNoSha256", + WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", }, reef: { WitnetRequestBoard: "WitnetRequestBoardTrustableReef", }, scroll: { - WitnetBytecodes: "WitnetBytecodesNoSha256", + WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", }, "syscoin.rollux.testnet": { WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", diff --git a/settings/specs.js b/settings/specs.js index ec9a1eae5..9946f2b36 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -1,6 +1,6 @@ module.exports = { default: { - WitnetBytecodes: { + WitnetRequestBytecodes: { libs: ["WitnetEncodingLib"], vanity: 2561527884, // 0x0000B677d4a6d20C3B087c52A36E4Bed558De000 }, diff --git a/src/index.js b/src/index.js index 32faf1046..4b431c2de 100644 --- a/src/index.js +++ b/src/index.js @@ -30,7 +30,7 @@ module.exports = { }, supportedNetworks, artifacts: { - WitnetBytecodes: require("../artifacts/contracts/WitnetBytecodes.sol/WitnetBytecodes.json"), + WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetPriceFeeds: require("../artifacts/contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), WitnetRequestBoard: require("../artifacts/contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), diff --git a/test/witnet_bytecodes.test.js b/test/witnet_bytecodes.test.js index e81945511..825fc3b73 100644 --- a/test/witnet_bytecodes.test.js +++ b/test/witnet_bytecodes.test.js @@ -3,11 +3,11 @@ const { expectEvent, expectRevert } = require("@openzeppelin/test-helpers") const { assert } = require("chai") const { expectRevertCustomError } = require("custom-error-test-helper") -const WitnetBytecodes = artifacts.require("WitnetBytecodesDefault") +const WitnetRequestBytecodes = artifacts.require("WitnetRequestBytecodesDefault") const WitnetEncodingLib = artifacts.require("WitnetEncodingLib") const WitnetV2 = artifacts.require("WitnetV2") -contract("WitnetBytecodes", (accounts) => { +contract("WitnetRequestBytecodes", (accounts) => { const creatorAddress = accounts[0] const firstOwnerAddress = accounts[1] const unprivilegedAddress = accounts[4] @@ -15,8 +15,8 @@ contract("WitnetBytecodes", (accounts) => { let bytecodes before(async () => { - await WitnetBytecodes.link(WitnetEncodingLib, WitnetEncodingLib.address) - bytecodes = await WitnetBytecodes.new( + await WitnetRequestBytecodes.link(WitnetEncodingLib, WitnetEncodingLib.address) + bytecodes = await WitnetRequestBytecodes.new( true, utils.fromAscii("testing") ) @@ -76,19 +76,19 @@ contract("WitnetBytecodes", (accounts) => { }) it("cannot be initialized more than once", async () => { await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.initialize("0x", { from: firstOwnerAddress }), "AlreadyUpgraded" ) await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.initialize("0x", { from: unprivilegedAddress }), "OnlyOwner" ) }) }) - context("IWitnetBytecodes", async () => { + context("IWitnetRequestBytecodes", async () => { let slaHash let concathashReducerHash @@ -658,7 +658,7 @@ contract("WitnetBytecodes", (accounts) => { context("radon requests", async () => { it("reverts if trying to get bytecode from unknown radon request", async () => { await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.bytecodeOf("0x0"), "UnknownRadonRequest" ) @@ -673,7 +673,7 @@ contract("WitnetBytecodes", (accounts) => { context("radon slas", async () => { it("reverts if trying to get bytecode from unknown radon sla", async () => { await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.bytecodeOf(btcUsdPriceFeedHash, "0x0"), "UnknownRadonSLA" ) @@ -699,14 +699,14 @@ contract("WitnetBytecodes", (accounts) => { context("hashWeightRewardOf(..)", async () => { it("hashing unknown radon request reverts", async () => { await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.hashWeightWitsOf("0x0", slaHash), "UnknownRadonRequest" ) }) it("hashing unknown radon sla reverts", async () => { await expectRevertCustomError( - WitnetBytecodes, + WitnetRequestBytecodes, bytecodes.hashWeightWitsOf(btcUsdPriceFeedHash, "0x0"), "UnknownRadonSLA" ) From c61b2915fc9c3619aee78b5a4d72d068d96860d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:29:51 +0100 Subject: [PATCH 123/149] chore: refactor WitnetRequestBoard -> WitnetOracle --- ...itnetRequestBoard.sol => WitnetOracle.sol} | 12 ++-- contracts/WitnetRequestFactory.sol | 4 +- contracts/WitnetRequestTemplate.sol | 4 +- contracts/apps/UsingWitnet.sol | 16 +++--- contracts/apps/UsingWitnetRandomness.sol | 4 +- contracts/apps/WitnetFeeds.sol | 4 +- .../WitnetRequestBoardTrustableObscuro.sol | 2 +- .../WitnetRequestBoardTrustableOvm2.sol | 2 +- .../WitnetRequestBoardTrustableReef.sol | 4 +- .../customs/WitnetRequestFactoryCfxCore.sol | 2 +- .../core/defaults/WitnetPriceFeedsDefault.sol | 8 +-- .../WitnetRequestBoardTrustableBase.sol | 10 ++-- .../WitnetRequestBoardTrustableDefault.sol | 2 +- .../defaults/WitnetRequestFactoryDefault.sol | 4 +- contracts/data/WitnetRequestBoardData.sol | 12 ++-- contracts/data/WitnetRequestBoardDataACLs.sol | 2 +- contracts/interfaces/IWitnetRandomness.sol | 8 +-- contracts/interfaces/V2/IWitnetConsumer.sol | 10 ++-- contracts/interfaces/V2/IWitnetFeeds.sol | 4 +- ...tnetRequestBoard.sol => IWitnetOracle.sol} | 2 +- ...oardEvents.sol => IWitnetOracleEvents.sol} | 2 +- contracts/mocks/WitnetMockedRequestBoard.sol | 4 +- .../mocks/WitnetMockedRequestFactory.sol | 2 +- migrations/addresses.json | 9 ++- migrations/scripts/3_core.js | 14 ++--- migrations/scripts/4_proxies.js | 6 +- settings/artifacts.js | 19 +++---- settings/specs.js | 55 +++++++++---------- src/index.js | 6 +- test/witnet_randomness.test.js | 4 +- 30 files changed, 116 insertions(+), 121 deletions(-) rename contracts/{WitnetRequestBoard.sol => WitnetOracle.sol} (70%) rename contracts/interfaces/V2/{IWitnetRequestBoard.sol => IWitnetOracle.sol} (99%) rename contracts/interfaces/V2/{IWitnetRequestBoardEvents.sol => IWitnetOracleEvents.sol} (96%) diff --git a/contracts/WitnetRequestBoard.sol b/contracts/WitnetOracle.sol similarity index 70% rename from contracts/WitnetRequestBoard.sol rename to contracts/WitnetOracle.sol index f25dfc945..69c06cf49 100644 --- a/contracts/WitnetRequestBoard.sol +++ b/contracts/WitnetOracle.sol @@ -4,18 +4,18 @@ pragma solidity >=0.7.0 <0.9.0; import "./WitnetRequestBytecodes.sol"; import "./WitnetRequestFactory.sol"; -import "./interfaces/V2/IWitnetRequestBoard.sol"; -import "./interfaces/V2/IWitnetRequestBoardEvents.sol"; +import "./interfaces/V2/IWitnetOracle.sol"; +import "./interfaces/V2/IWitnetOracleEvents.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. -abstract contract WitnetRequestBoard +abstract contract WitnetOracle is - IWitnetRequestBoard, - IWitnetRequestBoardEvents + IWitnetOracle, + IWitnetOracleEvents { function class() virtual external view returns (string memory) { - return type(WitnetRequestBoard).name; + return type(WitnetOracle).name; } function channel() virtual external view returns (bytes4); function factory() virtual external view returns (WitnetRequestFactory); diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 83d1ec386..378a01ac4 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -4,7 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitnetRequestBytecodes.sol"; -import "./WitnetRequestBoard.sol"; +import "./WitnetOracle.sol"; import "./interfaces/V2/IWitnetRequestFactory.sol"; abstract contract WitnetRequestFactory @@ -14,5 +14,5 @@ abstract contract WitnetRequestFactory function class() virtual external view returns (string memory); function registry() virtual external view returns (WitnetRequestBytecodes); function specs() virtual external view returns (bytes4); - function witnet() virtual external view returns (WitnetRequestBoard); + function witnet() virtual external view returns (WitnetOracle); } \ No newline at end of file diff --git a/contracts/WitnetRequestTemplate.sol b/contracts/WitnetRequestTemplate.sol index 4a3b1d2fa..602fdd3b2 100644 --- a/contracts/WitnetRequestTemplate.sol +++ b/contracts/WitnetRequestTemplate.sol @@ -4,7 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "./WitnetRequestBytecodes.sol"; -import "./WitnetRequestBoard.sol"; +import "./WitnetOracle.sol"; import "./WitnetRequestFactory.sol"; abstract contract WitnetRequestTemplate @@ -16,7 +16,7 @@ abstract contract WitnetRequestTemplate function registry() virtual external view returns (WitnetRequestBytecodes); function specs() virtual external view returns (bytes4); function version() virtual external view returns (string memory); - function witnet() virtual external view returns (WitnetRequestBoard); + function witnet() virtual external view returns (WitnetOracle); function aggregator() virtual external view returns (bytes32); function parameterized() virtual external view returns (bool); diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index f267a67f8..dd3e41a33 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -3,17 +3,17 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../WitnetRequestBoard.sol"; +import "../WitnetOracle.sol"; /// @title The UsingWitnet contract /// @dev Witnet-aware contracts can inherit from this contract in order to interact with Witnet. /// @author The Witnet Foundation. abstract contract UsingWitnet is - IWitnetRequestBoardEvents + IWitnetOracleEvents { /// @dev Immutable reference to the Witnet Request Board contract. - WitnetRequestBoard internal immutable __witnet; + WitnetOracle internal immutable __witnet; /// @dev Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain /// @dev when solving a data request. @@ -25,11 +25,11 @@ abstract contract UsingWitnet /// @dev the Witnet blockchain levels, respectivelly. uint16 private __witnetBaseFeeOverheadPercentage; - /// @param _wrb Address of the WitnetRequestBoard contract. - constructor(WitnetRequestBoard _wrb) { + /// @param _wrb Address of the WitnetOracle contract. + constructor(WitnetOracle _wrb) { require( - _wrb.specs() == type(IWitnetRequestBoard).interfaceId, - "UsingWitnet: uncompliant WitnetRequestBoard" + _wrb.specs() == type(IWitnetOracle).interfaceId, + "UsingWitnet: uncompliant WitnetOracle" ); __witnet = _wrb; __witnetDefaultPackedSLA = WitnetV2.toBytes32(WitnetV2.RadonSLA({ @@ -48,7 +48,7 @@ abstract contract UsingWitnet _; } - function witnet() virtual public view returns (WitnetRequestBoard) { + function witnet() virtual public view returns (WitnetOracle) { return __witnet; } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index 7b1a2314f..b7c97b95c 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -17,12 +17,12 @@ abstract contract UsingWitnetRandomness bytes32 internal immutable __witnetRandomnessRadHash; - /// @param _wrb Address of the WitnetRequestBoard contract. + /// @param _wrb Address of the WitnetOracle contract. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( - WitnetRequestBoard _wrb, + WitnetOracle _wrb, uint16 _baseFeeOverheadPercentage, uint96 _callbackGasLimit, WitnetV2.RadonSLA memory _defaultSLA diff --git a/contracts/apps/WitnetFeeds.sol b/contracts/apps/WitnetFeeds.sol index ea2f1648a..0d0e4c9d9 100644 --- a/contracts/apps/WitnetFeeds.sol +++ b/contracts/apps/WitnetFeeds.sol @@ -14,13 +14,13 @@ abstract contract WitnetFeeds IFeeds, IWitnetFeeds, IWitnetFeedsAdmin, - IWitnetRequestBoardEvents + IWitnetOracleEvents { Witnet.RadonDataTypes immutable public override dataType; function class() virtual external view returns (string memory); function specs() virtual external view returns (bytes4); - function witnet() virtual external view returns (WitnetRequestBoard); + function witnet() virtual external view returns (WitnetOracle); constructor( Witnet.RadonDataTypes _dataType, diff --git a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol index 7cf7480cd..d16005f8e 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol @@ -39,7 +39,7 @@ contract WitnetRequestBoardTrustableObscuro {} // ================================================================================================================ - // --- Overrides implementation of 'IWitnetRequestBoardView' ------------------------------------------------------ + // --- Overrides implementation of 'IWitnetOracleView' ------------------------------------------------------ /// @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. diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 1c4b59be8..00d076741 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -49,7 +49,7 @@ contract WitnetRequestBoardTrustableOvm2 // ================================================================================================================ - // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- + // --- Overrides 'IWitnetOracle' ---------------------------------------------------------------------------- /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 21c806e54..5f9b0b0d5 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -13,7 +13,7 @@ import "../defaults/WitnetRequestBoardTrustableDefault.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 WitnetRequestBoardTrustableReef +contract WitnetOracleTrustableReef is WitnetRequestBoardTrustableDefault { @@ -40,7 +40,7 @@ contract WitnetRequestBoardTrustableReef {} // ================================================================================================================ - // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- + // --- Overrides 'IWitnetOracle' ---------------------------------------------------------------------------- /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. diff --git a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol index 5a44e95ac..a50759e6f 100644 --- a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol @@ -7,7 +7,7 @@ import "../defaults/WitnetRequestFactoryDefault.sol"; contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { constructor( - WitnetRequestBoard _witnet, + WitnetOracle _witnet, WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index c20af0db9..523e28165 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -27,10 +27,10 @@ contract WitnetPriceFeedsDefault using WitnetV2 for WitnetV2.RadonSLA; bytes4 immutable public override specs = type(IWitnetPriceFeeds).interfaceId; - WitnetRequestBoard immutable public override witnet; + WitnetOracle immutable public override witnet; constructor( - WitnetRequestBoard _wrb, + WitnetOracle _wrb, bool _upgradable, bytes32 _versionTag ) @@ -110,7 +110,7 @@ contract WitnetPriceFeedsDefault "WitnetPriceFeedsDefault: inexistent oracle" ); require( - witnet.specs() == type(IWitnetRequestBoard).interfaceId, + witnet.specs() == type(IWitnetOracle).interfaceId, "WitnetPriceFeedsDefault: uncompliant oracle" ); emit Upgraded(_owner, base(), codehash(), version()); @@ -278,7 +278,7 @@ contract WitnetPriceFeedsDefault } function registry() public view virtual override returns (WitnetRequestBytecodes) { - return WitnetRequestBoard(address(witnet)).registry(); + return WitnetOracle(address(witnet)).registry(); } function requestUpdate(bytes4 feedId) diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 99f6abec5..ef96d7af7 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -4,7 +4,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; import "../WitnetUpgradableBase.sol"; -import "../../WitnetRequestBoard.sol"; +import "../../WitnetOracle.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestBoardDataACLs.sol"; @@ -23,7 +23,7 @@ import "../../patterns/Payable.sol"; abstract contract WitnetRequestBoardTrustableBase is WitnetUpgradableBase, - WitnetRequestBoard, + WitnetOracle, WitnetRequestBoardDataACLs, IWitnetRequestBoardReporter, IWitnetRequestBoardAdminACLs, @@ -36,7 +36,7 @@ abstract contract WitnetRequestBoardTrustableBase using WitnetV2 for WitnetV2.Request; using WitnetV2 for WitnetV2.Response; - bytes4 public immutable override specs = type(IWitnetRequestBoard).interfaceId; + bytes4 public immutable override specs = type(IWitnetOracle).interfaceId; WitnetRequestBytecodes immutable public override registry; WitnetRequestFactory immutable private __factory; @@ -86,7 +86,7 @@ abstract contract WitnetRequestBoardTrustableBase } /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 - /// @dev (i.e. calling methods in IWitnetRequestBoard) + /// @dev (i.e. calling methods in IWitnetOracle) /// @dev (Until 'function ... abi(...)' modifier is allegedly supported in solc versions >= 0.9.1) /* solhint-disable payable-fallback */ /* solhint-disable no-complex-fallback */ @@ -193,7 +193,7 @@ abstract contract WitnetRequestBoardTrustableBase // ================================================================================================================ - // --- Partial implementation of IWitnetRequestBoard -------------------------------------------------------------- + // --- Partial implementation of IWitnetOracle -------------------------------------------------------------- /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `resultMaxSize`. diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index 2581e6713..5ab96bdb7 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -47,7 +47,7 @@ contract WitnetRequestBoardTrustableDefault // ================================================================================================================ - // --- Overrides 'IWitnetRequestBoard' ---------------------------------------------------------------------------- + // --- Overrides 'IWitnetOracle' ---------------------------------------------------------------------------- /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index d9eb42998..d81a3cc9a 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -21,7 +21,7 @@ contract WitnetRequestFactoryDefault WitnetRequestBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; /// @notice Reference to the Witnet Request Board that all templates built out from this factory will refer to. - WitnetRequestBoard immutable public override(WitnetRequestFactory, WitnetRequestTemplate) witnet; + WitnetOracle immutable public override(WitnetRequestFactory, WitnetRequestTemplate) witnet; modifier onlyDelegateCalls override(Clonable, Upgradeable) { require( @@ -49,7 +49,7 @@ contract WitnetRequestFactoryDefault } constructor( - WitnetRequestBoard _witnet, + WitnetOracle _witnet, WitnetRequestBytecodes _registry, bool _upgradable, bytes32 _versionTag diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index 2b4ab01b8..ceb951868 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -37,7 +37,7 @@ abstract contract WitnetRequestBoardData { modifier onlyRequester(uint256 _queryId) { require( msg.sender == __seekQueryRequest(_queryId).unpackRequester(), - "WitnetRequestBoardBase: not the requester" + "WitnetOracleBase: not the requester" ); _; } @@ -104,15 +104,15 @@ abstract contract WitnetRequestBoardData { returns (string memory) { if (_status == WitnetV2.QueryStatus.Posted) { - return "WitnetRequestBoard: not in Posted status"; + return "WitnetOracle: not in Posted status"; } else if (_status == WitnetV2.QueryStatus.Reported) { - return "WitnetRequestBoard: not in Reported status"; + return "WitnetOracle: not in Reported status"; } else if (_status == WitnetV2.QueryStatus.Finalized) { - return "WitnetRequestBoard: not in Finalized status"; + return "WitnetOracle: not in Finalized status"; } else if (_status == WitnetV2.QueryStatus.Undeliverable) { - return "WitnetRequestBoard: not in Undeliverable status"; + return "WitnetOracle: not in Undeliverable status"; } else { - return "WitnetRequestBoard: bad mood"; + return "WitnetOracle: bad mood"; } } } diff --git a/contracts/data/WitnetRequestBoardDataACLs.sol b/contracts/data/WitnetRequestBoardDataACLs.sol index 42ca19217..77946d06d 100644 --- a/contracts/data/WitnetRequestBoardDataACLs.sol +++ b/contracts/data/WitnetRequestBoardDataACLs.sol @@ -25,7 +25,7 @@ abstract contract WitnetRequestBoardDataACLs modifier onlyReporters { require( __acls().isReporter_[msg.sender], - "WitnetRequestBoard: unauthorized reporter" + "WitnetOracle: unauthorized reporter" ); _; } diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol index 1e57c354f..570145dbf 100644 --- a/contracts/interfaces/IWitnetRandomness.sol +++ b/contracts/interfaces/IWitnetRandomness.sol @@ -3,13 +3,13 @@ pragma solidity >=0.7.0 <0.9.0; import "../WitnetRequest.sol"; -import "../WitnetRequestBoard.sol"; +import "../WitnetOracle.sol"; /// @title The Witnet Randomness generator interface. /// @author Witnet Foundation. interface IWitnetRandomness { - /// Thrown every time a new WitnetRandomnessRequest gets succesfully posted to the WitnetRequestBoard. + /// Thrown every time a new WitnetRandomnessRequest gets succesfully posted to the WitnetOracle. /// @param from Address from which the randomize() function was called. /// @param prevBlock Block number in which a randomness request got posted just before this one. 0 if none. /// @param witnetQueryId Unique query id assigned to this request by the WRB. @@ -93,8 +93,8 @@ interface IWitnetRandomness { /// @return _usedFunds Amount of dunds actually used from those provided by the tx sender. function upgradeRandomizeFee(uint256 _block) external payable returns (uint256 _usedFunds); - /// @notice Returns address of the WitnetRequestBoard being used for posting randomness requests to Wtinet. - function witnet() external view returns (WitnetRequestBoard); + /// @notice Returns address of the WitnetOracle being used for posting randomness requests to Wtinet. + function witnet() external view returns (WitnetOracle); /// @notice Returns address of the WitnetRequestRandomness contract being used for solving randomness. function witnetRandomnessRequest() external view returns (WitnetRequest); diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/V2/IWitnetConsumer.sol index bc191d06a..7d1b953e2 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/V2/IWitnetConsumer.sol @@ -5,9 +5,9 @@ import "../../libs/Witnet.sol"; interface IWitnetConsumer { - /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` + /// @notice Method to be called from the WitnetOracle contract as soon as the given Witnet `queryId` /// @notice gets reported, if reported with no errors. - /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used + /// @dev It should revert if called from any other address different to the WitnetOracle being used /// @dev by the WitnetConsumer contract. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. @@ -22,9 +22,9 @@ interface IWitnetConsumer { WitnetCBOR.CBOR calldata witnetResultCborValue ) external; - /// @notice Method to be called from the WitnetRequestBoard contract as soon as the given Witnet `queryId` + /// @notice Method to be called from the WitnetOracle contract as soon as the given Witnet `queryId` /// @notice gets reported, if reported WITH errors. - /// @dev It should revert if called from any other address different to the WitnetRequestBoard being used + /// @dev It should revert if called from any other address different to the WitnetOracle being used /// @dev by the WitnetConsumer contract. /// @param witnetQueryId The unique identifier of the Witnet query being reported. /// @param witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. @@ -42,7 +42,7 @@ interface IWitnetConsumer { ) external; /// @notice Determines if Witnet queries can be reported from given address. - /// @dev In practice, must only be true on the WitnetRequestBoard address that's being used by + /// @dev In practice, must only be true on the WitnetOracle address that's being used by /// @dev the WitnetConsumer to post queries. function reportableFrom(address) external view returns (bool); } \ No newline at end of file diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/V2/IWitnetFeeds.sol index 40bd49270..77ffd551e 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/V2/IWitnetFeeds.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import "../../WitnetRequestBytecodes.sol"; -import "../../WitnetRequestBoard.sol"; +import "../../WitnetOracle.sol"; interface IWitnetFeeds { @@ -17,7 +17,7 @@ interface IWitnetFeeds { function dataType() external view returns (Witnet.RadonDataTypes); function prefix() external view returns (string memory); function registry() external view returns (WitnetRequestBytecodes); - function witnet() external view returns (WitnetRequestBoard); + function witnet() external view returns (WitnetOracle); function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); function estimateUpdateBaseFee(uint256 evmGasPrice) external view returns (uint); diff --git a/contracts/interfaces/V2/IWitnetRequestBoard.sol b/contracts/interfaces/V2/IWitnetOracle.sol similarity index 99% rename from contracts/interfaces/V2/IWitnetRequestBoard.sol rename to contracts/interfaces/V2/IWitnetOracle.sol index cfe6631b0..c737e8ab2 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoard.sol +++ b/contracts/interfaces/V2/IWitnetOracle.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; import "../../libs/WitnetV2.sol"; -interface IWitnetRequestBoard { +interface IWitnetOracle { /// @notice Estimate the minimum reward required for posting a data request. /// @dev Underestimates if the size of returned data is greater than `resultMaxSize`. diff --git a/contracts/interfaces/V2/IWitnetRequestBoardEvents.sol b/contracts/interfaces/V2/IWitnetOracleEvents.sol similarity index 96% rename from contracts/interfaces/V2/IWitnetRequestBoardEvents.sol rename to contracts/interfaces/V2/IWitnetOracleEvents.sol index 0dce1d9b0..d16d103e4 100644 --- a/contracts/interfaces/V2/IWitnetRequestBoardEvents.sol +++ b/contracts/interfaces/V2/IWitnetOracleEvents.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; import "../../libs/WitnetV2.sol"; -interface IWitnetRequestBoardEvents { +interface IWitnetOracleEvents { /// Emitted every time a new query containing some verified data request is posted to the WRB. event WitnetQuery(uint256 indexed id, uint64 witReward, uint256 evmReward); diff --git a/contracts/mocks/WitnetMockedRequestBoard.sol b/contracts/mocks/WitnetMockedRequestBoard.sol index f3ca97ed3..1538c1aee 100644 --- a/contracts/mocks/WitnetMockedRequestBoard.sol +++ b/contracts/mocks/WitnetMockedRequestBoard.sol @@ -9,10 +9,10 @@ import "../core/defaults/WitnetRequestBoardTrustableDefault.sol"; import "./WitnetMockedPriceFeeds.sol"; -/// @title Mocked implementation of `WitnetRequestBoard`. +/// @title Mocked implementation of `WitnetOracle`. /// @dev TO BE USED ONLY ON DEVELOPMENT ENVIRONMENTS. /// @dev ON SUPPORTED TESTNETS AND MAINNETS, PLEASE USE -/// @dev THE `WitnetRequestBoard` CONTRACT ADDRESS PROVIDED +/// @dev THE `WitnetOracle` CONTRACT ADDRESS PROVIDED /// @dev BY THE WITNET FOUNDATION. contract WitnetMockedRequestBoard is diff --git a/contracts/mocks/WitnetMockedRequestFactory.sol b/contracts/mocks/WitnetMockedRequestFactory.sol index 7da10b129..9390b54be 100644 --- a/contracts/mocks/WitnetMockedRequestFactory.sol +++ b/contracts/mocks/WitnetMockedRequestFactory.sol @@ -17,7 +17,7 @@ contract WitnetMockedRequestFactory { constructor (WitnetMockedRequestBoard _wrb) WitnetRequestFactoryDefault( - WitnetRequestBoard(address(_wrb)), + WitnetOracle(address(_wrb)), WitnetRequestBytecodes(_wrb.registry()), false, bytes32("mocked") diff --git a/migrations/addresses.json b/migrations/addresses.json index 84fcfd916..5d0f51d5e 100644 --- a/migrations/addresses.json +++ b/migrations/addresses.json @@ -1,10 +1,10 @@ { "default": { "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", + "WitnetOracle": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", + "WitnetPriceFeeds": "0x159Dd4C95C52fAc17b23de911dD518845c78D022", "WitnetRequestBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", - "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000", - "WitnetRequestBoard": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", - "WitnetPriceFeeds": "0x159Dd4C95C52fAc17b23de911dD518845c78D022" + "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000" }, "ethereum:sepolia": { "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", @@ -21,7 +21,6 @@ "WitnetRequestBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", "WitnetRequestBoardTrustableObscuro": "0x4b9afCCb4f1A1827B080b38ae23D09AbA2243ec3", - "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3", - "WitnetPriceFeeds": "0xbF35a988B9ae7608db0C67cb92f340b44Bb8E980" + "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3" } } \ No newline at end of file diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 88a507faa..732373504 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -41,7 +41,7 @@ module.exports = async function (_, network, [, from]) { intrinsics: { types: ["address", "address", "bool", "bytes32"], values: [ - /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + /* _witnet */ await determineProxyAddr(from, specs.WitnetOracle?.vanity || 3), /* _registry */ await determineProxyAddr(from, specs.WitnetRequestBytecodes?.vanity || 1), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), @@ -49,14 +49,14 @@ module.exports = async function (_, network, [, from]) { }, }) - // Deploy/upgrade WitnetRequestBoard target implementation, if required + // Deploy/upgrade WitnetOracle target implementation, if required await deploy({ network, targets, - from: utils.isDryRun(network) ? from : specs.WitnetRequestBoard.from || from, - key: targets.WitnetRequestBoard, - libs: specs.WitnetRequestBoard.libs, - immutables: specs.WitnetRequestBoard.immutables, + from: utils.isDryRun(network) ? from : specs.WitnetOracle.from || from, + key: targets.WitnetOracle, + libs: specs.WitnetOracle.libs, + immutables: specs.WitnetOracle.immutables, intrinsics: { types: ["address", "address", "bool", "bytes32"], values: [ @@ -79,7 +79,7 @@ module.exports = async function (_, network, [, from]) { intrinsics: { types: ["address", "bool", "bytes32"], values: [ - /* _witnet */ await determineProxyAddr(from, specs.WitnetRequestBoard?.vanity || 3), + /* _witnet */ await determineProxyAddr(from, specs.WitnetOracle?.vanity || 3), /* _upgradable */ true, /* _versionTag */ utils.fromAscii(version), ], diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 9f7955e35..1d6a93bca 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -19,15 +19,15 @@ module.exports = async function (_, network, [, from, reporter]) { const singletons = [ "WitnetRequestBytecodes", "WitnetRequestFactory", - "WitnetRequestBoard", + "WitnetOracle", "WitnetPriceFeeds", ] // inject `reporter` within array of addresses as first initialization args - specs.WitnetRequestBoard.mutables = merge({ + specs.WitnetOracle.mutables = merge({ types: ["address[]"], values: [[reporter]], - }, specs.WitnetRequestBoard.mutables + }, specs.WitnetOracle.mutables ) // Deploy/upgrade singleton proxies, if required diff --git a/settings/artifacts.js b/settings/artifacts.js index 288c8759e..5f2b4d158 100644 --- a/settings/artifacts.js +++ b/settings/artifacts.js @@ -1,25 +1,24 @@ module.exports = { default: { + WitnetOracle: "WitnetRequestBoardTrustableDefault", + WitnetPriceFeeds: "WitnetPriceFeedsDefault", WitnetRequestBytecodes: "WitnetRequestBytecodesDefault", + WitnetRequestFactory: "WitnetRequestFactoryDefault", WitnetEncodingLib: "WitnetEncodingLib", WitnetErrorsLib: "WitnetErrorsLib", - WitnetPriceFeeds: "WitnetPriceFeedsDefault", WitnetPriceFeedsLib: "WitnetPriceFeedsLib", - WitnetRandomness: "WitnetRandomness", - WitnetRequestBoard: "WitnetRequestBoardTrustableDefault", - WitnetRequestFactory: "WitnetRequestFactoryDefault", }, boba: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + WitnetOracle: "WitnetRequestBoardTrustableOvm2", }, conflux: { WitnetRequestFactory: "WitnetRequestFactoryCfxCore", }, mantle: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + WitnetOracle: "WitnetRequestBoardTrustableOvm2", }, optimism: { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + WitnetOracle: "WitnetRequestBoardTrustableOvm2", }, "polygon.zkevm.goerli": { WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", @@ -28,15 +27,15 @@ module.exports = { WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", }, reef: { - WitnetRequestBoard: "WitnetRequestBoardTrustableReef", + WitnetOracle: "WitnetOracleTrustableReef", }, scroll: { WitnetRequestBytecodes: "WitnetRequestBytecodesNoSha256", }, "syscoin.rollux.testnet": { - WitnetRequestBoard: "WitnetRequestBoardTrustableOvm2", + WitnetOracle: "WitnetRequestBoardTrustableOvm2", }, ten: { - WitnetRequestBoard: "WitnetRequestBoardTrustableObscuro", + WitnetOracle: "WitnetRequestBoardTrustableObscuro", }, } diff --git a/settings/specs.js b/settings/specs.js index 9946f2b36..ae0692e0c 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -1,13 +1,6 @@ module.exports = { default: { - WitnetRequestBytecodes: { - libs: ["WitnetEncodingLib"], - vanity: 2561527884, // 0x0000B677d4a6d20C3B087c52A36E4Bed558De000 - }, - WitnetRandomness: { - vanity: 4, - }, - WitnetRequestBoard: { + WitnetOracle: { immutables: { types: ["uint256", "uint256", "uint256", "uint256"], values: [ @@ -20,17 +13,21 @@ module.exports = { libs: ["WitnetErrorsLib"], vanity: 3648098779, // 0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000 }, - WitnetRequestFactory: { - vanity: 7945530998, // 0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000 - }, WitnetPriceFeeds: { from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", libs: ["WitnetPriceFeedsLib"], vanity: 7089974217, // 0x000080d4d4896c2c5959883430495AD58436E000 }, + WitnetRequestBytecodes: { + libs: ["WitnetEncodingLib"], + vanity: 2561527884, // 0x0000B677d4a6d20C3B087c52A36E4Bed558De000 + }, + WitnetRequestFactory: { + vanity: 7945530998, // 0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000 + }, }, avalanche: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 155000, @@ -39,7 +36,7 @@ module.exports = { }, }, celo: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 114000, @@ -48,7 +45,7 @@ module.exports = { }, }, conflux: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 78500, @@ -57,7 +54,7 @@ module.exports = { }, }, "conflux.espace.testnet": { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 225000, @@ -66,7 +63,7 @@ module.exports = { }, }, "conflux.espace.mainnet": { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 225000, @@ -75,7 +72,7 @@ module.exports = { }, }, cronos: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 137500, @@ -84,7 +81,7 @@ module.exports = { }, }, dogechain: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 85000, @@ -93,7 +90,7 @@ module.exports = { }, }, harmony: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 530000, @@ -102,7 +99,7 @@ module.exports = { }, }, hsc: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 85000, @@ -111,7 +108,7 @@ module.exports = { }, }, kcc: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 92500, @@ -120,7 +117,7 @@ module.exports = { }, }, klaytn: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 105000, @@ -129,7 +126,7 @@ module.exports = { }, }, meter: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 85000, @@ -138,7 +135,7 @@ module.exports = { }, }, metis: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 134800, @@ -147,7 +144,7 @@ module.exports = { }, }, moonbeam: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 115000, @@ -156,7 +153,7 @@ module.exports = { }, }, okxchain: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 145000, @@ -165,7 +162,7 @@ module.exports = { }, }, optimism: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 135000, @@ -174,7 +171,7 @@ module.exports = { }, }, reef: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ "0x3100A1CAC7EF19DC", @@ -183,7 +180,7 @@ module.exports = { }, }, ultron: { - WitnetRequestBoard: { + WitnetOracle: { immutables: { values: [ /* _reportResultGasBase */ 83949, diff --git a/src/index.js b/src/index.js index 4b431c2de..f7cef85f2 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,7 @@ module.exports = { ) return { WitnetPriceFeeds: merged?.WitnetPriceFeeds, - WitnetRequestBoard: merged?.WitnetRequestBoard, + WitnetOracle: merged?.WitnetOracle, } } else { return {} @@ -30,10 +30,10 @@ module.exports = { }, supportedNetworks, artifacts: { - WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetPriceFeeds: require("../artifacts/contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), - WitnetRequestBoard: require("../artifacts/contracts/WitnetRequestBoard.sol/WitnetRequestBoard.json"), + WitnetOracle: require("../artifacts/contracts/WitnetOracle.sol/WitnetOracle.json"), + WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), diff --git a/test/witnet_randomness.test.js b/test/witnet_randomness.test.js index a4b519319..c8c782a52 100644 --- a/test/witnet_randomness.test.js +++ b/test/witnet_randomness.test.js @@ -1,5 +1,5 @@ const WitnetRandomnessMock = artifacts.require("WitnetMockedRandomness") -const WitnetRequestBoard = artifacts.require("WitnetRequestBoard") +const WitnetOracle = artifacts.require("WitnetOracle") const RandomnessBareMinimal = artifacts.require("RandomnessBareMinimal") const { @@ -19,7 +19,7 @@ contract("WitnetRandomnesMock", accounts => { before(async () => { witnet = await WitnetRandomnessMock.new( - WitnetRequestBoard.address, + WitnetOracle.address, 2, // _mockRandomizeLatencyBlock fee, // _mockRandomizeFee { from: deployer } From 7aebf47d6610c038486a463e9bd4602c8e21505a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:33:25 +0100 Subject: [PATCH 124/149] chore: depracate unused interfaces --- contracts/interfaces/IWitnetRandomness.sol | 105 --------------- .../interfaces/IWitnetRandomnessAdmin.sol | 13 -- contracts/interfaces/IWitnetRequestParser.sol | 99 -------------- test/witnet_randomness.test.js | 127 ------------------ 4 files changed, 344 deletions(-) delete mode 100644 contracts/interfaces/IWitnetRandomness.sol delete mode 100644 contracts/interfaces/IWitnetRandomnessAdmin.sol delete mode 100644 contracts/interfaces/IWitnetRequestParser.sol delete mode 100644 test/witnet_randomness.test.js diff --git a/contracts/interfaces/IWitnetRandomness.sol b/contracts/interfaces/IWitnetRandomness.sol deleted file mode 100644 index 570145dbf..000000000 --- a/contracts/interfaces/IWitnetRandomness.sol +++ /dev/null @@ -1,105 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -import "../WitnetRequest.sol"; -import "../WitnetOracle.sol"; - -/// @title The Witnet Randomness generator interface. -/// @author Witnet Foundation. -interface IWitnetRandomness { - - /// Thrown every time a new WitnetRandomnessRequest gets succesfully posted to the WitnetOracle. - /// @param from Address from which the randomize() function was called. - /// @param prevBlock Block number in which a randomness request got posted just before this one. 0 if none. - /// @param witnetQueryId Unique query id assigned to this request by the WRB. - /// @param witnetRequestHash SHA-256 hash of the WitnetRandomnessRequest actual bytecode just posted to the WRB. - event Randomized( - address indexed from, - uint256 indexed prevBlock, - uint256 witnetQueryId, - bytes32 witnetRequestHash - ); - - /// @notice Returns amount of wei required to be paid as a fee when requesting randomization with a - /// transaction gas price as the one given. - function estimateRandomizeFee(uint256 _gasPrice) external view returns (uint256); - - /// @notice Retrieves data of a randomization request that got successfully posted to the WRB within a given block. - /// @dev Returns zero values if no randomness request was actually posted within a given block. - /// @param _block Block number whose randomness request is being queried for. - /// @return _id Unique request identifier as provided by the WRB. - /// @return _prevBlock Block number in which a randomness request got posted just before this one. 0 if none. - /// @return _nextBlock Block number in which a randomness request got posted just after this one, 0 if none. - function getRandomizeData(uint256 _block) - external view returns (uint256 _id, uint256 _prevBlock, uint256 _nextBlock); - - /// @notice Retrieves the randomness generated upon solving a request that was posted within a given block, - /// if any, or to the _first_ request posted after that block, otherwise. Should the intended - /// request happen to be finalized with errors on the Witnet oracle network side, this function - /// will recursively try to return randomness from the next non-faulty randomization request found - /// in storage, if any. - /// @dev Fails if: - /// @dev i. no `randomize()` was not called in either the given block, or afterwards. - /// @dev ii. a request posted in/after given block does exist, but no result has been provided yet. - /// @dev iii. all requests in/after the given block were solved with errors. - /// @param _block Block number from which the search will start. - function getRandomnessAfter(uint256 _block) external view returns (bytes32); - - /// @notice Tells what is the number of the next block in which a randomization request was posted after the given one. - /// @param _block Block number from which the search will start. - /// @return Number of the first block found after the given one, or `0` otherwise. - function getRandomnessNextBlock(uint256 _block) external view returns (uint256); - - /// @notice Gets previous block in which a randomness request was posted before the given one. - /// @param _block Block number from which the search will start. - /// @return First block found before the given one, or `0` otherwise. - function getRandomnessPrevBlock(uint256 _block) external view returns (uint256); - - /// @notice Returns `true` only when the randomness request that got posted within given block was already - /// reported back from the Witnet oracle, either successfully or with an error of any kind. - function isRandomized(uint256 _block) external view returns (bool); - - /// @notice Returns latest block in which a randomness request got sucessfully posted to the WRB. - function latestRandomizeBlock() external view returns (uint256); - - /// @notice Generates a pseudo-random number uniformly distributed within the range [0 .. _range), by using - /// @notice the given `_nonce` value and the randomness returned by `getRandomnessAfter(_block)`. - /// @dev Fails under same conditions as `getRandomnessAfter(uint256)` may do. - /// @param _range Range within which the uniformly-distributed random number will be generated. - /// @param _nonce Nonce value enabling multiple random numbers from the same randomness value. - /// @param _block Block number from which the search will start. - function random(uint32 _range, uint256 _nonce, uint256 _block) external view returns (uint32); - - /// @notice Generates a pseudo-random number uniformly distributed within the range [0 .. _range), by using - /// @notice the given `_nonce` value and the given `_seed` as a source of entropy. - /// @param _range Range within which the uniformly-distributed random number will be generated. - /// @param _nonce Nonce value enabling multiple random numbers from the same randomness value. - /// @param _seed Seed value used as entropy source. - function random(uint32 _range, uint256 _nonce, bytes32 _seed) external pure returns (uint32); - - /// @notice Requests the Witnet oracle to generate an EVM-agnostic and trustless source of randomness. - /// @notice Only one randomness request per block will be actually posted to the WRB. Should there - /// @notice already be a posted request within current block, it will try to upgrade Witnet fee of current's - /// @notice block randomness request according to current gas price. In both cases, all unused funds shall - /// @notice be transfered back to the tx sender. - /// @return _usedFunds Amount of funds actually used from those provided by the tx sender. - function randomize() external payable returns (uint256 _usedFunds); - - /// @notice Increases Witnet fee related to a pending-to-be-solved randomness request, as much as it - /// @notice may be required in proportion to how much bigger the current tx gas price is with respect the - /// @notice highest gas price that was paid in either previous fee upgrades, or when the given randomness - /// @notice request was posted. All unused funds shall be transferred back to the tx sender. - /// @return _usedFunds Amount of dunds actually used from those provided by the tx sender. - function upgradeRandomizeFee(uint256 _block) external payable returns (uint256 _usedFunds); - - /// @notice Returns address of the WitnetOracle being used for posting randomness requests to Wtinet. - function witnet() external view returns (WitnetOracle); - - /// @notice Returns address of the WitnetRequestRandomness contract being used for solving randomness. - function witnetRandomnessRequest() external view returns (WitnetRequest); - - /// @notice Returns SLA parameters that are being used every time there's a new randomness request. - function witnetRandomnessSLA() external view returns (WitnetV2.RadonSLA memory); - -} \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRandomnessAdmin.sol b/contracts/interfaces/IWitnetRandomnessAdmin.sol deleted file mode 100644 index 741eb6648..000000000 --- a/contracts/interfaces/IWitnetRandomnessAdmin.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.8.0 <0.9.0; - -import "../libs/WitnetV2.sol"; - -interface IWitnetRandomnessAdmin { - function owner() external view returns (address); - function acceptOwnership() external; - function pendingOwner() external returns (address); - function transferOwnership(address) external; - function settleWitnetRandomnessSLA(WitnetV2.RadonSLA calldata) external returns (bytes32); -} \ No newline at end of file diff --git a/contracts/interfaces/IWitnetRequestParser.sol b/contracts/interfaces/IWitnetRequestParser.sol deleted file mode 100644 index bedf56cfc..000000000 --- a/contracts/interfaces/IWitnetRequestParser.sol +++ /dev/null @@ -1,99 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; -pragma experimental ABIEncoderV2; - -import "../libs/Witnet.sol"; - -/// @title The Witnet interface for decoding Witnet-provided request to Data Requests. -/// This interface exposes functions to check for the success/failure of -/// a Witnet-provided result, as well as to parse and convert result into -/// Solidity types suitable to the application level. -/// @author The Witnet Foundation. -interface IWitnetRequestParser { - - /// Decode raw CBOR bytes into a Witnet.Result instance. - /// @param _cborBytes Raw bytes representing a CBOR-encoded value. - /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory _cborBytes) external pure returns (Witnet.Result memory); - - /// Tell if a Witnet.Result is successful. - /// @param _result An instance of Witnet.Result. - /// @return `true` if successful, `false` if errored. - function isOk(Witnet.Result memory _result) external pure returns (bool); - - /// Tell if a Witnet.Result is errored. - /// @param _result An instance of Witnet.Result. - /// @return `true` if errored, `false` if successful. - function isError(Witnet.Result memory _result) external pure returns (bool); - - /// Decode a boolean value from a Witnet.Result as an `bool` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bool` decoded from the Witnet.Result. - function asBool(Witnet.Result memory _result) external pure returns (bool); - - /// Decode a bytes value from a Witnet.Result as a `bytes` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bytes` decoded from the Witnet.Result. - function asBytes(Witnet.Result memory _result) external pure returns (bytes memory); - - /// Decode a bytes value from a Witnet.Result as a `bytes32` value. - /// @param _result An instance of Witnet.Result. - /// @return The `bytes32` decoded from the Witnet.Result. - function asBytes32(Witnet.Result memory _result) external pure returns (bytes32); - - /// Decode an error code from a Witnet.Result as a member of `Witnet.ResultErrorCodes`. - /// @param _result An instance of `Witnet.Result`. - /// @return The `CBORValue.Error memory` decoded from the Witnet.Result. - function asErrorCode(Witnet.Result memory _result) external pure returns (Witnet.ResultErrorCodes); - - /// Generate a suitable error message for a member of `Witnet.ResultErrorCodes` and its corresponding arguments. - /// @dev WARN: Note that client contracts should wrap this function into a try-catch foreseing potential errors generated in this function - /// @param _result An instance of `Witnet.Result`. - /// @return A tuple containing the `CBORValue.Error memory` decoded from the `Witnet.Result`, plus a loggable error message. - function asErrorMessage(Witnet.Result memory _result) external pure returns (Witnet.ResultErrorCodes, string memory); - - /// Decode a fixed16 (half-precision) numeric value from a Witnet.Result as an `int32` 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`. - /// @param _result An instance of Witnet.Result. - /// @return The `int32` decoded from the Witnet.Result. - function asFixed16(Witnet.Result memory _result) external pure returns (int32); - - /// Decode an array of fixed16 values from a Witnet.Result as an `int32[]` value. - /// @param _result An instance of Witnet.Result. - /// @return The `int32[]` decoded from the Witnet.Result. - function asFixed16Array(Witnet.Result memory _result) external pure returns (int32[] memory); - - /// Decode a integer numeric value from a Witnet.Result as an `int128` value. - /// @param _result An instance of Witnet.Result. - /// @return The `int` decoded from the Witnet.Result. - function asInt128(Witnet.Result memory _result) external pure returns (int); - - /// Decode an array of integer numeric values from a Witnet.Result as an `int128[]` value. - /// @param _result An instance of Witnet.Result. - /// @return The `int128[]` decoded from the Witnet.Result. - function asInt128Array(Witnet.Result memory _result) external pure returns (int[] memory); - - /// Decode a string value from a Witnet.Result as a `string` value. - /// @param _result An instance of Witnet.Result. - /// @return The `string` decoded from the Witnet.Result. - function asString(Witnet.Result memory _result) external pure returns (string memory); - - /// Decode an array of string values from a Witnet.Result as a `string[]` value. - /// @param _result An instance of Witnet.Result. - /// @return The `string[]` decoded from the Witnet.Result. - function asStringArray(Witnet.Result memory _result) external pure returns (string[] memory); - - /// Decode a natural numeric value from a Witnet.Result as a `uint` value. - /// @param _result An instance of Witnet.Result. - /// @return The `uint` decoded from the Witnet.Result. - function asUint64(Witnet.Result memory _result) external pure returns (uint); - - /// Decode an array of natural numeric values from a Witnet.Result as a `uint[]` value. - /// @param _result An instance of Witnet.Result. - /// @return The `uint[]` decoded from the Witnet.Result. - function asUint64Array(Witnet.Result memory _result) external pure returns (uint[] memory); - -} diff --git a/test/witnet_randomness.test.js b/test/witnet_randomness.test.js deleted file mode 100644 index c8c782a52..000000000 --- a/test/witnet_randomness.test.js +++ /dev/null @@ -1,127 +0,0 @@ -const WitnetRandomnessMock = artifacts.require("WitnetMockedRandomness") -const WitnetOracle = artifacts.require("WitnetOracle") -const RandomnessBareMinimal = artifacts.require("RandomnessBareMinimal") - -const { - balance, - BN, -} = require("@openzeppelin/test-helpers") - -const truffleAssert = require("truffle-assertions") -const { expect, assert } = require("chai") - -contract("WitnetRandomnesMock", accounts => { - let witnet - const deployer = accounts[0] - const stranger = accounts[1] - const fee = 10 ** 15 - const gasPrice = 1e9 - - before(async () => { - witnet = await WitnetRandomnessMock.new( - WitnetOracle.address, - 2, // _mockRandomizeLatencyBlock - fee, // _mockRandomizeFee - { from: deployer } - ) - }) - describe("Example: RandomnessBareMinimal", async () => { - let myContract - before(async () => { - myContract = await RandomnessBareMinimal.new( - witnet.address, - { from: deployer } - ) - }) - it("witnet address is accesible and valid", async () => { - assert.equal( - await myContract.witnet(), - witnet.address - ) - }) - it("initial randomness is zero", async () => { - assert.equal( - (await myContract.randomness()).toString(), - "0" - ) - }) - it("initial randomizing block is zero", async () => { - assert.equal( - (await myContract.latestRandomizingBlock()).toString(), - "0" - ) - }) - it("requesting random number with no fee, fails", async () => { - await truffleAssert.reverts( - myContract.requestRandomNumber(), - "insufficient reward" - ) - }) - it("requesting random number with less fee than required, fails", async () => { - await truffleAssert.reverts( - myContract.requestRandomNumber( - { value: fee / 2 } - ), - "insufficient reward" - ) - }) - let randomizingblock1 - it("requesting random number will spend only required gas and reward", async () => { - const balanceTracker = await balance.tracker(deployer) - const initialBalance = await balanceTracker.get() - const tx = await myContract.requestRandomNumber({ - value: 10 ** 18, - from: deployer, - gasPrice, - }) - const finalBalance = await balanceTracker.get() - expect( - finalBalance.eq( - initialBalance - .sub(new BN(fee)) - .sub(new BN(tx.receipt.gasUsed)) - ), - "caller balance should have decreased only by required gas and reward" - ) - randomizingblock1 = await myContract.latestRandomizingBlock() - assert(randomizingblock1 > 0, "no randomizing block number") - }) - it("fetching random number from unsolved randomize, fails", async () => { - await truffleAssert.reverts( - myContract.fetchRandomNumber(), - "pending randomize" - ) - }) - it("fetching random number from solved randomize, works", async () => { - await myContract.nextBlock() - await myContract.fetchRandomNumber() - }) - let randomizingblock2 - it("upgrading pending randomize that requires no reward upgrade, transfers back unused funds", async () => { - await myContract.requestRandomNumber({ - value: 10 ** 18, - from: stranger, - gasPrice: 10 * 10 ** 9, - }) - randomizingblock2 = await myContract.latestRandomizingBlock() - const balanceTracker = await balance.tracker(stranger) - const initialBalance = await balanceTracker.get() - const tx = await witnet.upgradeRandomizeFee( - randomizingblock2, - { - value: 10 ** 18, - from: stranger, - gasPrice, - } - ) - const finalBalance = await balanceTracker.get() - expect( - finalBalance.eq( - initialBalance - .sub(new BN(tx.receipt.gasUsed)) - ), - "caller balance should have decreased only be used gas" - ) - }) - }) -}) From 67ac34a270a82b14c126f5359c144a8949b5b122 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:37:51 +0100 Subject: [PATCH 125/149] chore: replace V2/interfaces --- contracts/WitnetOracle.sol | 4 ++-- contracts/WitnetPriceFeeds.sol | 4 ++-- contracts/WitnetRequestBytecodes.sol | 2 +- contracts/WitnetRequestFactory.sol | 2 +- contracts/apps/WitnetConsumer.sol | 2 +- contracts/apps/WitnetFeeds.sol | 6 +++--- contracts/apps/WitnetPriceSolverBase.sol | 2 +- contracts/core/defaults/WitnetRequestBoardTrustableBase.sol | 4 ++-- contracts/interfaces/{V2 => }/IFeeds.sol | 0 contracts/interfaces/{V2 => }/IWitnetConsumer.sol | 2 +- contracts/interfaces/{V2 => }/IWitnetFeeds.sol | 4 ++-- contracts/interfaces/{V2 => }/IWitnetFeedsAdmin.sol | 4 ++-- contracts/interfaces/{V2 => }/IWitnetOracle.sol | 2 +- contracts/interfaces/{V2 => }/IWitnetOracleEvents.sol | 2 +- contracts/interfaces/{V2 => }/IWitnetPriceFeeds.sol | 0 contracts/interfaces/{V2 => }/IWitnetPriceSolver.sol | 2 +- .../interfaces/{V2 => }/IWitnetPriceSolverDeployer.sol | 0 .../interfaces/{V2 => }/IWitnetRequestBoardReporter.sol | 0 contracts/interfaces/{V2 => }/IWitnetRequestBytecodes.sol | 2 +- contracts/interfaces/{V2 => }/IWitnetRequestFactory.sol | 0 contracts/libs/WitnetPriceFeedsLib.sol | 4 ++-- src/index.js | 2 +- 22 files changed, 25 insertions(+), 25 deletions(-) rename contracts/interfaces/{V2 => }/IFeeds.sol (100%) rename contracts/interfaces/{V2 => }/IWitnetConsumer.sol (98%) rename contracts/interfaces/{V2 => }/IWitnetFeeds.sol (96%) rename contracts/interfaces/{V2 => }/IWitnetFeedsAdmin.sol (92%) rename contracts/interfaces/{V2 => }/IWitnetOracle.sol (99%) rename contracts/interfaces/{V2 => }/IWitnetOracleEvents.sol (96%) rename contracts/interfaces/{V2 => }/IWitnetPriceFeeds.sol (100%) rename contracts/interfaces/{V2 => }/IWitnetPriceSolver.sol (94%) rename contracts/interfaces/{V2 => }/IWitnetPriceSolverDeployer.sol (100%) rename contracts/interfaces/{V2 => }/IWitnetRequestBoardReporter.sol (100%) rename contracts/interfaces/{V2 => }/IWitnetRequestBytecodes.sol (98%) rename contracts/interfaces/{V2 => }/IWitnetRequestFactory.sol (100%) diff --git a/contracts/WitnetOracle.sol b/contracts/WitnetOracle.sol index 69c06cf49..42d618970 100644 --- a/contracts/WitnetOracle.sol +++ b/contracts/WitnetOracle.sol @@ -4,8 +4,8 @@ pragma solidity >=0.7.0 <0.9.0; import "./WitnetRequestBytecodes.sol"; import "./WitnetRequestFactory.sol"; -import "./interfaces/V2/IWitnetOracle.sol"; -import "./interfaces/V2/IWitnetOracleEvents.sol"; +import "./interfaces/IWitnetOracle.sol"; +import "./interfaces/IWitnetOracleEvents.sol"; /// @title Witnet Request Board functionality base contract. /// @author The Witnet Foundation. diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol index 7eaed4789..575c23e6a 100644 --- a/contracts/WitnetPriceFeeds.sol +++ b/contracts/WitnetPriceFeeds.sol @@ -4,8 +4,8 @@ pragma solidity >=0.7.0 <0.9.0; import "./apps/WitnetFeeds.sol"; -import "./interfaces/V2/IWitnetPriceFeeds.sol"; -import "./interfaces/V2/IWitnetPriceSolverDeployer.sol"; +import "./interfaces/IWitnetPriceFeeds.sol"; +import "./interfaces/IWitnetPriceSolverDeployer.sol"; /// @title WitnetPriceFeeds: Price Feeds live repository reliant on the Witnet Oracle blockchain. /// @author The Witnet Foundation. diff --git a/contracts/WitnetRequestBytecodes.sol b/contracts/WitnetRequestBytecodes.sol index 6993db34e..15b647159 100644 --- a/contracts/WitnetRequestBytecodes.sol +++ b/contracts/WitnetRequestBytecodes.sol @@ -3,7 +3,7 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "./interfaces/V2/IWitnetRequestBytecodes.sol"; +import "./interfaces/IWitnetRequestBytecodes.sol"; abstract contract WitnetRequestBytecodes is diff --git a/contracts/WitnetRequestFactory.sol b/contracts/WitnetRequestFactory.sol index 378a01ac4..d222d7271 100644 --- a/contracts/WitnetRequestFactory.sol +++ b/contracts/WitnetRequestFactory.sol @@ -5,7 +5,7 @@ pragma experimental ABIEncoderV2; import "./WitnetRequestBytecodes.sol"; import "./WitnetOracle.sol"; -import "./interfaces/V2/IWitnetRequestFactory.sol"; +import "./interfaces/IWitnetRequestFactory.sol"; abstract contract WitnetRequestFactory is diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index c0029b640..32250928f 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.0; import "./UsingWitnet.sol"; -import "../interfaces/V2/IWitnetConsumer.sol"; +import "../interfaces/IWitnetConsumer.sol"; abstract contract WitnetConsumer is diff --git a/contracts/apps/WitnetFeeds.sol b/contracts/apps/WitnetFeeds.sol index 0d0e4c9d9..97462e644 100644 --- a/contracts/apps/WitnetFeeds.sol +++ b/contracts/apps/WitnetFeeds.sol @@ -2,9 +2,9 @@ pragma solidity >=0.7.0 <0.9.0; -import "../interfaces/V2/IFeeds.sol"; -import "../interfaces/V2/IWitnetFeeds.sol"; -import "../interfaces/V2/IWitnetFeedsAdmin.sol"; +import "../interfaces/IFeeds.sol"; +import "../interfaces/IWitnetFeeds.sol"; +import "../interfaces/IWitnetFeedsAdmin.sol"; import "ado-contracts/contracts/interfaces/IERC2362.sol"; diff --git a/contracts/apps/WitnetPriceSolverBase.sol b/contracts/apps/WitnetPriceSolverBase.sol index c76de2cb3..b79c48ed9 100644 --- a/contracts/apps/WitnetPriceSolverBase.sol +++ b/contracts/apps/WitnetPriceSolverBase.sol @@ -3,7 +3,7 @@ pragma solidity >=0.8.0 <0.9.0; import "../data/WitnetPriceFeedsData.sol"; -import "../interfaces/V2/IWitnetPriceFeeds.sol"; +import "../interfaces/IWitnetPriceFeeds.sol"; abstract contract WitnetPriceSolverBase is diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index ef96d7af7..46e6dc747 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -10,8 +10,8 @@ import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestBoardDataACLs.sol"; import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; -import "../../interfaces/V2/IWitnetRequestBoardReporter.sol"; -import "../../interfaces/V2/IWitnetConsumer.sol"; +import "../../interfaces/IWitnetRequestBoardReporter.sol"; +import "../../interfaces/IWitnetConsumer.sol"; import "../../libs/WitnetErrorsLib.sol"; import "../../patterns/Payable.sol"; diff --git a/contracts/interfaces/V2/IFeeds.sol b/contracts/interfaces/IFeeds.sol similarity index 100% rename from contracts/interfaces/V2/IFeeds.sol rename to contracts/interfaces/IFeeds.sol diff --git a/contracts/interfaces/V2/IWitnetConsumer.sol b/contracts/interfaces/IWitnetConsumer.sol similarity index 98% rename from contracts/interfaces/V2/IWitnetConsumer.sol rename to contracts/interfaces/IWitnetConsumer.sol index 7d1b953e2..3f84c13c0 100644 --- a/contracts/interfaces/V2/IWitnetConsumer.sol +++ b/contracts/interfaces/IWitnetConsumer.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "../../libs/Witnet.sol"; +import "../libs/Witnet.sol"; interface IWitnetConsumer { diff --git a/contracts/interfaces/V2/IWitnetFeeds.sol b/contracts/interfaces/IWitnetFeeds.sol similarity index 96% rename from contracts/interfaces/V2/IWitnetFeeds.sol rename to contracts/interfaces/IWitnetFeeds.sol index 77ffd551e..e5e42ba27 100644 --- a/contracts/interfaces/V2/IWitnetFeeds.sol +++ b/contracts/interfaces/IWitnetFeeds.sol @@ -2,8 +2,8 @@ pragma solidity >=0.8.0 <0.9.0; -import "../../WitnetRequestBytecodes.sol"; -import "../../WitnetOracle.sol"; +import "../WitnetOracle.sol"; +import "../WitnetRequestBytecodes.sol"; interface IWitnetFeeds { diff --git a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol b/contracts/interfaces/IWitnetFeedsAdmin.sol similarity index 92% rename from contracts/interfaces/V2/IWitnetFeedsAdmin.sol rename to contracts/interfaces/IWitnetFeedsAdmin.sol index 9388cddaa..87190fb3c 100644 --- a/contracts/interfaces/V2/IWitnetFeedsAdmin.sol +++ b/contracts/interfaces/IWitnetFeedsAdmin.sol @@ -2,8 +2,8 @@ pragma solidity >=0.8.0 <0.9.0; -import "../../libs/WitnetV2.sol"; -import "../../WitnetRequest.sol"; +import "../libs/WitnetV2.sol"; +import "../WitnetRequest.sol"; interface IWitnetFeedsAdmin { function acceptOwnership() external; diff --git a/contracts/interfaces/V2/IWitnetOracle.sol b/contracts/interfaces/IWitnetOracle.sol similarity index 99% rename from contracts/interfaces/V2/IWitnetOracle.sol rename to contracts/interfaces/IWitnetOracle.sol index c737e8ab2..2478bd3d6 100644 --- a/contracts/interfaces/V2/IWitnetOracle.sol +++ b/contracts/interfaces/IWitnetOracle.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; -import "../../libs/WitnetV2.sol"; +import "../libs/WitnetV2.sol"; interface IWitnetOracle { diff --git a/contracts/interfaces/V2/IWitnetOracleEvents.sol b/contracts/interfaces/IWitnetOracleEvents.sol similarity index 96% rename from contracts/interfaces/V2/IWitnetOracleEvents.sol rename to contracts/interfaces/IWitnetOracleEvents.sol index d16d103e4..7f3148df6 100644 --- a/contracts/interfaces/V2/IWitnetOracleEvents.sol +++ b/contracts/interfaces/IWitnetOracleEvents.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.7.0 <0.9.0; -import "../../libs/WitnetV2.sol"; +import "../libs/WitnetV2.sol"; interface IWitnetOracleEvents { diff --git a/contracts/interfaces/V2/IWitnetPriceFeeds.sol b/contracts/interfaces/IWitnetPriceFeeds.sol similarity index 100% rename from contracts/interfaces/V2/IWitnetPriceFeeds.sol rename to contracts/interfaces/IWitnetPriceFeeds.sol diff --git a/contracts/interfaces/V2/IWitnetPriceSolver.sol b/contracts/interfaces/IWitnetPriceSolver.sol similarity index 94% rename from contracts/interfaces/V2/IWitnetPriceSolver.sol rename to contracts/interfaces/IWitnetPriceSolver.sol index 342c7b975..294f3cd8d 100644 --- a/contracts/interfaces/V2/IWitnetPriceSolver.sol +++ b/contracts/interfaces/IWitnetPriceSolver.sol @@ -2,7 +2,7 @@ pragma solidity >=0.8.0 <0.9.0; -import "../../libs/WitnetV2.sol"; +import "../libs/WitnetV2.sol"; interface IWitnetPriceSolver { struct Price { diff --git a/contracts/interfaces/V2/IWitnetPriceSolverDeployer.sol b/contracts/interfaces/IWitnetPriceSolverDeployer.sol similarity index 100% rename from contracts/interfaces/V2/IWitnetPriceSolverDeployer.sol rename to contracts/interfaces/IWitnetPriceSolverDeployer.sol diff --git a/contracts/interfaces/V2/IWitnetRequestBoardReporter.sol b/contracts/interfaces/IWitnetRequestBoardReporter.sol similarity index 100% rename from contracts/interfaces/V2/IWitnetRequestBoardReporter.sol rename to contracts/interfaces/IWitnetRequestBoardReporter.sol diff --git a/contracts/interfaces/V2/IWitnetRequestBytecodes.sol b/contracts/interfaces/IWitnetRequestBytecodes.sol similarity index 98% rename from contracts/interfaces/V2/IWitnetRequestBytecodes.sol rename to contracts/interfaces/IWitnetRequestBytecodes.sol index 5d1f51987..e4be2f24a 100644 --- a/contracts/interfaces/V2/IWitnetRequestBytecodes.sol +++ b/contracts/interfaces/IWitnetRequestBytecodes.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity >=0.8.0 <0.9.0; -import "../../libs/Witnet.sol"; +import "../libs/Witnet.sol"; interface IWitnetRequestBytecodes { diff --git a/contracts/interfaces/V2/IWitnetRequestFactory.sol b/contracts/interfaces/IWitnetRequestFactory.sol similarity index 100% rename from contracts/interfaces/V2/IWitnetRequestFactory.sol rename to contracts/interfaces/IWitnetRequestFactory.sol diff --git a/contracts/libs/WitnetPriceFeedsLib.sol b/contracts/libs/WitnetPriceFeedsLib.sol index c46d51630..d64458925 100644 --- a/contracts/libs/WitnetPriceFeedsLib.sol +++ b/contracts/libs/WitnetPriceFeedsLib.sol @@ -3,8 +3,8 @@ pragma solidity >=0.7.0 <0.9.0; pragma experimental ABIEncoderV2; -import "../interfaces/V2/IWitnetPriceSolver.sol"; -import "../interfaces/V2/IWitnetPriceSolverDeployer.sol"; +import "../interfaces/IWitnetPriceSolver.sol"; +import "../interfaces/IWitnetPriceSolverDeployer.sol"; import "../libs/Slices.sol"; diff --git a/src/index.js b/src/index.js index f7cef85f2..cea57647b 100644 --- a/src/index.js +++ b/src/index.js @@ -37,7 +37,7 @@ module.exports = { WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), - IWitnetPriceSolver: require("../artifacts/contracts/interfaces/V2/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), + IWitnetPriceSolver: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), }, settings: require("../settings"), utils, From 5afd7bd8ea3966a0864a4016504d836438a06ba9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:40:25 +0100 Subject: [PATCH 126/149] chore: refactor exported artifact IWitnetPriceSolver -> WitnetPriceFeedRoute --- src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index cea57647b..942de88c8 100644 --- a/src/index.js +++ b/src/index.js @@ -30,14 +30,14 @@ module.exports = { }, supportedNetworks, artifacts: { + WitnetOracle: require("../artifacts/contracts/WitnetOracle.sol/WitnetOracle.json"), WitnetPriceFeeds: require("../artifacts/contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), + WitnetPriceFeedRoute: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), - WitnetOracle: require("../artifacts/contracts/WitnetOracle.sol/WitnetOracle.json"), WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), - WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), - IWitnetPriceSolver: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), + WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json") }, settings: require("../settings"), utils, From 167ea945348def00ddc600b0fcf316b21419524c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 11:43:44 +0100 Subject: [PATCH 127/149] chore: bind package git repository to branch 2.0.x --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fc5c5721c..f95ef86c7 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "license": "MIT", "repository": { "type": "git", - "url": "https://github.com/witnet/witnet-solidity-bridge.git" + "url": "https://github.com/witnet/witnet-solidity-bridge/tree/2.0.x" }, "type": "commonjs", "keywords": [ From 9159fe07a6854be1367fa0385b823582cfac8a87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 14:03:30 +0100 Subject: [PATCH 128/149] chore: revisit package deps --- package.json | 8 +- src/index.js | 2 +- src/utils.js | 11 +- yarn.lock | 644 +++++++++++++++++++++++++++------------------------ 4 files changed, 356 insertions(+), 309 deletions(-) diff --git a/package.json b/package.json index f95ef86c7..3fc244227 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,11 @@ "prepare": "npx truffle compile --all && npx hardhat compile && node ./scripts/prepare.js", "test": "npm run clean && npx truffle test" }, + "dependencies": { + "dotenv": "^16.4.1", + "lodash.merge": "^4.6.2", + "proper-lockfile": "^4.1.2" + }, "devDependencies": { "@nomicfoundation/hardhat-verify": "^2.0.4", "@openzeppelin/contracts": "^5.0.1", @@ -61,7 +66,6 @@ "ado-contracts": "1.0.0", "bn.js": "^4.11.0", "custom-error-test-helper": "^1.0.6", - "dotenv": "^16.4.1", "eslint": "^8.56.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.1", @@ -71,9 +75,7 @@ "eth-helpers": "^1.3.0", "hardhat": "^2.19.5", "js-sha256": "^0.11.0", - "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", diff --git a/src/index.js b/src/index.js index 942de88c8..c666e4511 100644 --- a/src/index.js +++ b/src/index.js @@ -31,7 +31,7 @@ module.exports = { supportedNetworks, artifacts: { WitnetOracle: require("../artifacts/contracts/WitnetOracle.sol/WitnetOracle.json"), - WitnetPriceFeeds: require("../artifacts/contracts/apps/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), + WitnetPriceFeeds: require("../artifacts/contracts/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), WitnetPriceFeedRoute: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), diff --git a/src/utils.js b/src/utils.js index e0b1ab6e6..4cd0c5d0c 100644 --- a/src/utils.js +++ b/src/utils.js @@ -2,7 +2,6 @@ const fs = require("fs") require("dotenv").config() const lockfile = require("proper-lockfile") const readline = require("readline") -const web3 = require("web3") module.exports = { fromAscii, @@ -137,9 +136,9 @@ 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(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - console.info(" ", "> total cost: ", web3.utils.fromWei( - BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), - "ether" - ), "ETH" - ) + // console.info(" ", "> total cost: ", web3.utils.fromWei( + // BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), + // "ether" + // ), "ETH" + // ) } diff --git a/yarn.lock b/yarn.lock index 26599014a..7a7920b39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -340,7 +340,7 @@ "@ethersproject/logger" "^5.7.0" "@ethersproject/properties" "^5.7.0" -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0": +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": version "5.7.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== @@ -948,6 +948,21 @@ mcl-wasm "^0.7.1" rustbn.js "~0.2.0" +"@nomicfoundation/hardhat-verify@^2.0.4": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.4.tgz#65b86787fc7b47d38fd941862266065c7eb9bca4" + integrity sha512-B8ZjhOrmbbRWqJi65jvQblzjsfYktjqj2vmOm+oc2Vu8drZbT2cjeSCRHZKbS7lOtfW78aJZSFvw+zRLCiABJA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + "@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": version "0.1.1" resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" @@ -1765,9 +1780,9 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/node@*": - version "20.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.16.tgz#4411f79411514eb8e2926f036c86c9f0e4ec6708" - integrity sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ== + version "20.11.17" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" + integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== dependencies: undici-types "~5.26.4" @@ -2199,7 +2214,7 @@ argsarray@0.0.1: resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -2235,15 +2250,15 @@ array.prototype.filter@^1.0.3: is-string "^1.0.7" array.prototype.findlastindex@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz#b37598438f97b579166940814e2c0493a4f50207" - integrity sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA== + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" + integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - get-intrinsic "^1.2.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.3.0" + es-shim-unscopables "^1.0.2" array.prototype.flat@^1.3.2: version "1.3.2" @@ -2265,7 +2280,7 @@ array.prototype.flatmap@^1.3.2: es-abstract "^1.22.1" es-shim-unscopables "^1.0.0" -arraybuffer.prototype.slice@^1.0.2: +arraybuffer.prototype.slice@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== @@ -2704,14 +2719,16 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" -call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -2764,6 +2781,13 @@ cbor@^5.2.0: bignumber.js "^9.0.1" nofilter "^1.0.4" +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + chai-bn@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" @@ -3378,14 +3402,14 @@ deferred-leveldown@~5.3.0: abstract-leveldown "~6.2.1" inherits "^2.0.3" -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== +define-data-property@^1.0.1, define-data-property@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== dependencies: - get-intrinsic "^1.2.1" + es-define-property "^1.0.0" + es-errors "^1.3.0" gopd "^1.0.1" - has-property-descriptors "^1.0.0" define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: version "1.2.1" @@ -3490,9 +3514,9 @@ dot-prop@^6.0.1: is-obj "^2.0.0" dotenv@^16.4.1: - version "16.4.1" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.1.tgz#1d9931f1d3e5d2959350d1250efab299561f7f11" - integrity sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ== + version "16.4.4" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.4.tgz#a26e7bb95ebd36272ebb56edb80b826aecf224c1" + integrity sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg== double-ended-queue@2.1.0-0: version "2.1.0-0" @@ -3602,61 +3626,70 @@ error-ex@^1.2.0, error-ex@^1.3.1: is-arrayish "^0.2.1" es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== + version "1.22.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" + integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.6" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.2" es-to-primitive "^1.2.1" function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" globalthis "^1.0.3" gopd "^1.0.1" - has-property-descriptors "^1.0.0" + has-property-descriptors "^1.0.2" has-proto "^1.0.1" has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" is-callable "^1.2.7" is-negative-zero "^2.0.2" is-regex "^1.1.4" is-shared-array-buffer "^1.0.2" is-string "^1.0.7" - is-typed-array "^1.1.12" + is-typed-array "^1.1.13" is-weakref "^1.0.2" object-inspect "^1.13.1" object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" string.prototype.trim "^1.2.8" string.prototype.trimend "^1.0.7" string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" + typed-array-buffer "^1.0.1" typed-array-byte-length "^1.0.0" typed-array-byte-offset "^1.0.0" typed-array-length "^1.0.4" unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" + which-typed-array "^1.1.14" es-array-method-boxes-properly@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== -es-errors@^1.0.0, es-errors@^1.2.1: +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-set-tostringtag@^2.0.1: +es-set-tostringtag@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== @@ -3665,7 +3698,7 @@ es-set-tostringtag@^2.0.1: has-tostringtag "^1.0.0" hasown "^2.0.0" -es-shim-unscopables@^1.0.0: +es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== @@ -3713,9 +3746,9 @@ es6-symbol@^3.1.1, es6-symbol@^3.1.3: ext "^1.1.2" escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== escape-html@~1.0.3: version "1.0.3" @@ -4223,9 +4256,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.0.tgz#ca5e1a90b5e68f97fc8b61330d5819b82f5fab03" - integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -4530,12 +4563,12 @@ get-func-name@^2.0.1, get-func-name@^2.0.2: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.3.tgz#9d2d284a238e62672f556361e7d4e1a4686ae50e" - integrity sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - es-errors "^1.0.0" + es-errors "^1.3.0" function-bind "^1.1.2" has-proto "^1.0.1" has-symbols "^1.0.3" @@ -4558,13 +4591,14 @@ get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" get-tsconfig@^4.7.0: version "4.7.2" @@ -4606,28 +4640,28 @@ glob@7.2.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@8.1.0, glob@^8.0.3: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^3.1.1" + minimatch "^5.0.1" once "^1.3.0" - path-is-absolute "^1.0.0" -glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "^5.0.1" + minimatch "^3.1.1" once "^1.3.0" + path-is-absolute "^1.0.0" global@~4.4.0: version "4.4.0" @@ -4821,12 +4855,12 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: - get-intrinsic "^1.2.2" + es-define-property "^1.0.0" has-proto@^1.0.1: version "1.0.1" @@ -4870,10 +4904,10 @@ hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: inherits "^2.0.3" minimalistic-assert "^1.0.1" -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== +hasown@^2.0.0, hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" @@ -5065,12 +5099,12 @@ ini@^1.3.4, ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== dependencies: - get-intrinsic "^1.2.2" + es-errors "^1.3.0" hasown "^2.0.0" side-channel "^1.0.4" @@ -5099,7 +5133,7 @@ is-arguments@^1.0.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -5279,7 +5313,7 @@ is-symbol@^1.0.2, is-symbol@^1.0.3: dependencies: has-symbols "^1.0.2" -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.3, is-typed-array@^1.1.9: +is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: version "1.1.13" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== @@ -5731,6 +5765,11 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -6068,9 +6107,9 @@ mocha@10.1.0: yargs-unparser "2.0.0" mocha@^10.0.0, mocha@^10.2.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8" - integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg== + version "10.3.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" + integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== dependencies: ansi-colors "4.1.1" browser-stdout "1.3.1" @@ -6079,13 +6118,12 @@ mocha@^10.0.0, mocha@^10.2.0: diff "5.0.0" escape-string-regexp "4.0.0" find-up "5.0.0" - glob "7.2.0" + glob "8.1.0" he "1.2.0" js-yaml "4.1.0" log-symbols "4.1.0" minimatch "5.0.1" ms "2.1.3" - nanoid "3.3.3" serialize-javascript "6.0.0" strip-json-comments "3.1.1" supports-color "8.1.1" @@ -6262,6 +6300,11 @@ nofilter@^1.0.4: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -6317,7 +6360,7 @@ object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.1, object-inspect@^1.9.0: +object-inspect@^1.13.1: version "1.13.1" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== @@ -6327,7 +6370,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.4: +object.assign@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== @@ -7137,14 +7180,15 @@ regenerator-runtime@^0.14.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" registry-auth-token@^5.0.1: version "5.0.2" @@ -7365,7 +7409,7 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -safe-array-concat@^1.0.1: +safe-array-concat@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== @@ -7385,13 +7429,13 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.2.tgz#3ba32bdb3ea35f940ee87e5087c60ee786c3f6c5" - integrity sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" + call-bind "^1.0.6" + es-errors "^1.3.0" is-regex "^1.1.4" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: @@ -7429,9 +7473,9 @@ semver@^6.3.0, semver@^6.3.1: integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0" @@ -7495,18 +7539,19 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== -set-function-length@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.0.tgz#2f81dc6c16c7059bda5ab7c82c11f03a515ed8e1" - integrity sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.1" + define-data-property "^1.1.2" + es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.2" + get-intrinsic "^1.2.3" gopd "^1.0.1" has-property-descriptors "^1.0.1" -set-function-name@^2.0.0: +set-function-name@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== @@ -7578,13 +7623,14 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" + integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" + call-bind "^1.0.6" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2: version "3.0.7" @@ -7713,9 +7759,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.16" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz#a14f64e0954f6e25cc6587bd4f392522db0d998f" - integrity sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw== + version "3.0.17" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" + integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== sshpk@^1.7.0: version "1.18.0" @@ -7958,7 +8004,7 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -table@^6.8.1: +table@^6.8.0, table@^6.8.1: version "6.8.1" resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== @@ -8207,14 +8253,14 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== +typed-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" + integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" + call-bind "^1.0.6" + es-errors "^1.3.0" + is-typed-array "^1.1.13" typed-array-byte-length@^1.0.0: version "1.0.0" @@ -8479,10 +8525,10 @@ web3-bzz@1.10.0: got "12.1.0" swarm-js "^0.1.40" -web3-bzz@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.3.tgz#13942b37757eb850f3500a8e08bf605448b67566" - integrity sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ== +web3-bzz@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.4.tgz#dcc787970767d9004c73d11d0eeef774ce16b880" + integrity sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw== dependencies: "@types/node" "^12.12.6" got "12.1.0" @@ -8496,13 +8542,13 @@ web3-core-helpers@1.10.0: web3-eth-iban "1.10.0" web3-utils "1.10.0" -web3-core-helpers@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.3.tgz#f2db40ea57e888795e46f229b06113b60bcd671c" - integrity sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA== +web3-core-helpers@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz#bd2b4140df2016d5dd3bb2b925fc29ad8678677c" + integrity sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g== dependencies: - web3-eth-iban "1.10.3" - web3-utils "1.10.3" + web3-eth-iban "1.10.4" + web3-utils "1.10.4" web3-core-method@1.10.0: version "1.10.0" @@ -8515,16 +8561,16 @@ web3-core-method@1.10.0: web3-core-subscriptions "1.10.0" web3-utils "1.10.0" -web3-core-method@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.3.tgz#63f16310ccab4eec8eca0a337d534565c2ba8d33" - integrity sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q== +web3-core-method@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.4.tgz#566b52f006d3cbb13b21b72b8d2108999bf5d6bf" + integrity sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA== dependencies: "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.3" - web3-core-promievent "1.10.3" - web3-core-subscriptions "1.10.3" - web3-utils "1.10.3" + web3-core-helpers "1.10.4" + web3-core-promievent "1.10.4" + web3-core-subscriptions "1.10.4" + web3-utils "1.10.4" web3-core-promievent@1.10.0: version "1.10.0" @@ -8533,10 +8579,10 @@ web3-core-promievent@1.10.0: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.3.tgz#9765dd42ce6cf2dc0a08eaffee607b855644f290" - integrity sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ== +web3-core-promievent@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz#629b970b7934430b03c5033c79f3bb3893027e22" + integrity sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ== dependencies: eventemitter3 "4.0.4" @@ -8551,16 +8597,16 @@ web3-core-requestmanager@1.10.0: web3-providers-ipc "1.10.0" web3-providers-ws "1.10.0" -web3-core-requestmanager@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.3.tgz#c34ca8e998a18d6ca3fa7f7a11d4391da401c987" - integrity sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw== +web3-core-requestmanager@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz#eb1f147e6b9df84e3a37e602162f8925bdb4bb9a" + integrity sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg== dependencies: util "^0.12.5" - web3-core-helpers "1.10.3" - web3-providers-http "1.10.3" - web3-providers-ipc "1.10.3" - web3-providers-ws "1.10.3" + web3-core-helpers "1.10.4" + web3-providers-http "1.10.4" + web3-providers-ipc "1.10.4" + web3-providers-ws "1.10.4" web3-core-subscriptions@1.10.0: version "1.10.0" @@ -8570,13 +8616,13 @@ web3-core-subscriptions@1.10.0: eventemitter3 "4.0.4" web3-core-helpers "1.10.0" -web3-core-subscriptions@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.3.tgz#58768cd72a9313252ef05dc52c09536f009a9479" - integrity sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA== +web3-core-subscriptions@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz#2f4dcb404237e92802a563265d11a33934dc38e6" + integrity sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.10.3" + web3-core-helpers "1.10.4" web3-core@1.10.0: version "1.10.0" @@ -8591,18 +8637,18 @@ web3-core@1.10.0: web3-core-requestmanager "1.10.0" web3-utils "1.10.0" -web3-core@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.3.tgz#4aeb8f4b0cb5775d9fa4edf1127864743f1c3ae3" - integrity sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw== +web3-core@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.4.tgz#639de68b8b9871d2dc8892e0dd4e380cb1361a98" + integrity sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww== dependencies: "@types/bn.js" "^5.1.1" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.10.3" - web3-core-method "1.10.3" - web3-core-requestmanager "1.10.3" - web3-utils "1.10.3" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-requestmanager "1.10.4" + web3-utils "1.10.4" web3-eth-abi@1.10.0: version "1.10.0" @@ -8612,13 +8658,13 @@ web3-eth-abi@1.10.0: "@ethersproject/abi" "^5.6.3" web3-utils "1.10.0" -web3-eth-abi@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.3.tgz#7decfffa8fed26410f32cfefdc32d3e76f717ca2" - integrity sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ== +web3-eth-abi@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz#16c19d0bde0aaf8c1a56cb7743a83156d148d798" + integrity sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ== dependencies: "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.3" + web3-utils "1.10.4" web3-eth-accounts@1.10.0: version "1.10.0" @@ -8636,10 +8682,10 @@ web3-eth-accounts@1.10.0: web3-core-method "1.10.0" web3-utils "1.10.0" -web3-eth-accounts@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.3.tgz#9ecb816b81cd97333988bfcd0afaee5d13bbb198" - integrity sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ== +web3-eth-accounts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz#df30e85a7cd70e475f8cf52361befba408829e34" + integrity sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg== dependencies: "@ethereumjs/common" "2.6.5" "@ethereumjs/tx" "3.5.2" @@ -8647,10 +8693,10 @@ web3-eth-accounts@1.10.3: eth-lib "0.2.8" scrypt-js "^3.0.1" uuid "^9.0.0" - web3-core "1.10.3" - web3-core-helpers "1.10.3" - web3-core-method "1.10.3" - web3-utils "1.10.3" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-utils "1.10.4" web3-eth-contract@1.10.0: version "1.10.0" @@ -8666,19 +8712,19 @@ web3-eth-contract@1.10.0: web3-eth-abi "1.10.0" web3-utils "1.10.0" -web3-eth-contract@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.3.tgz#8880468e2ba7d8a4791cf714f67d5e1ec1591275" - integrity sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg== +web3-eth-contract@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz#22d39f04e11d9ff4e726e8025a56d78e843a2c3d" + integrity sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A== dependencies: "@types/bn.js" "^5.1.1" - web3-core "1.10.3" - web3-core-helpers "1.10.3" - web3-core-method "1.10.3" - web3-core-promievent "1.10.3" - web3-core-subscriptions "1.10.3" - web3-eth-abi "1.10.3" - web3-utils "1.10.3" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-promievent "1.10.4" + web3-core-subscriptions "1.10.4" + web3-eth-abi "1.10.4" + web3-utils "1.10.4" web3-eth-ens@1.10.0: version "1.10.0" @@ -8694,19 +8740,19 @@ web3-eth-ens@1.10.0: web3-eth-contract "1.10.0" web3-utils "1.10.0" -web3-eth-ens@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.3.tgz#ae5b49bcb9823027e0b28aa6b1de58d726cbaafa" - integrity sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ== +web3-eth-ens@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz#3d991adac52bc8e598f1f1b8528337fa6291004c" + integrity sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.10.3" - web3-core-helpers "1.10.3" - web3-core-promievent "1.10.3" - web3-eth-abi "1.10.3" - web3-eth-contract "1.10.3" - web3-utils "1.10.3" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-promievent "1.10.4" + web3-eth-abi "1.10.4" + web3-eth-contract "1.10.4" + web3-utils "1.10.4" web3-eth-iban@1.10.0: version "1.10.0" @@ -8716,13 +8762,13 @@ web3-eth-iban@1.10.0: bn.js "^5.2.1" web3-utils "1.10.0" -web3-eth-iban@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.3.tgz#91d458e5400195edc883a0d4383bf1cecd17240d" - integrity sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA== +web3-eth-iban@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz#bc61b4a1930d19b1df8762c606d669902558e54d" + integrity sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw== dependencies: bn.js "^5.2.1" - web3-utils "1.10.3" + web3-utils "1.10.4" web3-eth-personal@1.10.0: version "1.10.0" @@ -8736,17 +8782,17 @@ web3-eth-personal@1.10.0: web3-net "1.10.0" web3-utils "1.10.0" -web3-eth-personal@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.3.tgz#4e72008aa211327ccc3bfa7671c510e623368457" - integrity sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw== +web3-eth-personal@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz#e2ee920f47e84848288e03442659cdbb2c4deea2" + integrity sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w== dependencies: "@types/node" "^12.12.6" - web3-core "1.10.3" - web3-core-helpers "1.10.3" - web3-core-method "1.10.3" - web3-net "1.10.3" - web3-utils "1.10.3" + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-net "1.10.4" + web3-utils "1.10.4" web3-eth@1.10.0: version "1.10.0" @@ -8766,23 +8812,23 @@ web3-eth@1.10.0: web3-net "1.10.0" web3-utils "1.10.0" -web3-eth@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.3.tgz#b8c6f37f1aac52422583a5a9c29130983a3fb3b1" - integrity sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA== - dependencies: - web3-core "1.10.3" - web3-core-helpers "1.10.3" - web3-core-method "1.10.3" - web3-core-subscriptions "1.10.3" - web3-eth-abi "1.10.3" - web3-eth-accounts "1.10.3" - web3-eth-contract "1.10.3" - web3-eth-ens "1.10.3" - web3-eth-iban "1.10.3" - web3-eth-personal "1.10.3" - web3-net "1.10.3" - web3-utils "1.10.3" +web3-eth@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.4.tgz#3a908c635cb5d935bd30473e452f3bd7f2ee66a5" + integrity sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA== + dependencies: + web3-core "1.10.4" + web3-core-helpers "1.10.4" + web3-core-method "1.10.4" + web3-core-subscriptions "1.10.4" + web3-eth-abi "1.10.4" + web3-eth-accounts "1.10.4" + web3-eth-contract "1.10.4" + web3-eth-ens "1.10.4" + web3-eth-iban "1.10.4" + web3-eth-personal "1.10.4" + web3-net "1.10.4" + web3-utils "1.10.4" web3-net@1.10.0: version "1.10.0" @@ -8793,14 +8839,14 @@ web3-net@1.10.0: web3-core-method "1.10.0" web3-utils "1.10.0" -web3-net@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.3.tgz#9486c2fe51452cb958e11915db6f90bd6caa5482" - integrity sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg== +web3-net@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.4.tgz#20e12c60e4477d4298979d8d5d66b9abf8e66a09" + integrity sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow== dependencies: - web3-core "1.10.3" - web3-core-method "1.10.3" - web3-utils "1.10.3" + web3-core "1.10.4" + web3-core-method "1.10.4" + web3-utils "1.10.4" web3-providers-http@1.10.0: version "1.10.0" @@ -8812,15 +8858,15 @@ web3-providers-http@1.10.0: es6-promise "^4.2.8" web3-core-helpers "1.10.0" -web3-providers-http@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.3.tgz#d8166ee89db82d37281ea9e15c5882a2d7928755" - integrity sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw== +web3-providers-http@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.4.tgz#ca7aa58aeaf8123500c24ffe0595896319f830e8" + integrity sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ== dependencies: abortcontroller-polyfill "^1.7.5" cross-fetch "^4.0.0" es6-promise "^4.2.8" - web3-core-helpers "1.10.3" + web3-core-helpers "1.10.4" web3-providers-ipc@1.10.0: version "1.10.0" @@ -8830,13 +8876,13 @@ web3-providers-ipc@1.10.0: oboe "2.1.5" web3-core-helpers "1.10.0" -web3-providers-ipc@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.3.tgz#a7e015957fc037d8a87bd4b6ae3561c1b1ad1f46" - integrity sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA== +web3-providers-ipc@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz#2e03437909e4e7771d646ff05518efae44b783c3" + integrity sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw== dependencies: oboe "2.1.5" - web3-core-helpers "1.10.3" + web3-core-helpers "1.10.4" web3-providers-ws@1.10.0: version "1.10.0" @@ -8847,13 +8893,13 @@ web3-providers-ws@1.10.0: web3-core-helpers "1.10.0" websocket "^1.0.32" -web3-providers-ws@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.3.tgz#03c84958f9da251349cd26fd7a4ae567e3af6caa" - integrity sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q== +web3-providers-ws@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz#55d0c3ba36c6a79d105f02e20a707eb3978e7f82" + integrity sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.10.3" + web3-core-helpers "1.10.4" websocket "^1.0.32" web3-shh@1.10.0: @@ -8866,15 +8912,15 @@ web3-shh@1.10.0: web3-core-subscriptions "1.10.0" web3-net "1.10.0" -web3-shh@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.3.tgz#ee44f760598a65a290d611c443838aac854ee858" - integrity sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng== +web3-shh@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.4.tgz#9852d6f3d05678e31e49235a60fea10ca7a9e21d" + integrity sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw== dependencies: - web3-core "1.10.3" - web3-core-method "1.10.3" - web3-core-subscriptions "1.10.3" - web3-net "1.10.3" + web3-core "1.10.4" + web3-core-method "1.10.4" + web3-core-subscriptions "1.10.4" + web3-net "1.10.4" web3-utils@1.10.0: version "1.10.0" @@ -8889,10 +8935,10 @@ web3-utils@1.10.0: randombytes "^2.1.0" utf8 "3.0.0" -web3-utils@1.10.3, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.3.tgz#f1db99c82549c7d9f8348f04ffe4e0188b449714" - integrity sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ== +web3-utils@1.10.4, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== dependencies: "@ethereumjs/util" "^8.1.0" bn.js "^5.2.1" @@ -8917,17 +8963,17 @@ web3@1.10.0: web3-utils "1.10.0" web3@^1.2.5: - version "1.10.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.3.tgz#5e80ac532dc432b09fde668d570b0ad4e6710897" - integrity sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw== - dependencies: - web3-bzz "1.10.3" - web3-core "1.10.3" - web3-eth "1.10.3" - web3-eth-personal "1.10.3" - web3-net "1.10.3" - web3-shh "1.10.3" - web3-utils "1.10.3" + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.4.tgz#5d5e59b976eaf758b060fe1a296da5fe87bdc79c" + integrity sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA== + dependencies: + web3-bzz "1.10.4" + web3-core "1.10.4" + web3-eth "1.10.4" + web3-eth-personal "1.10.4" + web3-net "1.10.4" + web3-shh "1.10.4" + web3-utils "1.10.4" webidl-conversions@^3.0.0: version "3.0.1" @@ -8975,7 +9021,7 @@ which-module@^1.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.2: +which-typed-array@^1.1.14, which-typed-array@^1.1.2: version "1.1.14" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== From 396ed44484d83bcd82894fc6f601010e9e0eca1e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 14:43:00 +0100 Subject: [PATCH 129/149] chore: README.md --- README.md | 323 ++++-------------------------------------------------- 1 file changed, 23 insertions(+), 300 deletions(-) diff --git a/README.md b/README.md index e55c592f7..6a899a365 100644 --- a/README.md +++ b/README.md @@ -1,322 +1,45 @@ # witnet-solidity-bridge -`witnet/witnet-solidity-bridge` is an open source implementation of an API that enables Solidity smart contract developers to harness the full power of the [**Witnet Decentralized Oracle Network**](https://docs.witnet.io/intro/about/). +Open repository containing the source code and artifacts of the smart contracts composing the **Witnet Solidity Bridge** framework, enabling smart contracts from a long selection of EVM-compatible chains to interact with the [Witnet Oracle Blockchain](https://witnet.io) for retrieving and aggregating offchain public data, and randomness. -This repository provides several deployable contracts: +## Install the package -- `WitnetLib`, helper library useful for parsing Witnet-solved results to previously posted Witnet Data Requests. -- `WitnetProxy`, a delegate-proxy contract that routes Witnet Data Requests to a currently active `WitnetRequestBoard` implementation. -- Multiple implementations of the `WitnetRequestBoard` interface (WRB), which declares all required functionality to relay encapsulated [Witnet Data Requests](https://docs.witnet.io/intro/about/architecture#capabilities-of-data-requests/) from an EVM compatible chain to the Witnet mainnet, as well as to relay Witnet-solved results back to Ethereum. +`$ pnpm install` -The repository also provides: +## Deploy the whole WSB framework on a new chain -- `UsingWitnet`, an inheritable abstract contract that injects methods for conveniently interacting with the WRB. -- `WitnetRequest`, used as a means to encapsulate unmodifiable Witnet Data Requests. -- `WitnetRequestPrecompiled`, useful as a base contract to implement your own modifiable Witnet Data Requests. +### Pre-assessment +Should any artifact require customized contract implementations: -## **WitnetProxy** +- Please add source files accordingly to `contracts/core/customs`. -`WitnetProxy` is an upgradable delegate-proxy contract that routes Witnet Data Requests coming from a `UsingWitnet`-inheriting contract to a currently active `WitnetRequestBoard` implementation. +- Set up new artifact names, and eventual new construction parameters, if required, to `settings/artifacts` and `settings/specs`, respectively. -To find the entry-point address of the latest deployed version of the `WitnetRequestBoard` contract in every supported chain, please visit the [Witnet Data Feeds Explorer](https://feeds.witnet.io/). +- Run regression tests: `$ pnpm run test` -## **IWitnetRequest** -Used as a means to encapsulate Witnet Data Requests, that can eventually be posted to a `WitnetRequestBoard` implementation. The `bytecode()` of a `IWitnetRequest` must be constructed from the CBOR-encoded serialization of a [Witnet Data Request](https://docs.witnet.io/intro/about/architecture#capabilities-of-data-requests/). The `IWitnetRequest` interface defines two methods: +### Prepare the environment -- **`bytecode()`**: - - _Description_: - - Returns Witnet Data Request as a CBOR-encoded `bytes`. +- Add a new network configuration to `settings/networks`. The network name should follow the pattern `:`. -- **`hash()`**: - - _Description_: - - Returns SHA256 hash of Witnet Data Request as CBOR-encoded bytes. +- Make sure you run an ETH/RPC provider running at the specified `host` and `port`, capable of intercepting `eth_sendTransaction` calls (e.g. [web3-ethrpc-gateway](https://github.io/witnet/web3-jsonrpc-gateway)). -## **WitnetRequestBoard** +### Run the script -From the point of view of a `UsingWitnet` contract, any given `WitnetRequestBoard` will always support the following interfaces: +`$ pnpm run migrate :` -- **`IWitnetRequestBoardEvents`** -- **`IWitnetRequestBoardRequestor`** -- **`IWitnetRequestBoardView`** +## Upgrade WSB components on an existing chain -### IWitnetRequestBoardEvents: +When modifying the existing source code, or the contents of `settings/artifacts` or `settings/specs`, you may need to upgrade some of the artifacts on certain networks. Just add the `--artifacts` parameter and a comma-separated list of the artifacts you need to upgrade. For instance: -- Event **`PostedRequest(uint256 queryId, address from)`**: - - _Description_: - - Emitted when a Witnet Data Request is posted to the WRB. - - _Arguments_: - - `queryId`: the query id assigned to this new posting. - - `from`: the address from which the Witnet Data Request was posted. +`$ pnpm run migrate : WitnetErrorsLib,WitnetPriceFeeds` -- Event **`PostedResult(uint256 queryId, address from)`**: - - _Description_: - - Emitted when a Witnet-solved result is reported to the WRB. - - _Arguments_: - - `queryId`: the id of the query the result refers to. - - `from`: the address from which the result was reported. +When specifying deployable library artifacts, the depending contracts will be attempted to be upgraded as well. -- Event **`DeletedQuery(uint256 queryId, address from)`**: - - _Description_: - - Emitted when all data related to given query is deleted from the WRB. - - _Arguments_: - - `queryId`: the id of the query that has been deleted. - - `from`: the address from which the result was reported. +With respect to deployable contracts, you shall be asked to confirm manually before actually performing a contract upgrade. You can automate all potentially involved upgrades by adding the parameter `--upgrade-all`. -### IWitnetRequestBoardRequestor: - -- **`postRequest(IWitnetRequest _request)`**: - - _Description_: - - Posts a Witnet Data Request into the WRB in the expectation that it will be eventually relayed and resolved - by the Witnet decentralized oracle network, with `msg.value` as reward. - - _Inputs_: - - `_request`: the actual `IWitnetRequest` contract address which provided the Witnet Data Request bytecode. - - _Returns_: - - *_id*: the unique identifier of the data request. - -- **`upgradeReward(uint256 _id)`**: - - _Description_: increments the reward of a Witnet data request by - adding more value to it. The new data request reward will be increased by `msg.value`. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - -- **`deleteQuery(uint256 _id)`**: - - _Description_: - - Retrieves copy of all Witnet-provided data related to a previously posted request, removing the whole query from the WRB storage. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - - _Returns_: - - The Witnet-solved result of the given data request, as CBOR-encoded `bytes`. - -### IWitnetRequestBoardView: - -- **`estimateReward(uint256 _gasPrice)`**: - - _Description_: - - Estimates the minimal amount of reward needed to post a Witnet data request into the WRB, for a given gas price. - - _Inputs_: - - `_gasPrice`: the gas price for which we need to calculate the rewards. - -- **`getNextQueryId()`**: - - _Description_: - - Returns next query id to be generated by the Witnet Request Board. - -- **`getQueryData(uint256 _queryId)`**: - - _Description_: - - Gets the whole `Witnet.Query` record related to a previously posted Witnet Data Request. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`getQueryStatus(uint256 _queryId)`**: - - _Description_: - - Gets current status of the given query. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readRequest(uint256 _queryId)`**: - - _Description_: - - Retrieves the whole `Witnet.Request` record referred to a previously posted Witnet Data Request. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readRequestBytecode(uint256 _queryId)`**: - - _Description_: - - Retrieves the serialized bytecode of a previously posted Witnet Data Request. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - - _Returns_: - - The Witnet Data Request bytecode, serialized as `bytes`. - -- **`readRequestGasPrice(uint256 _queryId)`**: - - _Description_: - - Retrieves the gas price that any assigned reporter will have to pay when reporting result to the referred query. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readRequestReward(uint256 _queryId)`**: - - _Description_: - - Retrieves the reward currently set for the referred query. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readResponse(uint256 _queryId)`**: - - _Description_: - - Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. Fails it the query has not been solved yet. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readResponseTimestamp(uint256 _queryId)`**: - - _Description_: - - Retrieves the timestamp in which the result to the referred query was solved by the Witnet DON. - - _Inputs_: - - `_queryId`: the unique identifier of a previously posted Witnet data request. - -- **`readResponseDrTxHash(uint256 _queryId)`**: - - _Description_: - - Retrieves the hash of the Witnet transaction hash that actually solved the referred query. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - -- **`readResponseReporter(uint256 _queryId)`**: - - _Description_: - - Retrieves the address from which the result to the referred query was actually reported. - - _Inputs_: - - `_queryId`: the unique identifier of a previously posted Witnet data request. - -- **`readResponseResult(uint256 _queryId)`**: - - _Description_: - - Retrieves the Witnet-provided CBOR-bytes result to the referred query. Fails it the query has not been solved yet. - - _Inputs_: - - `_queryId`: the unique identifier of the query. - - _Returns_: - - The Witnet-provided result to the given query, as CBOR-encoded `bytes`. - -## **UsingWitnet base contract** - -The `UsingWitnet` contract injects the following _internal methods_ into the contracts inheriting from it: - -- **`_witnetEstimateReward()`**: - - _Description_: - - Estimates the reward amount, considering current transaction's gas price. - - _Returns_: - - The reward to be included when either posting a new request, or upgrading the reward of a previously posted one. - -- **`_witnetEstimateReward(uint256 _gasPrice)`**: - - _Description_: - - Estimates the reward amount, considering the given gas price is used when either posting or upgrading a request. - - _Inputs_: - - `_gasPrice`: the gas price for which we want to retrieve the estimation. - - _Returns_: - - The reward to be included when either posting a new request, or upgrading the reward of a previously posted one. - -- **`_witnetPostRequest(IWitnetRequest _request)`**: - - _Description_: - - Method to be called for posting Witnet data request into the WRB, with provided `msg.value` as reward. - - _Inputs_: - - `_request`: the Witnet request contract address that provides the Witnet Data Request encoded bytecode. - - _Returns_: - - The unique identifier of the Witnet data request just posted to the WRB. - -- **`_witnetUpgradeReward()`**: - - _Description_: - - Increments the reward of a previously posted Witnet data request by adding more value to it. The new request reward will be increased by `msg.value`. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - -- **`_witnetCheckResultAvailability()`**: - - _Description_: - - Checks if a Witnet data request has already been solved by Witnet network. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - - _Returns_: - - A boolean telling whether the Witnet data request has been already solved, or not. - -- **`_witnetReadResult(uint256 _id)`**: - - _Description_: - - Retrieves the Witnet-solved result of a previously posted Witnet data request. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - - _Returns_: - - The Witnet-solved result of the given data request, as CBOR-encoded `bytes`. - -- **`_witnetDeleteQuery(uint256 _id)`**: - - _Description_: - - Retrieves the Witnet-solved result (if already available) of a previously posted Witnet request, and removes it from the WRB storage. Works only if this `UsingWitnet` contract is the one that actually posted the given data request. - - _Inputs_: - - `_id`: the unique identifier of a previously posted Witnet data request. - - _Returns_: - - The Witnet-solved result of the given data request, as CBOR-encoded `bytes`. - -Besides, your contract will have access to the whole Witnet Request Board functionality by means of the immutable **`witnet`** address field. - -## **Usage: harness the power of the Witnet Decentralized Oracle Network** - -In order to integrate your own smart contracts with the **Witnet** fully-decentralized blockchain, you just need to inherit from the `UsingWitnet` abstract contract: - -```solidity -pragma solidity >=0.7.0 <0.9.0; - -import "./UsingWitnet.sol"; - -contract MyContract is UsingWitnet { - IWitnetRequest myRequest; - - constructor() UsingWitnet(/* here comes the entrypoint address provided by the Witnet Foundation */) { - // TODO - } - - function myOwnDrPost() public payable returns (uint256 _drTrackId) { - _drTrackId = witnetPostRequest{value: msg.value}(myRequest); - } -} -``` - -Please, have a look at the [`witnet/truffle-box`](https://github.com/witnet/truffle-box) repository to learn how to compose your own `IWitnetRequest` contracts. - -## **Gas cost benchmark** - -```bash -·------------------------------------------------------------------|---------------------------|-------------|----------------------------· -| Solc version: 0.8.17+commit.8df45f5f · Optimizer enabled: true · Runs: 200 · Block limit: 6718946 gas │ -···································································|···························|·············|····························· -| Methods │ -·······································|···························|·············|·············|·············|··············|·············· -| Contract · Method · Min · Max · Avg · # calls · usd (avg) │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetPriceRouter · transferOwnership · - · - · 31550 · 1 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetProxy · upgradeTo · - · - · 129653 · 1 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRandomness · clone · - · - · 247765 · 7 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRandomness · upgradeRandomizeFee · - · - · 28446 · 1 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableBoba · deleteQuery · - · - · 59706 · 3 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableBoba · postRequest · 196513 · 213613 · 205840 · 11 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableBoba · reportResult · 135354 · 135366 · 135361 · 5 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · deleteQuery · - · - · 51200 · 6 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · destruct · - · - · 28541 · 2 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · initialize · - · - · 83767 · 36 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · postRequest · 163063 · 180163 · 175626 · 49 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · reportResult · - · - · 130017 · 17 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · reportResultBatch · 53532 · 328625 · 188967 · 8 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · upgradeReward · - · - · 38828 · 6 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · clone · - · - · 245099 · 9 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · renounceOwnership · - · - · 23554 · 2 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · setWitnessingCollateral · 69708 · 72377 · 71043 · 10 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · setWitnessingFees · 64370 · 73741 · 69481 · 11 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · setWitnessingQuorum · 64228 · 67999 · 66114 · 12 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · transferOwnership · - · - · 28881 · 3 · - │ -·······································|···························|·············|·············|·············|··············|·············· -| Deployments · · % of limit · │ -···································································|·············|·············|·············|··············|·············· -| WitnetLib · - · - · 3541780 · 52.7 % · - │ -···································································|·············|·············|·············|··············|·············· -| WitnetProxy · - · - · 571986 · 8.5 % · - │ -···································································|·············|·············|·············|··············|·············· -| WitnetRequestBoardTrustableDefault · - · - · 4265164 · 63.5 % · - │ -···································································|·············|·············|·············|··············|·············· -| WitnetRequestRandomness · - · - · 1643020 · 24.5 % · - │ -·------------------------------------------------------------------|-------------|-------------|-------------|--------------|-------------·``` - - -## **License** - -`witnet-solidity-bridge` is published under the [MIT license][license]. - -[license]: https://github.com/witnet/witnet-solidity-bridge/blob/master/LICENSE +Reasons for an upgrade to fail: +- You have no credentials. +- You're attempting to upgrade a contract with the same implementation logic as it currently has. +- The parameters passed to the upgrade call, as specified in `settings/specs` are not accepted for some reason (see actual revert message for further info). From 4470c9ac471f3e1fe43fb7a28e248bca9c1065c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 18:51:53 +0100 Subject: [PATCH 130/149] fix(pfs): set default sla upon first init --- contracts/core/defaults/WitnetPriceFeedsDefault.sol | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index 523e28165..57ce20460 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -42,10 +42,6 @@ contract WitnetPriceFeedsDefault ) { witnet = _wrb; - __settleDefaultRadonSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 7, - witnessingWitTotalReward: (2 * (7 + 3)) * 10 ** 8 - })); } // solhint-disable-next-line payable-fallback @@ -89,6 +85,12 @@ contract WitnetPriceFeedsDefault // set owner as specified by first argument in _initData _owner = abi.decode(_initData, (address)); _transferOwnership(_owner); + // settle default Radon SLA upon first initialization + __settleDefaultRadonSLA(WitnetV2.RadonSLA({ + witnessingCommitteeSize: 7, + witnessingWitTotalReward: (2 * (7 + 3)) * 10 ** 8 + })); + })); } else { // only the owner can initialize: require( From 43f000878faff1997aa6cecc3f7da18fb37b4d77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Wed, 14 Feb 2024 19:16:27 +0100 Subject: [PATCH 131/149] fix(patterns): upgradables codehash cannot be snapshot at constructor --- .../core/defaults/WitnetPriceFeedsDefault.sol | 1 - contracts/patterns/Upgradeable.sol | 12 +++++------- migrations/scripts/3_core.js | 4 +++- migrations/scripts/4_proxies.js | 16 ++++++++++------ settings/specs.js | 2 +- src/index.js | 2 +- 6 files changed, 20 insertions(+), 17 deletions(-) diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index 57ce20460..5bc9c8161 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -90,7 +90,6 @@ contract WitnetPriceFeedsDefault witnessingCommitteeSize: 7, witnessingWitTotalReward: (2 * (7 + 3)) * 10 ** 8 })); - })); } else { // only the owner can initialize: require( diff --git a/contracts/patterns/Upgradeable.sol b/contracts/patterns/Upgradeable.sol index 74f913462..bd72a3a3e 100644 --- a/contracts/patterns/Upgradeable.sol +++ b/contracts/patterns/Upgradeable.sol @@ -35,12 +35,7 @@ abstract contract Upgradeable is Initializable, Proxiable { constructor (bool _isUpgradable) { address _base = address(this); - bytes32 _codehash; - assembly { - _codehash := extcodehash(_base) - } _BASE = _base; - _CODEHASH = _codehash; _UPGRADABLE = _isUpgradable; } @@ -50,8 +45,11 @@ abstract contract Upgradeable is Initializable, Proxiable { } /// @dev Retrieves the immutable codehash of this contract, even if invoked as delegatecall. - function codehash() public view returns (bytes32) { - return _CODEHASH; + function codehash() public view returns (bytes32 _codehash) { + address _base = _BASE; + assembly { + _codehash := extcodehash(_base) + } } /// @dev Determines whether the logic of this contract is potentially upgradable. diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 732373504..5a4288433 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -133,7 +133,9 @@ async function deploy (specs) { // save addresses file if required if (!utils.isDryRun(network)) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = {}; args[network] = {}; args[network][key] = constructorArgs.slice(2) + const args = await utils.readJsonFromFile("./migrations/constructorArgs.json"); + if (!args[network]) args[network] = {} + args[network][key] = constructorArgs.slice(2) await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) } } else { diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 1d6a93bca..411205ec5 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -115,8 +115,12 @@ async function deploy (target) { console.info(" ", "> initialize types: ", mutables.types) console.info(" ", "> initialize params:", mutables.values) } - const tx = await upgradeProxyTo(from, proxy, newImpl.address, initdata) - utils.traceTx(tx) + 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}'`) @@ -126,9 +130,9 @@ async function deploy (target) { 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()) + console.info(" ", "> proxy operator: ", await impl.owner.call({ from })) console.info(" ", "> impl. address: ", await getProxyImplementation(from, proxy.address)) - console.info(" ", "> impl. version: ", await impl.version.call()) + console.info(" ", "> impl. version: ", await impl.version.call({ from })) console.info() return proxy } @@ -138,7 +142,7 @@ async function getProxyImplementation (from, proxyAddr) { return await proxy.implementation.call({ from }) } -async function upgradeProxyTo (from, proxy, implAddr, initData) { - const proxyContract = await WitnetProxy.at(proxy.address) +async function upgradeProxyTo (from, proxyAddr, implAddr, initData) { + const proxyContract = await WitnetProxy.at(proxyAddr) return await proxyContract.upgradeTo(implAddr, initData, { from }) } diff --git a/settings/specs.js b/settings/specs.js index ae0692e0c..cc2a04951 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -16,7 +16,7 @@ module.exports = { WitnetPriceFeeds: { from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", libs: ["WitnetPriceFeedsLib"], - vanity: 7089974217, // 0x000080d4d4896c2c5959883430495AD58436E000 + vanity: 6099024547, // 0x11111c2cC3f1af92bA0f1f554f2651cEfb858111 }, WitnetRequestBytecodes: { libs: ["WitnetEncodingLib"], diff --git a/src/index.js b/src/index.js index c666e4511..40f67d5fd 100644 --- a/src/index.js +++ b/src/index.js @@ -32,7 +32,7 @@ module.exports = { artifacts: { WitnetOracle: require("../artifacts/contracts/WitnetOracle.sol/WitnetOracle.json"), WitnetPriceFeeds: require("../artifacts/contracts/WitnetPriceFeeds.sol/WitnetPriceFeeds.json"), - WitnetPriceFeedRoute: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), + WitnetPriceRouteSolver: require("../artifacts/contracts/interfaces/IWitnetPriceSolver.sol/IWitnetPriceSolver.json"), WitnetRequest: require("../artifacts/contracts/WitnetRequest.sol/WitnetRequest.json"), WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), From ae0f1cb42c8f5417929efa5ecc519f834dc45d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 15 Feb 2024 17:44:21 +0100 Subject: [PATCH 132/149] feat: override class() on all logic contracts --- .../core/customs/WitnetRequestBoardTrustableObscuro.sol | 5 +++++ .../core/customs/WitnetRequestBoardTrustableOvm2.sol | 4 ++++ .../core/customs/WitnetRequestBoardTrustableReef.sol | 8 ++++++-- .../core/customs/WitnetRequestBytecodesNoSha256.sol | 8 +++++++- contracts/core/customs/WitnetRequestFactoryCfxCore.sol | 9 ++++++++- contracts/core/defaults/WitnetPriceFeedsDefault.sol | 4 ++++ .../core/defaults/WitnetRequestBoardTrustableDefault.sol | 4 ++++ .../core/defaults/WitnetRequestBytecodesDefault.sol | 4 ++++ contracts/core/defaults/WitnetRequestFactoryDefault.sol | 4 ++++ 9 files changed, 46 insertions(+), 4 deletions(-) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol index d16005f8e..09026970c 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol @@ -16,6 +16,10 @@ contract WitnetRequestBoardTrustableObscuro is WitnetRequestBoardTrustableDefault { + function class() virtual override external view returns (string memory) { + return type(WitnetRequestBoardTrustableObscuro).name; + } + constructor( WitnetRequestFactory _factory, WitnetRequestBytecodes _registry, @@ -38,6 +42,7 @@ contract WitnetRequestBoardTrustableObscuro ) {} + // ================================================================================================================ // --- Overrides implementation of 'IWitnetOracleView' ------------------------------------------------------ diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 00d076741..311bc4933 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -23,6 +23,10 @@ contract WitnetRequestBoardTrustableOvm2 { OVM_GasPriceOracle immutable public gasPriceOracleL1; + function class() virtual override external view returns (string memory) { + return type(WitnetRequestBoardTrustableOvm2).name; + } + constructor( WitnetRequestFactory _factory, WitnetRequestBytecodes _registry, diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index 5f9b0b0d5..b45b517d0 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -15,8 +15,12 @@ import "../defaults/WitnetRequestBoardTrustableDefault.sol"; /// @author The Witnet Foundation contract WitnetOracleTrustableReef is - WitnetRequestBoardTrustableDefault -{ + WitnetRequestBoardTrustableDefault +{ + function class() virtual override external view returns (string memory) { + return type(WitnetOracleTrustableReef).name; + } + constructor( WitnetRequestFactory _factory, WitnetRequestBytecodes _registry, diff --git a/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol b/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol index 537ad7ad5..dc0c02f0c 100644 --- a/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol +++ b/contracts/core/customs/WitnetRequestBytecodesNoSha256.sol @@ -5,7 +5,13 @@ pragma experimental ABIEncoderV2; import "../defaults/WitnetRequestBytecodesDefault.sol"; -contract WitnetRequestBytecodesNoSha256 is WitnetRequestBytecodesDefault { +contract WitnetRequestBytecodesNoSha256 + is + WitnetRequestBytecodesDefault +{ + function class() virtual override external view returns (string memory) { + return type(WitnetRequestBytecodesNoSha256).name; + } constructor(bool _upgradable, bytes32 _versionTag) WitnetRequestBytecodesDefault(_upgradable, _versionTag) diff --git a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol index a50759e6f..2a820cbd5 100644 --- a/contracts/core/customs/WitnetRequestFactoryCfxCore.sol +++ b/contracts/core/customs/WitnetRequestFactoryCfxCore.sol @@ -5,7 +5,14 @@ pragma experimental ABIEncoderV2; import "../defaults/WitnetRequestFactoryDefault.sol"; -contract WitnetRequestFactoryCfxCore is WitnetRequestFactoryDefault { +contract WitnetRequestFactoryCfxCore + is + WitnetRequestFactoryDefault +{ + function class() virtual override external view returns (string memory) { + return type(WitnetRequestFactoryCfxCore).name; + } + constructor( WitnetOracle _witnet, WitnetRequestBytecodes _registry, diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index 5bc9c8161..8f5c2f503 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -26,6 +26,10 @@ contract WitnetPriceFeedsDefault using WitnetV2 for WitnetV2.Response; using WitnetV2 for WitnetV2.RadonSLA; + function class() virtual override external view returns (string memory) { + return type(WitnetPriceFeedsDefault).name; + } + bytes4 immutable public override specs = type(IWitnetPriceFeeds).interfaceId; WitnetOracle immutable public override witnet; diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index 5ab96bdb7..ce9024c93 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -16,6 +16,10 @@ contract WitnetRequestBoardTrustableDefault is WitnetRequestBoardTrustableBase { + function class() virtual override external view returns (string memory) { + return type(WitnetRequestBoardTrustableDefault).name; + } + uint256 internal immutable __reportResultGasBase; uint256 internal immutable __reportResultWithCallbackGasBase; uint256 internal immutable __reportResultWithCallbackRevertGasBase; diff --git a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol index d6d2bc89e..4b1be23b4 100644 --- a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol @@ -28,6 +28,10 @@ contract WitnetRequestBytecodesDefault using WitnetEncodingLib for Witnet.RadonSLA; using WitnetEncodingLib for Witnet.RadonDataTypes; + function class() virtual override external view returns (string memory) { + return type(WitnetRequestBytecodesDefault).name; + } + bytes4 public immutable override specs = type(IWitnetRequestBytecodes).interfaceId; constructor(bool _upgradable, bytes32 _versionTag) diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index d81a3cc9a..6c9064dd1 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -17,6 +17,10 @@ contract WitnetRequestFactoryDefault WitnetRequestFactoryData, WitnetUpgradableBase { + function class() virtual override external view returns (string memory) { + return type(WitnetRequestFactoryDefault).name; + } + /// @notice Reference to Witnet Data Requests Bytecode Registry. WitnetRequestBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; From 0637a5d58a294881d4215479010d4ad5e6efa70e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 15 Feb 2024 17:45:18 +0100 Subject: [PATCH 133/149] fix: network config on hardhat --- hardhat.config.js | 16 +++++++++++----- settings/networks.js | 41 ++++++++++++++++++++--------------------- 2 files changed, 31 insertions(+), 26 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index c4280fcba..24f45c38f 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -5,13 +5,16 @@ const utils = require("./src/utils") const [, target] = utils.getRealmNetworkFromArgs() module.exports = { + paths: { + sources: "./contracts", + }, networks: Object.fromEntries( Object.entries(settings.getNetworks()) .map(([network, config]) => { return [network, { chainId: config.network_id, - gas: config?.gas || "auto", - gasPrice: config?.gasPrice || "auto", + gas: config?.gas, + gasPrice: config?.gasPrice, url: `http://${config?.host || "localhost"}:${config?.port || 8545}`, }] }) @@ -25,14 +28,17 @@ module.exports = { etherscan: { apiKey: Object.fromEntries( Object.entries(settings.getNetworks()) - .filter(([, config]) => config?.verify) + .filter(([, config]) => config?.verify !== undefined) .map(([network, config]) => { const [ecosystem] = utils.getRealmNetworkFromString(network) - return [network, config?.verify?.apiKey ?? `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY`] + const envar = `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY` + return [network, + config?.verify?.apiKey || process.env[envar] || process.env.ETHERSCAN_API_KEY || "MY_API_KEY" + ] }), ), customChains: Object.entries(settings.getNetworks()) - .filter(([, config]) => config?.verify) + .filter(([, config]) => config?.verify !== undefined) .map(([network, config]) => { return { network, diff --git a/settings/networks.js b/settings/networks.js index 43c6076ce..7ae1bc594 100644 --- a/settings/networks.js +++ b/settings/networks.js @@ -3,26 +3,6 @@ module.exports = { host: "localhost", skipDryRun: true, }, - "ethereum:goerli": { - network_id: 5, - port: 8545, - verify: { - apiUrl: "https://api-goerli.etherscan.io/", - browserURL: "https://goerli.etherscan.io/", - }, - }, - "ethereum:mainnet": { - network_id: 1, - port: 9545, - }, - "ethereum:sepolia": { - network_id: 11155111, - port: 8506, - verify: { - apiUrl: "https://api-sepolia.etherscan.io/api", - browserURL: "https://sepolia.etherscan.io/", - }, - }, "arbitrum:goerli": { network_id: 421613, port: 8517, @@ -136,6 +116,26 @@ module.exports = { port: 8522, network_id: 1819, }, + "ethereum:goerli": { + network_id: 5, + port: 8545, + verify: { + apiUrl: "https://api-goerli.etherscan.io/", + browserURL: "https://goerli.etherscan.io/", + }, + }, + "ethereum:mainnet": { + network_id: 1, + port: 9545, + }, + "ethereum:sepolia": { + network_id: 11155111, + port: 8506, + verify: { + apiUrl: "https://api-sepolia.etherscan.io/api", + browserURL: "https://sepolia.etherscan.io/", + }, + }, "dogechain:testnet": { port: 8519, network_id: 568, @@ -365,7 +365,6 @@ module.exports = { port: 8504, network_id: 443, gas: 6000000, - gasPrice: 10, }, "ultron:testnet": { port: 8516, From 501f0e6ba1c5b8841feecdce0a685e62afee9523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Thu, 15 Feb 2024 17:48:01 +0100 Subject: [PATCH 134/149] chore: redeploy on ethereum:sepolia ten:testnet --- migrations/addresses.json | 27 ++++++++++++++------------- migrations/constructorArgs.json | 11 ++++++++++- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/migrations/addresses.json b/migrations/addresses.json index 5d0f51d5e..2f815dcb3 100644 --- a/migrations/addresses.json +++ b/migrations/addresses.json @@ -2,25 +2,26 @@ "default": { "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", "WitnetOracle": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", - "WitnetPriceFeeds": "0x159Dd4C95C52fAc17b23de911dD518845c78D022", "WitnetRequestBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", - "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000" + "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000", + "WitnetPriceFeeds": "0x11111c2cC3f1af92bA0f1f554f2651cEfb858111" }, "ethereum:sepolia": { - "WitnetErrorsLib": "0x38eB91d52dADe5B4Ded868c0eED9DdA4630AE67a", + "WitnetErrorsLib": "0x6A7Db21C42053E5F15aF564fAdfC8E04e5eA5152", "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", - "WitnetPriceFeedsLib": "0x65E4e65E8A0706706Fe3E9Eee01E164d12A58012", - "WitnetRequestBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", - "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", - "WitnetRequestBoardTrustableDefault": "0x7FEf83f7078F6135C006E770251039e59F952D2E" + "WitnetPriceFeedsLib": "0xd7E19CFd2488B6FE666b1CaE6a93110b78c744B6", + "WitnetRequestBytecodesDefault": "0x93DaB12D00117C3d805fF1042dF31bdA25a06A3B", + "WitnetRequestFactoryDefault": "0x3F654127135E7548a171506Ecc1dfCad70356435", + "WitnetRequestBoardTrustableDefault": "0xbdb6D793CC16d4518ED404D08C133251C877a531", + "WitnetPriceFeedsDefault": "0x075e226222eB03F83Bc36ed9A3cAaeb6d4873660" }, "ten:testnet": { - "WitnetErrorsLib": "0x05F47A53598ff14899f7cdA2320E4D6059Aa2D91", + "WitnetErrorsLib": "0x6A7Db21C42053E5F15aF564fAdfC8E04e5eA5152", "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", - "WitnetPriceFeedsLib": "0x6d0d66743AC85A58cEbad01c3F41896617D084CE", - "WitnetRequestBytecodesDefault": "0x62e9D7eD2CEB27F252E46cA52574DF75293ac733", - "WitnetRequestFactoryDefault": "0xeD6b48575779e0e5b26463533084284c7235c0C4", - "WitnetRequestBoardTrustableObscuro": "0x4b9afCCb4f1A1827B080b38ae23D09AbA2243ec3", - "WitnetRequestBoardTrustableDefault": "0x1B059f8B478312c25e6fBEF5a147121059E53cB3" + "WitnetPriceFeedsLib": "0xd7E19CFd2488B6FE666b1CaE6a93110b78c744B6", + "WitnetPriceFeedsDefault": "0x2693977d2fE01542034BE415184d2022250E9B7f", + "WitnetRequestBytecodesDefault": "0xbD8560E02ACd634A0895f340D2EAC3996297630f", + "WitnetRequestFactoryDefault": "0xCcF97F809a4d1b8aC2bF87a2fdfafDFEf576406c", + "WitnetRequestBoardTrustableObscuro": "0x55d78D1fEd850790aDAfFB9BD54A42B9382D7739" } } \ No newline at end of file diff --git a/migrations/constructorArgs.json b/migrations/constructorArgs.json index 4a0321297..829039d20 100644 --- a/migrations/constructorArgs.json +++ b/migrations/constructorArgs.json @@ -1,5 +1,14 @@ { "ten:testnet": { - "WitnetPriceFeeds": "000000000000000000000000f121b71715e71dded592f1125a06d4ed06f0694d00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b1000" + "WitnetPriceFeedsDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000000000000000000000000000000000000001322e302e312d3434373063396100000000000000000000000000000000000000", + "WitnetRequestBytecodesDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000", + "WitnetRequestFactoryDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000", + "WitnetRequestBoardTrustableObscuro": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" + }, + "ethereum:sepolia": { + "WitnetPriceFeedsDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", + "WitnetRequestBytecodesDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", + "WitnetRequestFactoryDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", + "WitnetRequestBoardTrustableDefault": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" } } \ No newline at end of file From 21810018029467bd57cad76e29d73a51a62396df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 11:21:32 +0100 Subject: [PATCH 135/149] chore: small fixes --- README.md | 8 +- contracts/WitnetPriceFeeds.sol | 4 - .../defaults/WitnetRequestFactoryDefault.sol | 4 - contracts/data/WitnetRequestBoardData.sol | 2 +- .../ops/rng/sla/1_set-randomness-sla.js | 95 ------------------- test/examples/RandomnessBareMinimal.sol | 35 ------- truffle-config.js | 8 ++ 7 files changed, 16 insertions(+), 140 deletions(-) delete mode 100644 migrations/ops/rng/sla/1_set-randomness-sla.js delete mode 100644 test/examples/RandomnessBareMinimal.sol diff --git a/README.md b/README.md index 6a899a365..075d71bd7 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # witnet-solidity-bridge -Open repository containing the source code and artifacts of the smart contracts composing the **Witnet Solidity Bridge** framework, enabling smart contracts from a long selection of EVM-compatible chains to interact with the [Witnet Oracle Blockchain](https://witnet.io) for retrieving and aggregating offchain public data, and randomness. +Open repository containing the smart contracts composing the **Witnet Solidity Bridge** framework. This framework enables Solidity developers and smart contracts operating in a long range of EVM-compatible chains to interact with the [Witnet Oracle Blockchain](https://witnet.io) for retrieving and aggregating offchain public data, and randomness. ## Install the package @@ -43,3 +43,9 @@ Reasons for an upgrade to fail: - You have no credentials. - You're attempting to upgrade a contract with the same implementation logic as it currently has. - The parameters passed to the upgrade call, as specified in `settings/specs` are not accepted for some reason (see actual revert message for further info). + +## Exported assets + +- [Deployed addresses.]("./migrations/addresses.json") +- [Supported chains.]("./settings/networks/index.js") + diff --git a/contracts/WitnetPriceFeeds.sol b/contracts/WitnetPriceFeeds.sol index 575c23e6a..709f29589 100644 --- a/contracts/WitnetPriceFeeds.sol +++ b/contracts/WitnetPriceFeeds.sol @@ -15,10 +15,6 @@ abstract contract WitnetPriceFeeds IWitnetPriceFeeds, IWitnetPriceSolverDeployer { - function class() override external pure returns (string memory) { - return type(WitnetPriceFeeds).name; - } - constructor() WitnetFeeds(Witnet.RadonDataTypes.Integer, "Price-") {} diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index 6c9064dd1..d81a3cc9a 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -17,10 +17,6 @@ contract WitnetRequestFactoryDefault WitnetRequestFactoryData, WitnetUpgradableBase { - function class() virtual override external view returns (string memory) { - return type(WitnetRequestFactoryDefault).name; - } - /// @notice Reference to Witnet Data Requests Bytecode Registry. WitnetRequestBytecodes immutable public override(WitnetRequestFactory, WitnetRequestTemplate) registry; diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index ceb951868..e6850ee9c 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -37,7 +37,7 @@ abstract contract WitnetRequestBoardData { modifier onlyRequester(uint256 _queryId) { require( msg.sender == __seekQueryRequest(_queryId).unpackRequester(), - "WitnetOracleBase: not the requester" + "WitnetRequestBoardBase: not the requester" ); _; } diff --git a/migrations/ops/rng/sla/1_set-randomness-sla.js b/migrations/ops/rng/sla/1_set-randomness-sla.js deleted file mode 100644 index 50b753ff3..000000000 --- a/migrations/ops/rng/sla/1_set-randomness-sla.js +++ /dev/null @@ -1,95 +0,0 @@ -const addresses = require("../../../addresses") -const utils = require("../../../../scripts/utils") - -const WitnetRandomness = artifacts.require("WitnetRandomness") -const WitnetRequestRandomness = artifacts.require("WitnetRequestRandomness") - -module.exports = async function (_deployer, network) { - const [realm, chain] = utils.getRealmNetworkFromString(network.split("-")[0]) - - const randomizer = await WitnetRandomness.at(addresses[realm][chain].WitnetRandomness) - const request = await WitnetRequestRandomness.at(await randomizer.witnetRandomnessRequest.call()) - const owner = await request.owner.call() - const radonSLA = { ...(await request.witnessingParams.call()) } - - console.log("> WitnetRandomness address:", randomizer.address) - console.log("> WitnetRequestRandomness address:", request.address) - console.log("> WitnetRequestRadnomness owner:", owner) - console.log("> Current commit/reval fee:", radonSLA.witnessingUnitaryFee) - console.log("> Current number of witnesses:", radonSLA.numWitnesses) - console.log("> Current witnessing reward:", radonSLA.witnessingReward) - console.log("> Current witnessing collateral:", radonSLA.witnessingCollateral) - console.log("> Current witnessing consensus:", radonSLA.minWitnessingConsensus, "%") - - const tbs = [false, false, false, false, false] - process.argv.map((argv, index, args) => { - if (argv === "--reward") { - if (args[index + 1] !== radonSLA.witnessingReward) { - radonSLA.witnessingReward = args[index + 1] - tbs[3] = true - } - } else if (argv === "--collateral") { - if (args[index + 1] !== radonSLA.witnessingCollateral) { - radonSLA.witnessingCollateral = args[index + 1] - tbs[2] = true - } - } else if (argv === "--witnesses") { - if (args[index + 1] !== radonSLA.numWitnesses) { - radonSLA.numWitnesses = args[index + 1] - tbs[0] = true - } - } else if (argv === "--quorum") { - if (args[index + 1] !== radonSLA.minWitnessingConsensus) { - radonSLA.minWitnessingConsensus = args[index + 1] - tbs[1] = true - } - } else if (argv === "--unitary-fee") { - if (args[index + 1] !== radonSLA.witnessingUnitaryFee) { - radonSLA.witnessingUnitaryFee = args[index + 1] - tbs[4] = true - } - } - return argv - }) - if (tbs[2]) { - console.log(`\n=> Setting witnessing collateral to ${radonSLA.witnessingCollateral}...`) - try { - const tx = await request.setWitnessingCollateral( - radonSLA.witnessingCollateral, - { from: owner } - ) - console.log(" > transaction hash:", tx.receipt.transactionHash) - } catch (ex) { - console.log(" > Failed:", ex) - } - } - if (tbs[3] || tbs[4]) { - console.log(`\n=> Setting witnessing reward to ${radonSLA.witnessingReward}...`) - console.log(`=> Setting commit/reveal fee to ${radonSLA.witnessingUnitaryFee}...`) - try { - const tx = await request.setWitnessingFees( - radonSLA.witnessingReward, - radonSLA.witnessingUnitaryFee, - { from: owner } - ) - console.log(" > transaction hash:", tx.receipt.transactionHash) - } catch (ex) { - console.log(" > Failed:", ex) - } - } - if (tbs[0] || tbs[1]) { - console.log(`\n=> Setting number of witnesses to ${radonSLA.numWitnesses}...`) - console.log(`=> Setting witnessing consensus to ${radonSLA.minWitnessingConsensus}%...`) - try { - const tx = await request.setWitnessingQuorum( - radonSLA.numWitnesses, - radonSLA.minWitnessingConsensus, - { from: owner } - ) - console.log(" > transaction hash:", tx.receipt.transactionHash) - } catch (ex) { - console.log(" > Failed:", ex) - } - } - console.log() -} diff --git a/test/examples/RandomnessBareMinimal.sol b/test/examples/RandomnessBareMinimal.sol deleted file mode 100644 index 632ab121e..000000000 --- a/test/examples/RandomnessBareMinimal.sol +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity >=0.7.0 <0.9.0; - -import "../../contracts/interfaces/IWitnetRandomness.sol"; - -contract RandomnessBareMinimal { - - uint32 public randomness; - uint256 public latestRandomizingBlock; - IWitnetRandomness immutable public witnet; - - /// @param _witnetRandomness Address of the WitnetRandomness contract. - constructor (IWitnetRandomness _witnetRandomness) { - assert(address(_witnetRandomness) != address(0)); - witnet = _witnetRandomness; - } - - receive () external payable {} - - function nextBlock() external {} - - function requestRandomNumber() external payable { - latestRandomizingBlock = block.number; - uint _usedFunds = witnet.randomize{ value: msg.value }(); - if (_usedFunds < msg.value) { - payable(msg.sender).transfer(msg.value - _usedFunds); - } - } - - function fetchRandomNumber() external { - assert(latestRandomizingBlock > 0); - randomness = witnet.random(type(uint32).max, 0, latestRandomizingBlock); - } - -} diff --git a/truffle-config.js b/truffle-config.js index 660c7a0ed..c0a5cd6ed 100644 --- a/truffle-config.js +++ b/truffle-config.js @@ -17,6 +17,14 @@ module.exports = { solc: settings.getCompilers(network), }, mocha: { + reporter: "eth-gas-reporter", + reporterOptions: { + coinmarketcap: process.env.COINMARKETCAP_API_KEY, + currency: "USD", + gasPrice: 100, + excludeContracts: ["Migrations"], + src: "contracts", + }, timeout: 300000, useColors: true, }, From 9185e00d48b739090253265facf65666b7a2a26a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 14:14:39 +0100 Subject: [PATCH 136/149] chore: pnpm lock file instead of yarn's --- pnpm-lock.yaml | 2269 ++++++++---- yarn.lock | 9249 ------------------------------------------------ 2 files changed, 1638 insertions(+), 9880 deletions(-) delete mode 100644 yarn.lock diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d54f66b71..e04aa64c7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,6 +1,7 @@ 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 @@ -15,25 +16,33 @@ specifiers: eslint-plugin-promise: ^6.1.1 eth-gas-reporter: ^0.2.27 eth-helpers: ^1.3.0 + hardhat: ^2.19.5 js-sha256: ^0.11.0 - lodash: ^4.17.21 + 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 typescript: latest - web3: ^4.4.0 + witnet-toolkit: ../witnet-utils + +dependencies: + dotenv: 16.4.4 + lodash.merge: 4.6.2 + proper-lockfile: 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 custom-error-test-helper: 1.0.6 - dotenv: 16.4.1 eslint: 8.56.0 eslint-config-standard: 17.1.0_ot4howdeavqht6h5s42eunnfxi eslint-plugin-import: 2.29.1_eslint@8.56.0 @@ -41,16 +50,17 @@ devDependencies: 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_typescript@5.3.3 js-sha256: 0.11.0 - lodash: 4.17.21 nanoassert: 2.0.0 sha3-wasm: 1.0.0 solhint: 4.1.1_typescript@5.3.3 truffle: 5.11.5 truffle-assertions: 0.9.2 truffle-flattener: 1.6.0 + truffle-plugin-verify: 0.6.7 typescript: 5.3.3 - web3: 4.4.0_typescript@5.3.3 + witnet-toolkit: link:../witnet-utils packages: @@ -59,10 +69,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@adraffy/ens-normalize/1.10.1: - resolution: {integrity: sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==} - dev: true - /@apollo/protobufjs/1.2.6: resolution: {integrity: sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw==} hasBin: true @@ -237,6 +243,37 @@ packages: 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 + /@ensdomains/address-encoder/0.1.9: resolution: {integrity: sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg==} dependencies: @@ -257,7 +294,7 @@ packages: eth-ens-namehash: 2.0.8 solc: 0.4.26 testrpc: 0.0.1 - web3-utils: 1.10.3 + web3-utils: 1.10.4 dev: true /@ensdomains/ensjs/2.1.0: @@ -352,6 +389,15 @@ packages: ethereumjs-util: 7.1.5 dev: true + /@ethereumjs/util/8.0.2: + resolution: {integrity: sha512-b1Fcxmq+ckCdoLPhVIBkTcH8szigMapPuEmD8EDakvtI5Na5rzmX1sBW73YQqaPc7iUxGCAzZP1LrFQ7aEMugA==} + engines: {node: '>=14'} + dependencies: + '@ethereumjs/rlp': 4.0.1 + async: 3.2.5 + ethereum-cryptography: 1.2.0 + dev: true + /@ethereumjs/util/8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} engines: {node: '>=14'} @@ -676,6 +722,28 @@ packages: '@ethersproject/strings': 5.7.0 dev: true + /@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: + 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: + resolution: {integrity: sha512-cxoG8KQxkYPl71BPdKZihjVKqN2AE7WLXjU65BVOQ5jEYrUH3CWSxA9v7CCUJj4e0HoXFpVFIZ+1HRkiBKKiKg==} + dependencies: + emittery: 0.10.0 + keccak: 3.0.1 + seedrandom: 3.0.5 + optionalDependencies: + '@trufflesuite/bigint-buffer': 1.1.9 + dev: true + /@graphql-tools/batch-execute/8.5.1_graphql@15.8.0: resolution: {integrity: sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew==} peerDependencies: @@ -820,6 +888,17 @@ packages: dev: true optional: true + /@metamask/eth-sig-util/4.0.1: + resolution: {integrity: sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==} + engines: {node: '>=12.0.0'} + dependencies: + ethereumjs-abi: 0.6.8 + ethereumjs-util: 6.2.1 + ethjs-util: 0.1.6 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + dev: true + /@noble/curves/1.3.0: resolution: {integrity: sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA==} dependencies: @@ -857,7 +936,290 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.0 + 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 + 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 + 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 + 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 + 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 + dev: true + + /@nomicfoundation/ethereumjs-rlp/5.0.2: + resolution: {integrity: sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA==} + engines: {node: '>=14'} + hasBin: true + 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 + dev: true + + /@nomicfoundation/ethereumjs-trie/6.0.2: + resolution: {integrity: sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ==} + engines: {node: '>=14'} + 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 + dev: true + + /@nomicfoundation/ethereumjs-tx/5.0.2: + resolution: {integrity: sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g==} + engines: {node: '>=14'} + 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 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /@nomicfoundation/ethereumjs-util/9.0.2: + resolution: {integrity: sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ==} + engines: {node: '>=14'} + dependencies: + '@chainsafe/ssz': 0.10.2 + '@nomicfoundation/ethereumjs-rlp': 5.0.2 + ethereum-cryptography: 0.1.3 + dev: true + + /@nomicfoundation/ethereumjs-vm/7.0.2: + resolution: {integrity: sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA==} + engines: {node: '>=14'} + 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 + 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: + resolution: {integrity: sha512-B8ZjhOrmbbRWqJi65jvQblzjsfYktjqj2vmOm+oc2Vu8drZbT2cjeSCRHZKbS7lOtfW78aJZSFvw+zRLCiABJA==} + peerDependencies: + hardhat: ^2.0.4 + dependencies: + '@ethersproject/abi': 5.7.0 + '@ethersproject/address': 5.7.0 + cbor: 8.1.0 + chalk: 2.4.2 + debug: 4.3.4 + hardhat: 2.19.5_typescript@5.3.3 + lodash.clonedeep: 4.5.0 + semver: 6.3.1 + table: 6.8.1 + undici: 5.28.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@nomicfoundation/solidity-analyzer-darwin-arm64/0.1.1: + resolution: {integrity: sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-darwin-x64/0.1.1: + resolution: {integrity: sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-freebsd-x64/0.1.1: + resolution: {integrity: sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-gnu/0.1.1: + resolution: {integrity: sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-arm64-musl/0.1.1: + resolution: {integrity: sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-gnu/0.1.1: + resolution: {integrity: sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-linux-x64-musl/0.1.1: + resolution: {integrity: sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-win32-arm64-msvc/0.1.1: + resolution: {integrity: sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-win32-ia32-msvc/0.1.1: + resolution: {integrity: sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer-win32-x64-msvc/0.1.1: + resolution: {integrity: sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@nomicfoundation/solidity-analyzer/0.1.1: + resolution: {integrity: sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==} + engines: {node: '>= 12'} + optionalDependencies: + '@nomicfoundation/solidity-analyzer-darwin-arm64': 0.1.1 + '@nomicfoundation/solidity-analyzer-darwin-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-freebsd-x64': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-arm64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-gnu': 0.1.1 + '@nomicfoundation/solidity-analyzer-linux-x64-musl': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-arm64-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-ia32-msvc': 0.1.1 + '@nomicfoundation/solidity-analyzer-win32-x64-msvc': 0.1.1 dev: true /@openzeppelin/contract-loader/0.6.3: @@ -894,8 +1256,8 @@ packages: ethjs-abi: 0.2.1 lodash.flatten: 4.4.0 semver: 5.7.2 - web3: 1.10.3 - web3-utils: 1.10.3 + web3: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - bn.js - bufferutil @@ -1087,6 +1449,76 @@ packages: '@scure/base': 1.1.5 dev: true + /@sentry/core/5.30.0: + resolution: {integrity: sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: true + + /@sentry/hub/5.30.0: + resolution: {integrity: sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: true + + /@sentry/minimal/5.30.0: + resolution: {integrity: sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: true + + /@sentry/node/5.30.0: + resolution: {integrity: sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==} + engines: {node: '>=6'} + dependencies: + '@sentry/core': 5.30.0 + '@sentry/hub': 5.30.0 + '@sentry/tracing': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + cookie: 0.4.2 + https-proxy-agent: 5.0.1 + lru_map: 0.3.3 + tslib: 1.14.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@sentry/tracing/5.30.0: + resolution: {integrity: sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==} + engines: {node: '>=6'} + dependencies: + '@sentry/hub': 5.30.0 + '@sentry/minimal': 5.30.0 + '@sentry/types': 5.30.0 + '@sentry/utils': 5.30.0 + tslib: 1.14.1 + dev: true + + /@sentry/types/5.30.0: + resolution: {integrity: sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==} + engines: {node: '>=6'} + dev: true + + /@sentry/utils/5.30.0: + resolution: {integrity: sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==} + engines: {node: '>=6'} + dependencies: + '@sentry/types': 5.30.0 + tslib: 1.14.1 + dev: true + /@sindresorhus/is/4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} @@ -1109,6 +1541,11 @@ packages: antlr4ts: 0.5.0-alpha.4 dev: true + /@solidity-parser/parser/0.17.0: + resolution: {integrity: sha512-Nko8R0/kUo391jsEHHxrGM07QFdnPGvlmox4rmH0kNiNAashItAilhy4Mv4pK5gQmW5f4sXAF58fwJbmlkGcVw==} + dev: true + optional: true + /@szmarczak/http-timer/4.0.6: resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} engines: {node: '>=10'} @@ -1155,7 +1592,7 @@ packages: cbor: 5.2.0 debug: 4.3.4 lodash: 4.17.21 - semver: 7.5.4 + semver: 7.6.0 utf8: 3.0.0 web3-utils: 1.10.0 transitivePeerDependencies: @@ -1170,6 +1607,33 @@ packages: colors: 1.4.0 dev: true + /@truffle/compile-solidity/6.0.79: + resolution: {integrity: sha512-sdKYTrXwNr70p17MOzkV277ayNA7evECPFRGTvi6qDea697EXTqq694coH1ffmSjArhrqpinMMenF1v421A/AA==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/compile-common': 0.9.8 + '@truffle/config': 1.3.61 + '@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-retry: 3.9.1 + debug: 4.3.4 + fs-extra: 9.1.0 + iter-tools: 7.5.3 + lodash: 4.17.21 + node-abort-controller: 3.1.1 + original-require: 1.0.1 + require-from-string: 2.0.2 + semver: 7.6.0 + solc: 0.8.21_debug@4.3.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + /@truffle/config/1.3.61: resolution: {integrity: sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw==} engines: {node: ^16.20 || ^18.16 || >=20} @@ -1188,7 +1652,6 @@ packages: - supports-color - utf-8-validate dev: true - optional: true /@truffle/contract-schema/3.4.16: resolution: {integrity: sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg==} @@ -1200,6 +1663,16 @@ packages: - supports-color dev: true + /@truffle/contract-sources/0.2.1: + resolution: {integrity: sha512-C7l+lySN2V327s0CAX52mN4h3ag1WpIn6l45hsB92GKhY1t5h5txPUXvuKamQpalQWCTLfMS4+YbtN0AxPxCug==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + debug: 4.3.4 + glob: 7.2.3 + transitivePeerDependencies: + - supports-color + dev: true + /@truffle/contract/4.6.31: resolution: {integrity: sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ==} engines: {node: ^16.20 || ^18.16 || >=20} @@ -1243,13 +1716,11 @@ packages: - supports-color - utf-8-validate dev: true - optional: true /@truffle/dashboard-message-bus-common/0.1.7: resolution: {integrity: sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - optional: true /@truffle/db-loader/0.2.36: resolution: {integrity: sha512-Cm8uVc2eoihquMOSZm8UOuGGUvBo+/GHkxRoPAZ5pftOpSlRAug0okVOp6ETj1BujgLJ02izU/qdrwSGWwGR9A==} @@ -1325,7 +1796,7 @@ packages: redux: 3.7.2 redux-saga: 1.0.0 reselect-tree: 1.3.7 - semver: 7.5.4 + semver: 7.6.0 web3: 1.10.0 web3-eth-abi: 1.10.0 transitivePeerDependencies: @@ -1354,7 +1825,11 @@ packages: - supports-color - utf-8-validate dev: true - optional: true + + /@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: resolution: {integrity: sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw==} @@ -1370,11 +1845,21 @@ packages: - utf-8-validate dev: true + /@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 + transitivePeerDependencies: + - supports-color + dev: true + /@truffle/promise-tracker/0.1.7: resolution: {integrity: sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA==} engines: {node: ^16.20 || ^18.16 || >=20} dev: true - optional: true /@truffle/provider/0.3.13: resolution: {integrity: sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA==} @@ -1390,7 +1875,42 @@ packages: - supports-color - utf-8-validate dev: true - optional: true + + /@truffle/provisioner/0.2.84: + resolution: {integrity: sha512-zgDeSq+ZAcgtKSDlShtn1bsJWTRgeOdTTVzthjXMJisKnRQChkOAp7ehIr0RoIp5o2T1IVxYILAk7IPYDHNzuQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@truffle/config': 1.3.61 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true + + /@truffle/resolver/9.0.53: + resolution: {integrity: sha512-jYqHIucs6yMCOpKFwnvcW6cfpn/WEWJQ8FN0EUhf0r0HMz9TjG9HnabBZSvfMBFPAmKklGR/GI0GESWf3alpXQ==} + engines: {node: ^16.20 || ^18.16 || >=20} + dependencies: + '@ganache/console.log': 0.3.0 + '@truffle/compile-solidity': 6.0.79 + '@truffle/contract': 4.6.31 + '@truffle/contract-sources': 0.2.1 + '@truffle/expect': 0.1.7 + '@truffle/provisioner': 0.2.84 + abi-to-sol: 0.7.1 + debug: 4.3.4 + detect-installed: 2.0.4 + fs-extra: 9.1.0 + get-installed-path: 4.0.8 + glob: 7.2.3 + web3-utils: 1.10.0 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: true /@truffle/source-map-utils/1.3.119: resolution: {integrity: sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ==} @@ -1412,6 +1932,22 @@ packages: dependencies: '@trufflesuite/spinnies': 0.1.1 dev: true + + /@trufflesuite/bigint-buffer/1.1.10: + resolution: {integrity: sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==} + engines: {node: '>= 14.0.0'} + requiresBuild: true + dependencies: + node-gyp-build: 4.4.0 + dev: true + + /@trufflesuite/bigint-buffer/1.1.9: + resolution: {integrity: sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==} + engines: {node: '>= 10.0.0'} + requiresBuild: true + dependencies: + node-gyp-build: 4.3.0 + dev: true optional: true /@trufflesuite/chromafi/3.0.0: @@ -1434,7 +1970,6 @@ packages: cli-cursor: 3.1.0 strip-ansi: 6.0.1 dev: true - optional: true /@trufflesuite/uws-js-unofficial/20.30.0-unofficial.0: resolution: {integrity: sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA==} @@ -1448,21 +1983,27 @@ packages: /@types/accepts/1.3.7: resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true + /@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: resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true /@types/body-parser/1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true @@ -1470,7 +2011,7 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true @@ -1492,7 +2033,7 @@ packages: /@types/connect/3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true @@ -1504,7 +2045,7 @@ packages: /@types/express-serve-static-core/4.17.31: resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 dev: true @@ -1513,7 +2054,7 @@ packages: /@types/express-serve-static-core/4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 '@types/qs': 6.9.11 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -1582,8 +2123,8 @@ packages: resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} dev: true - /@types/node/20.11.16: - resolution: {integrity: sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==} + /@types/node/20.11.17: + resolution: {integrity: sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==} dependencies: undici-types: 5.26.5 dev: true @@ -1595,7 +2136,7 @@ packages: /@types/pbkdf2/3.1.2: resolution: {integrity: sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true /@types/qs/6.9.11: @@ -1607,6 +2148,13 @@ packages: 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: resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: @@ -1616,7 +2164,7 @@ packages: /@types/secp256k1/4.0.6: resolution: {integrity: sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==} dependencies: - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true /@types/seedrandom/3.0.1: @@ -1627,7 +2175,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true @@ -1636,30 +2184,30 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.11.16 + '@types/node': 20.11.17 dev: true optional: true - /@types/ws/8.5.3: - resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} - dependencies: - '@types/node': 20.11.16 - dev: true - /@ungap/structured-clone/1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /abitype/0.7.1_typescript@5.3.3: - resolution: {integrity: sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==} - peerDependencies: - typescript: '>=4.9.4' - zod: ^3 >=3.19.1 - peerDependenciesMeta: - zod: - optional: true + /abi-to-sol/0.7.1: + resolution: {integrity: sha512-GcpyiHA+sTbmSEAbBWsXS5iO3WBGuqhsiBo3WH9VHthNFF/k438mXFJtS/SUxtm8HmbCMv/BnxokUX6w4y2eFg==} + hasBin: true dependencies: - typescript: 5.3.3 + '@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 + 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 + transitivePeerDependencies: + - supports-color dev: true /abort-controller/3.0.0: @@ -1687,6 +2235,19 @@ 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: resolution: {integrity: sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w==} dependencies: @@ -1740,6 +2301,11 @@ packages: hasBin: true dev: true + /adm-zip/0.4.16: + resolution: {integrity: sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==} + engines: {node: '>=0.3.0'} + dev: true + /ado-contracts/1.0.0: resolution: {integrity: sha512-tLJdlGed3Fcwih4m9yNaI3+PqfxKarbLBR2OavM8RiPX8zo5TrLUZ6akrqkK+BFBInhaxONnMKsWiHj4QNPdCw==} dependencies: @@ -1750,6 +2316,23 @@ packages: resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} dev: true + /agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + /ajv-formats/2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependenciesMeta: @@ -1758,7 +2341,6 @@ packages: dependencies: ajv: 8.12.0 dev: true - optional: true /ajv/6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} @@ -1778,6 +2360,12 @@ packages: uri-js: 4.4.1 dev: true + /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: resolution: {integrity: sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==} engines: {node: '>=6'} @@ -1788,6 +2376,18 @@ packages: engines: {node: '>=6'} dev: true + /ansi-colors/4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + + /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: resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} engines: {node: '>=0.10.0'} @@ -2001,7 +2601,7 @@ packages: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 is-array-buffer: 3.0.4 dev: true @@ -2013,10 +2613,10 @@ packages: resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.3 + es-abstract: 1.22.4 + get-intrinsic: 1.2.4 is-string: 1.0.7 dev: true @@ -2024,31 +2624,31 @@ packages: resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-array-method-boxes-properly: 1.0.0 is-string: 1.0.7 dev: true - /array.prototype.findlastindex/1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + /array.prototype.findlastindex/1.2.4: + resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 + es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.3 dev: true /array.prototype.flat/1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-shim-unscopables: 1.0.2 dev: true @@ -2056,9 +2656,9 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-shim-unscopables: 1.0.2 dev: true @@ -2067,11 +2667,11 @@ packages: engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-errors: 1.3.0 - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.2 dev: true @@ -2127,6 +2727,10 @@ packages: lodash: 4.17.21 dev: true + /async/3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} + dev: true + /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true @@ -2135,13 +2739,11 @@ packages: resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} engines: {node: '>= 4.0.0'} dev: true - optional: true /atomically/1.7.0: resolution: {integrity: sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==} engines: {node: '>=10.12.0'} dev: true - optional: true /available-typed-arrays/1.0.6: resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} @@ -2156,21 +2758,35 @@ packages: resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} dev: true + /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: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==} + dependencies: + follow-redirects: 1.15.5 + transitivePeerDependencies: + - debug + dev: true + /axios/1.5.0_debug@4.3.4: resolution: {integrity: sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==} dependencies: - follow-redirects: 1.15.5_debug@4.3.4 + follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug dev: true - optional: true /axios/1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: - follow-redirects: 1.15.5_debug@4.3.4 + follow-redirects: 1.15.5 form-data: 4.0.0 proxy-from-env: 1.1.0 transitivePeerDependencies: @@ -2201,6 +2817,21 @@ packages: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: true + /better-ajv-errors/0.8.2_ajv@6.12.6: + resolution: {integrity: sha512-FnODTBJSQSHmJXDLPiC7ca0dC4S1HSTPv1+Hg2sm/C71i3Dj0l1jcUEaq/3OQ6MmnUveshTsUvUj65pDSr3Qow==} + peerDependencies: + ajv: 4.11.8 - 8 + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/runtime': 7.23.9 + ajv: 6.12.6 + chalk: 2.4.2 + core-js: 3.36.0 + json-to-ast: 2.1.0 + jsonpointer: 5.0.1 + leven: 3.1.0 + dev: true + /big-integer/1.6.36: resolution: {integrity: sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg==} engines: {node: '>=0.6'} @@ -2210,6 +2841,11 @@ packages: 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: resolution: {integrity: sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ==} dev: true @@ -2287,6 +2923,20 @@ packages: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} dev: true + /boxen/5.1.2: + resolution: {integrity: sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==} + engines: {node: '>=10'} + dependencies: + ansi-align: 3.0.1 + camelcase: 6.3.0 + chalk: 4.1.2 + cli-boxes: 2.2.1 + string-width: 4.2.3 + type-fest: 0.20.2 + widest-line: 3.1.0 + wrap-ansi: 7.0.0 + dev: true + /brace-expansion/1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -2311,6 +2961,15 @@ packages: 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: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true @@ -2399,7 +3058,7 @@ packages: /builtins/5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /bytes/3.1.2: @@ -2448,12 +3107,15 @@ packages: responselike: 2.0.1 dev: true - /call-bind/1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} + /call-bind/1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.3 - set-function-length: 1.2.0 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 dev: true /callsites/3.1.0: @@ -2483,6 +3145,11 @@ packages: engines: {node: '>=10'} dev: true + /case/1.6.3: + resolution: {integrity: sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ==} + engines: {node: '>= 0.8.0'} + dev: true + /caseless/0.12.0: resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} dev: true @@ -2500,6 +3167,13 @@ packages: nofilter: 1.0.4 dev: true + /cbor/8.1.0: + resolution: {integrity: sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==} + engines: {node: '>=12.19'} + dependencies: + nofilter: 3.1.0 + dev: true + /chai-bn/0.2.2_bn.js@4.12.0+chai@4.4.1: resolution: {integrity: sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg==} peerDependencies: @@ -2612,10 +3286,29 @@ packages: fsevents: 2.3.3 dev: true + /chokidar/3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.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 + dev: true + /chownr/1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} dev: true + /ci-info/2.0.0: + resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} + dev: true + /cids/0.7.5: resolution: {integrity: sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==} engines: {node: '>=4.0.0', npm: '>=3.0.0'} @@ -2635,17 +3328,53 @@ packages: safe-buffer: 5.2.1 dev: true + /circular/1.0.5: + resolution: {integrity: sha512-n4Sspha+wxUl5zeA3JYp1zFCjsLz2VfXIe2gRKNQBrIX+7iPdGcCGZOF8W8IULtllZ/aejXtySfdFFt1wy/3JQ==} + dev: true + /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: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-boxes/2.2.1: + resolution: {integrity: sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==} + engines: {node: '>=6'} + dev: true + /cli-cursor/3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 dev: true - optional: true + + /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: + resolution: {integrity: sha512-L++cAQ5g0Nu6aV56B3uaR+c7jEGSAa4WApY1ZN7XiD8niJ5jRfXE/qvMwgz3uZBG0rft4hJS75Vpz2F3mSm4Mg==} + dev: true /cli-table3/0.5.1: resolution: {integrity: sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==} @@ -2657,6 +3386,12 @@ packages: colors: 1.4.0 dev: true + /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: resolution: {integrity: sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==} dependencies: @@ -2685,6 +3420,11 @@ packages: mimic-response: 1.0.1 dev: true + /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: resolution: {integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==} engines: {node: '>=0.10.0'} @@ -2723,6 +3463,10 @@ packages: delayed-stream: 1.0.0 dev: true + /command-exists/1.2.9: + resolution: {integrity: sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==} + dev: true + /commander/10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} @@ -2733,6 +3477,15 @@ packages: dev: true optional: true + /commander/3.0.2: + resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} + dev: true + + /commander/8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: true + /concat-map/0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -2760,9 +3513,8 @@ packages: json-schema-typed: 7.0.3 onetime: 5.1.2 pkg-up: 3.1.0 - semver: 7.5.4 + semver: 7.6.0 dev: true - optional: true /config-chain/1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2802,11 +3554,21 @@ packages: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} dev: true + /cookie/0.4.2: + resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==} + engines: {node: '>= 0.6'} + dev: true + /cookie/0.5.0: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} dev: true + /core-js/3.36.0: + resolution: {integrity: sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==} + requiresBuild: true + dev: true + /core-util-is/1.0.2: resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} dev: true @@ -2961,7 +3723,6 @@ packages: dependencies: mimic-fn: 3.1.0 dev: true - optional: true /debug/2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} @@ -3081,21 +3842,21 @@ packages: dev: true optional: true - /define-data-property/1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property/1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 dev: true /define-properties/1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true @@ -3103,7 +3864,6 @@ packages: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} dev: true - optional: true /delayed-stream/1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} @@ -3125,6 +3885,13 @@ packages: engines: {node: '>=4'} dev: true + /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: resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} engines: {node: '>=0.3.1'} @@ -3187,12 +3954,11 @@ packages: dependencies: is-obj: 2.0.0 dev: true - optional: true - /dotenv/16.4.1: - resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} + /dotenv/16.4.4: + resolution: {integrity: sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg==} engines: {node: '>=12'} - dev: true + dev: false /double-ended-queue/2.1.0-0: resolution: {integrity: sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ==} @@ -3231,7 +3997,6 @@ packages: resolution: {integrity: sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ==} engines: {node: '>=6'} dev: true - optional: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3266,6 +4031,14 @@ packages: dev: true optional: true + /enquirer/2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + /entities/4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3275,7 +4048,6 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} dev: true - optional: true /errno/0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} @@ -3291,26 +4063,28 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract/1.22.4: + resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} engines: {node: '>= 0.4'} dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.3 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 + hasown: 2.0.1 + internal-slot: 1.0.7 is-array-buffer: 3.0.4 is-callable: 1.2.7 is-negative-zero: 2.0.2 @@ -3322,13 +4096,13 @@ packages: object-inspect: 1.13.1 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.1 + regexp.prototype.flags: 1.5.2 safe-array-concat: 1.1.0 - safe-regex-test: 1.0.2 + safe-regex-test: 1.0.3 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 + typed-array-buffer: 1.0.1 typed-array-byte-length: 1.0.0 typed-array-byte-offset: 1.0.0 typed-array-length: 1.0.4 @@ -3340,6 +4114,13 @@ packages: resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} dev: true + /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: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} @@ -3349,15 +4130,15 @@ packages: resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 - hasown: 2.0.0 + hasown: 2.0.1 dev: true /es-shim-unscopables/1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.1 dev: true /es-to-primitive/1.2.1: @@ -3398,8 +4179,8 @@ packages: ext: 1.7.0 dev: true - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade/3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -3502,7 +4283,7 @@ packages: optional: true dependencies: array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + array.prototype.findlastindex: 1.2.4 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 @@ -3510,7 +4291,7 @@ packages: eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 eslint-module-utils: 2.8.0_rzg3ygvhoewmy7caurhnki56y4 - hasown: 2.0.0 + hasown: 2.0.1 is-core-module: 2.13.1 is-glob: 4.0.3 minimatch: 3.1.2 @@ -3542,7 +4323,7 @@ packages: is-core-module: 2.13.1 minimatch: 3.1.2 resolve: 1.22.8 - semver: 7.5.4 + semver: 7.6.0 dev: true /eslint-plugin-promise/6.1.1_eslint@8.56.0: @@ -3676,7 +4457,7 @@ packages: fs-readdir-recursive: 1.1.0 lodash: 4.17.21 markdown-table: 1.1.3 - mocha: 10.2.0 + mocha: 10.3.0 req-cwd: 2.0.0 sha1: 1.1.1 sync-request: 6.1.0 @@ -3759,6 +4540,25 @@ packages: '@scure/bip39': 1.2.2 dev: true + /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: + resolution: {integrity: sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==} + dependencies: + '@types/bn.js': 4.11.6 + bn.js: 4.12.0 + create-hash: 1.2.0 + elliptic: 6.5.4 + ethereum-cryptography: 0.1.3 + ethjs-util: 0.1.6 + rlp: 2.2.7 + dev: true + /ethereumjs-util/7.1.5: resolution: {integrity: sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==} engines: {node: '>=10.0.0'} @@ -3839,6 +4639,14 @@ packages: number-to-bn: 1.7.0 dev: true + /ethjs-util/0.1.6: + resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} + engines: {node: '>=6.5.0', npm: '>=3'} + dependencies: + is-hex-prefixed: 1.0.0 + strip-hex-prefix: 1.0.0 + dev: true + /event-target-shim/5.0.1: resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} engines: {node: '>=6'} @@ -3856,6 +4664,13 @@ packages: safe-buffer: 5.2.1 dev: true + /expand-tilde/2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + dependencies: + homedir-polyfill: 1.0.3 + dev: true + /express/4.18.2: resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} engines: {node: '>= 0.10.0'} @@ -3933,8 +4748,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.17.0: - resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + /fastq/1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -3997,7 +4812,6 @@ packages: dependencies: locate-path: 3.0.0 dev: true - optional: true /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} @@ -4033,7 +4847,7 @@ packages: resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} dev: true - /follow-redirects/1.15.5_debug@4.3.4: + /follow-redirects/1.15.5: resolution: {integrity: sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==} engines: {node: '>=4.0'} peerDependencies: @@ -4041,8 +4855,6 @@ packages: peerDependenciesMeta: debug: optional: true - dependencies: - debug: 4.3.4 dev: true /for-each/0.3.3: @@ -4100,6 +4912,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /fp-ts/1.19.3: + resolution: {integrity: sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==} + dev: true + /fresh/0.5.2: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} @@ -4123,6 +4939,15 @@ packages: universalify: 0.1.2 dev: true + /fs-extra/7.0.1: + resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} + engines: {node: '>=6 <7 || >=8'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + dev: true + /fs-extra/8.1.0: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} @@ -4141,7 +4966,6 @@ packages: jsonfile: 6.1.0 universalify: 2.0.1 dev: true - optional: true /fs-minipass/1.2.7: resolution: {integrity: sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==} @@ -4173,16 +4997,15 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 functions-have-names: 1.2.3 dev: true /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - optional: true /functions-have-names/1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -4192,6 +5015,7 @@ packages: resolution: {integrity: sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==} hasBin: true dependencies: + '@trufflesuite/bigint-buffer': 1.1.10 '@trufflesuite/uws-js-unofficial': 20.30.0-unofficial.0 '@types/bn.js': 5.1.5 '@types/lru-cache': 5.1.1 @@ -4200,6 +5024,9 @@ packages: abstract-leveldown: 7.2.0 async-eventemitter: 0.2.4 emittery: 0.10.0 + keccak: 3.0.2 + leveldown: 6.1.0 + secp256k1: 4.0.3 optionalDependencies: bufferutil: 4.0.5 utf-8-validate: 5.0.7 @@ -4223,15 +5050,28 @@ packages: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic/1.2.3: - resolution: {integrity: sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==} + /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: + resolution: {integrity: sha512-PmANK1xElIHlHH2tXfOoTnSDUjX1X3GvKK6ZyLbUnSCCn1pADwu67eVWttuPzJWrXDDT2MfO6uAaKILOFfitmA==} + engines: {node: '>=6', npm: '>=5', yarn: '>=1'} + dependencies: + global-modules: 1.0.0 + dev: true + + /get-intrinsic/1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.1 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.1 dev: true /get-port/3.2.0: @@ -4251,12 +5091,13 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-symbol-description/1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true /get-tsconfig/4.7.2: @@ -4318,6 +5159,26 @@ packages: once: 1.4.0 dev: true + /global-modules/1.0.0: + resolution: {integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==} + engines: {node: '>=0.10.0'} + dependencies: + global-prefix: 1.0.2 + is-windows: 1.0.2 + resolve-dir: 1.0.1 + dev: true + + /global-prefix/1.0.2: + resolution: {integrity: sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + homedir-polyfill: 1.0.3 + ini: 1.3.8 + is-windows: 1.0.2 + which: 1.3.1 + dev: true + /global/4.4.0: resolution: {integrity: sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==} dependencies: @@ -4342,7 +5203,7 @@ packages: /gopd/1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 dev: true /got/11.8.6: @@ -4404,6 +5265,9 @@ packages: /graceful-fs/4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true /graphemer/1.4.0: @@ -4441,6 +5305,74 @@ packages: har-schema: 2.0.0 dev: true + /hardhat/2.19.5_typescript@5.3.3: + resolution: {integrity: sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw==} + hasBin: true + peerDependencies: + ts-node: '*' + typescript: '*' + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + 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/solidity-analyzer': 0.1.1 + '@sentry/node': 5.30.0 + '@types/bn.js': 5.1.5 + '@types/lru-cache': 5.1.1 + adm-zip: 0.4.16 + aggregate-error: 3.1.0 + ansi-escapes: 4.3.2 + boxen: 5.1.2 + chalk: 2.4.2 + chokidar: 3.6.0 + ci-info: 2.0.0 + debug: 4.3.4 + enquirer: 2.4.1 + env-paths: 2.2.1 + ethereum-cryptography: 1.2.0 + ethereumjs-abi: 0.6.8 + find-up: 2.1.0 + fp-ts: 1.19.3 + fs-extra: 7.0.1 + glob: 7.2.0 + immutable: 4.3.5 + io-ts: 1.10.4 + keccak: 3.0.4 + lodash: 4.17.21 + mnemonist: 0.38.5 + mocha: 10.3.0 + p-map: 4.0.0 + raw-body: 2.5.2 + resolve: 1.17.0 + semver: 6.3.1 + solc: 0.7.3_debug@4.3.4 + source-map-support: 0.5.21 + stacktrace-parser: 0.1.10 + tsort: 0.0.1 + typescript: 5.3.3 + undici: 5.28.3 + uuid: 8.3.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /has-bigints/1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} dev: true @@ -4455,10 +5387,10 @@ packages: engines: {node: '>=8'} dev: true - /has-property-descriptors/1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} + /has-property-descriptors/1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.3 + es-define-property: 1.0.0 dev: true /has-proto/1.0.1: @@ -4501,8 +5433,8 @@ packages: minimalistic-assert: 1.0.1 dev: true - /hasown/2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + /hasown/2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 @@ -4536,6 +5468,13 @@ packages: minimalistic-crypto-utils: 1.0.1 dev: true + /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: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true @@ -4609,6 +5548,16 @@ packages: resolve-alpn: 1.2.1 dev: true + /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 + transitivePeerDependencies: + - supports-color + dev: true + /iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -4637,6 +5586,10 @@ packages: dev: true optional: true + /immutable/4.3.5: + resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} + dev: true + /import-fresh/3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -4650,6 +5603,11 @@ packages: engines: {node: '>=0.8.19'} dev: true + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + /inflight/1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} dependencies: @@ -4665,13 +5623,13 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot/1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} + /internal-slot/1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.3 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.1 + side-channel: 1.0.5 dev: true /invert-kv/1.0.0: @@ -4679,6 +5637,12 @@ packages: engines: {node: '>=0.10.0'} dev: true + /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: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -4688,7 +5652,7 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: true @@ -4696,8 +5660,8 @@ packages: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish/0.2.1: @@ -4721,7 +5685,7 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: true @@ -4745,7 +5709,7 @@ packages: /is-core-module/2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.1 dev: true /is-date-object/1.0.5: @@ -4827,7 +5791,6 @@ packages: resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} engines: {node: '>=8'} dev: true - optional: true /is-path-inside/3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} @@ -4843,14 +5806,19 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-tostringtag: 1.0.2 dev: true + /is-retry-allowed/2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + dev: true + /is-shared-array-buffer/1.0.2: resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 dev: true /is-string/1.0.7: @@ -4896,7 +5864,12 @@ packages: /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + dev: true + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} dev: true /isarray/0.0.1: @@ -4923,18 +5896,19 @@ packages: dependencies: ws: 7.5.9 dev: true - optional: true - /isomorphic-ws/5.0.0_ws@8.16.0: - resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} - peerDependencies: - ws: '*' + /isstream/0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true + + /iter-tools/7.5.3: + resolution: {integrity: sha512-iEcHpgM9cn6tsI5MewqxyEega9KPbIDytQTEnu6c0MtlQQhQFofssYuRqxCarZgUdzliepRZPwwwflE4wAIjaA==} dependencies: - ws: 8.16.0 + '@babel/runtime': 7.23.9 dev: true - /isstream/0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + /js-sdsl/4.4.2: + resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} dev: true /js-sha256/0.11.0: @@ -4993,7 +5967,6 @@ packages: /json-schema-typed/7.0.3: resolution: {integrity: sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==} dev: true - optional: true /json-schema/0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -5007,7 +5980,7 @@ packages: resolution: {integrity: sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 isarray: 2.0.5 jsonify: 0.0.1 object-keys: 1.1.1 @@ -5017,6 +5990,14 @@ packages: resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} dev: true + /json-to-ast/2.1.0: + resolution: {integrity: sha512-W9Lq347r8tA1DfMvAGn9QNcgYm4Wm7Yc+k8e6vezpMnRT+NHbtlxgNBXRVjXe9YM6eTn6+p/MKOlV/aABJcSnQ==} + engines: {node: '>= 4'} + dependencies: + code-error-fragment: 0.0.230 + grapheme-splitter: 1.0.4 + dev: true + /json5/1.0.2: resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true @@ -5043,12 +6024,16 @@ packages: optionalDependencies: graceful-fs: 4.2.11 dev: true - optional: true /jsonify/0.0.1: resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} dev: true + /jsonpointer/5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + dev: true + /jsprim/1.4.2: resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} engines: {node: '>=0.6.0'} @@ -5059,6 +6044,25 @@ packages: verror: 1.10.0 dev: true + /keccak/3.0.1: + resolution: {integrity: sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + dev: true + + /keccak/3.0.2: + resolution: {integrity: sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==} + engines: {node: '>=10.0.0'} + requiresBuild: true + dependencies: + node-addon-api: 2.0.2 + node-gyp-build: 4.8.0 + readable-stream: 3.6.2 + dev: true + /keccak/3.0.4: resolution: {integrity: sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==} engines: {node: '>=10.0.0'} @@ -5196,6 +6200,15 @@ 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: resolution: {integrity: sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ==} engines: {node: '>=8.6.0'} @@ -5207,6 +6220,16 @@ packages: dev: true optional: true + /leveldown/6.1.0: + resolution: {integrity: sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==} + engines: {node: '>=10.12.0'} + requiresBuild: true + dependencies: + abstract-leveldown: 7.2.0 + napi-macros: 2.0.0 + node-gyp-build: 4.8.0 + dev: true + /levelup/4.4.0: resolution: {integrity: sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==} engines: {node: '>=6'} @@ -5219,6 +6242,11 @@ packages: dev: true optional: true + /leven/3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: true + /levn/0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} @@ -5257,7 +6285,6 @@ packages: p-locate: 3.0.0 path-exists: 3.0.0 dev: true - optional: true /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} @@ -5281,6 +6308,10 @@ packages: resolution: {integrity: sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==} dev: true + /lodash.clonedeep/4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + dev: true + /lodash.flatten/4.4.0: resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: true @@ -5291,7 +6322,6 @@ packages: /lodash.merge/4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true /lodash.sortby/4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -5358,6 +6388,12 @@ packages: 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: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -5371,6 +6407,10 @@ packages: dev: true optional: true + /lru_map/0.3.3: + resolution: {integrity: sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==} + dev: true + /ltgt/2.2.1: resolution: {integrity: sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==} dev: true @@ -5380,6 +6420,11 @@ packages: 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: resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} dependencies: @@ -5405,6 +6450,15 @@ 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: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} @@ -5445,13 +6499,11 @@ packages: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} dev: true - optional: true /mimic-fn/3.1.0: resolution: {integrity: sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==} engines: {node: '>=8'} dev: true - optional: true /mimic-response/1.0.1: resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} @@ -5546,6 +6598,12 @@ packages: hasBin: true dev: true + /mnemonist/0.38.5: + resolution: {integrity: sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==} + dependencies: + obliterator: 2.0.4 + dev: true + /mocha/10.1.0: resolution: {integrity: sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg==} engines: {node: '>= 14.0.0'} @@ -5574,8 +6632,8 @@ packages: yargs-unparser: 2.0.0 dev: true - /mocha/10.2.0: - resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + /mocha/10.3.0: + resolution: {integrity: sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==} engines: {node: '>= 14.0.0'} hasBin: true dependencies: @@ -5586,13 +6644,12 @@ packages: diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 7.2.0 + glob: 8.1.0 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 minimatch: 5.0.1 ms: 2.1.3 - nanoid: 3.3.3 serialize-javascript: 6.0.0 strip-json-comments: 3.1.1 supports-color: 8.1.1 @@ -5683,7 +6740,10 @@ packages: /napi-macros/2.0.0: resolution: {integrity: sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==} dev: true - optional: true + + /napi-macros/2.2.2: + resolution: {integrity: sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g==} + dev: true /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -5694,6 +6754,12 @@ packages: engines: {node: '>= 0.6'} dev: true + /neodoc/2.0.2: + resolution: {integrity: sha512-NAppJ0YecKWdhSXFYCHbo6RutiX8vOt/Jo3l46mUg6pQlpJNaqc5cGxdrW2jITQm5JIYySbFVPDl3RrREXNyPw==} + dependencies: + ansi-regex: 2.1.1 + dev: true + /next-tick/1.1.0: resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} dev: true @@ -5707,7 +6773,6 @@ packages: /node-abort-controller/3.1.1: resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} dev: true - optional: true /node-addon-api/2.0.2: resolution: {integrity: sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==} @@ -5744,6 +6809,17 @@ packages: dev: true optional: true + /node-gyp-build/4.3.0: + resolution: {integrity: sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==} + hasBin: true + dev: true + optional: true + + /node-gyp-build/4.4.0: + resolution: {integrity: sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==} + hasBin: true + dev: true + /node-gyp-build/4.8.0: resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} hasBin: true @@ -5761,6 +6837,11 @@ packages: engines: {node: '>=8'} dev: true + /nofilter/3.1.0: + resolution: {integrity: sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==} + engines: {node: '>=12.19'} + dev: true + /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: @@ -5826,7 +6907,7 @@ packages: resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -5836,18 +6917,18 @@ packages: resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /object.groupby/1.0.2: resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} dependencies: array.prototype.filter: 1.0.3 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 es-errors: 1.3.0 dev: true @@ -5855,9 +6936,13 @@ packages: resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 + dev: true + + /obliterator/2.0.4: + resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true /oboe/2.1.5: @@ -5885,7 +6970,6 @@ packages: dependencies: mimic-fn: 2.1.0 dev: true - optional: true /optionator/0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -5906,8 +6990,13 @@ packages: /os-locale/1.4.0: resolution: {integrity: sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==} engines: {node: '>=0.10.0'} - dependencies: - lcid: 1.0.0 + dependencies: + lcid: 1.0.0 + dev: true + + /os-tmpdir/1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} dev: true /p-cancelable/2.1.1: @@ -5954,7 +7043,6 @@ packages: dependencies: p-limit: 2.3.0 dev: true - optional: true /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} @@ -5970,6 +7058,13 @@ packages: p-limit: 3.1.0 dev: true + /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: resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} engines: {node: '>=4'} @@ -5987,7 +7082,7 @@ packages: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.5.4 + semver: 7.6.0 dev: true /param-case/2.1.1: @@ -6028,6 +7123,11 @@ packages: lines-and-columns: 1.2.4 dev: true + /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: resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} dependencies: @@ -6155,7 +7255,6 @@ packages: dependencies: find-up: 3.0.0 dev: true - optional: true /pluralize/8.0.0: resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} @@ -6363,6 +7462,20 @@ packages: engines: {node: '>= 0.8.0'} dev: true + /prettier-plugin-solidity/1.3.1_prettier@2.8.8: + resolution: {integrity: sha512-MN4OP5I2gHAzHZG1wcuJl0FsLS3c4Cc5494bbg+6oQWBPuEamjwDvmGfFMZ6NFzsh3Efd9UUxeT7ImgjNH4ozA==} + engines: {node: '>=16'} + requiresBuild: true + peerDependencies: + prettier: '>=2.3.0' + dependencies: + '@solidity-parser/parser': 0.17.0 + prettier: 2.8.8 + semver: 7.6.0 + solidity-comments-extractor: 0.0.8 + dev: true + optional: true + /prettier/2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} engines: {node: '>=10.13.0'} @@ -6386,6 +7499,14 @@ packages: asap: 2.0.6 dev: true + /proper-lockfile/4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + dev: false + /proto-list/1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true @@ -6436,14 +7557,14 @@ packages: resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.5 dev: true /qs/6.11.2: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.5 dev: true /qs/6.5.3: @@ -6460,6 +7581,12 @@ packages: strict-uri-encode: 1.1.0 dev: true + /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: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} dev: true @@ -6594,12 +7721,13 @@ packages: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true - /regexp.prototype.flags/1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags/1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 + es-errors: 1.3.0 set-function-name: 2.0.1 dev: true @@ -6700,6 +7828,14 @@ packages: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} dev: true + /resolve-dir/1.0.1: + resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==} + engines: {node: '>=0.10.0'} + dependencies: + expand-tilde: 2.0.2 + global-modules: 1.0.0 + dev: true + /resolve-from/3.0.0: resolution: {integrity: sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==} engines: {node: '>=4'} @@ -6714,6 +7850,12 @@ packages: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} dev: true + /resolve/1.17.0: + resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} + dependencies: + path-parse: 1.0.7 + dev: true + /resolve/1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -6743,7 +7885,11 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 dev: true - optional: true + + /retry/0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + dev: false /retry/0.13.1: resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} @@ -6760,7 +7906,7 @@ packages: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true dependencies: - glob: 7.2.3 + glob: 7.2.0 dev: true /rimraf/3.0.2: @@ -6789,18 +7935,28 @@ packages: bn.js: 5.2.1 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: 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: resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -6813,12 +7969,12 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test/1.0.2: - resolution: {integrity: sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==} + /safe-regex-test/1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -6844,6 +8000,10 @@ packages: node-gyp-build: 4.8.0 dev: true + /seedrandom/3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + dev: true + /semver/5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -6854,8 +8014,8 @@ packages: hasBin: true dev: true - /semver/7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver/7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -6925,24 +8085,25 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-length/1.2.0: - resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} + /set-function-length/1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.3 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /set-function-name/2.0.1: resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 dev: true /setimmediate/1.0.4: @@ -7000,18 +8161,18 @@ packages: engines: {node: '>=8'} dev: true - /side-channel/1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel/1.0.5: + resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 object-inspect: 1.13.1 dev: true /signal-exit/3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true - optional: true /simple-concat/1.0.1: resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} @@ -7051,6 +8212,40 @@ 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'} + hasBin: true + dependencies: + command-exists: 1.2.9 + commander: 3.0.2 + follow-redirects: 1.15.5 + fs-extra: 0.30.0 + 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==} + engines: {node: '>=10.0.0'} + hasBin: true + dependencies: + command-exists: 1.2.9 + commander: 8.3.0 + follow-redirects: 1.15.5 + js-sha3: 0.8.0 + memorystream: 0.3.1 + semver: 5.7.2 + tmp: 0.0.33 + transitivePeerDependencies: + - debug + dev: true + /solhint/4.1.1_typescript@5.3.3: resolution: {integrity: sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw==} hasBin: true @@ -7069,7 +8264,7 @@ packages: latest-version: 7.0.0 lodash: 4.17.21 pluralize: 8.0.0 - semver: 7.5.4 + semver: 7.6.0 strip-ansi: 6.0.1 table: 6.8.1 text-table: 0.2.0 @@ -7079,6 +8274,23 @@ packages: - typescript dev: true + /solidity-comments-extractor/0.0.8: + resolution: {integrity: sha512-htM7Vn6LhHreR+EglVMd2s+sZhcXAirB1Zlyrv5zBuTxieCvjfnRpd7iZk75m/u6NOlEyQ94C6TWbBn2cY7w8g==} + dev: true + optional: true + + /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: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /spark-md5/3.0.2: resolution: {integrity: sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==} dev: true @@ -7088,7 +8300,7 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true /spdx-exceptions/2.4.0: @@ -7099,11 +8311,11 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.4.0 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids/3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /spdx-license-ids/3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true /sshpk/1.18.0: @@ -7122,6 +8334,13 @@ packages: tweetnacl: 0.14.5 dev: true + /stacktrace-parser/0.1.10: + resolution: {integrity: sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==} + engines: {node: '>=6'} + dependencies: + type-fest: 0.7.1 + dev: true + /statuses/2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} @@ -7162,25 +8381,25 @@ packages: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string.prototype.trimend/1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string.prototype.trimstart/1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.22.4 dev: true /string_decoder/0.10.31: @@ -7404,7 +8623,6 @@ packages: /tiny-typed-emitter/2.1.0: resolution: {integrity: sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==} dev: true - optional: true /title-case/2.1.1: resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} @@ -7413,6 +8631,13 @@ packages: upper-case: 1.1.3 dev: true + /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: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7469,6 +8694,24 @@ packages: - supports-color dev: true + /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: + '@truffle/resolver': 9.0.53 + axios: 0.26.1 + cli-logger: 0.5.40 + delay: 5.0.0 + querystring: 0.2.1 + tunnel: 0.0.6 + transitivePeerDependencies: + - bufferutil + - debug + - encoding + - supports-color + - utf-8-validate + dev: true + /truffle/5.11.5: resolution: {integrity: sha512-yCa2uWs5DmL0spuJUuIMtnVayRQrVuWLtcRXHMB0NLrtWDcRo7VM9RViveV4+oi9LdZ8VpFmmqHGm43LbzUxOA==} engines: {node: ^16.20 || ^18.16 || >=20} @@ -7499,6 +8742,10 @@ packages: strip-bom: 3.0.0 dev: true + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + /tslib/2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: true @@ -7519,10 +8766,23 @@ packages: safe-buffer: 5.2.1 dev: true + /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: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + dev: true + /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: true + /tweetnacl/1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + dev: true + /type-check/0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7540,6 +8800,16 @@ packages: engines: {node: '>=10'} dev: true + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-fest/0.7.1: + resolution: {integrity: sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==} + engines: {node: '>=8'} + dev: true + /type-is/1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} @@ -7556,12 +8826,12 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true - /typed-array-buffer/1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer/1.0.1: + resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.3 + call-bind: 1.0.7 + es-errors: 1.3.0 is-typed-array: 1.1.13 dev: true @@ -7569,7 +8839,7 @@ packages: resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -7580,7 +8850,7 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 has-proto: 1.0.1 is-typed-array: 1.1.13 @@ -7589,7 +8859,7 @@ packages: /typed-array-length/1.0.4: resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 is-typed-array: 1.1.13 dev: true @@ -7633,7 +8903,7 @@ packages: /unbox-primitive/1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 @@ -7643,6 +8913,13 @@ packages: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true + /undici/5.28.3: + resolution: {integrity: sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA==} + engines: {node: '>=14.0'} + dependencies: + '@fastify/busboy': 2.1.0 + dev: true + /universalify/0.1.2: resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} engines: {node: '>= 4.0.0'} @@ -7658,7 +8935,6 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} dev: true - optional: true /unpipe/1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} @@ -7756,7 +9032,6 @@ packages: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: true - optional: true /uuid/9.0.1: resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} @@ -7819,8 +9094,8 @@ packages: - utf-8-validate dev: true - /web3-bzz/1.10.3: - resolution: {integrity: sha512-XDIRsTwekdBXtFytMpHBuun4cK4x0ZMIDXSoo1UVYp+oMyZj07c7gf7tNQY5qZ/sN+CJIas4ilhN25VJcjSijQ==} + /web3-bzz/1.10.4: + resolution: {integrity: sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw==} engines: {node: '>=8.0.0'} requiresBuild: true dependencies: @@ -7841,12 +9116,12 @@ packages: web3-utils: 1.10.0 dev: true - /web3-core-helpers/1.10.3: - resolution: {integrity: sha512-Yv7dQC3B9ipOc5sWm3VAz1ys70Izfzb8n9rSiQYIPjpqtJM+3V4EeK6ghzNR6CO2es0+Yu9CtCkw0h8gQhrTxA==} + /web3-core-helpers/1.10.4: + resolution: {integrity: sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g==} engines: {node: '>=8.0.0'} dependencies: - web3-eth-iban: 1.10.3 - web3-utils: 1.10.3 + web3-eth-iban: 1.10.4 + web3-utils: 1.10.4 dev: true /web3-core-method/1.10.0: @@ -7860,15 +9135,15 @@ packages: web3-utils: 1.10.0 dev: true - /web3-core-method/1.10.3: - resolution: {integrity: sha512-VZ/Dmml4NBmb0ep5PTSg9oqKoBtG0/YoMPei/bq/tUdlhB2dMB79sbeJPwx592uaV0Vpk7VltrrrBv5hTM1y4Q==} + /web3-core-method/1.10.4: + resolution: {integrity: sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA==} engines: {node: '>=8.0.0'} dependencies: '@ethersproject/transactions': 5.7.0 - web3-core-helpers: 1.10.3 - web3-core-promievent: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-utils: 1.10.3 + web3-core-helpers: 1.10.4 + web3-core-promievent: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-utils: 1.10.4 dev: true /web3-core-promievent/1.10.0: @@ -7878,8 +9153,8 @@ packages: eventemitter3: 4.0.4 dev: true - /web3-core-promievent/1.10.3: - resolution: {integrity: sha512-HgjY+TkuLm5uTwUtaAfkTgRx/NzMxvVradCi02gy17NxDVdg/p6svBHcp037vcNpkuGeFznFJgULP+s2hdVgUQ==} + /web3-core-promievent/1.10.4: + resolution: {integrity: sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.4 @@ -7899,15 +9174,15 @@ packages: - supports-color dev: true - /web3-core-requestmanager/1.10.3: - resolution: {integrity: sha512-VT9sKJfgM2yBOIxOXeXiDuFMP4pxzF6FT+y8KTLqhDFHkbG3XRe42Vm97mB/IvLQCJOmokEjl3ps8yP1kbggyw==} + /web3-core-requestmanager/1.10.4: + resolution: {integrity: sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg==} engines: {node: '>=8.0.0'} dependencies: util: 0.12.5 - web3-core-helpers: 1.10.3 - web3-providers-http: 1.10.3 - web3-providers-ipc: 1.10.3 - web3-providers-ws: 1.10.3 + web3-core-helpers: 1.10.4 + web3-providers-http: 1.10.4 + web3-providers-ipc: 1.10.4 + web3-providers-ws: 1.10.4 transitivePeerDependencies: - encoding - supports-color @@ -7921,12 +9196,12 @@ packages: web3-core-helpers: 1.10.0 dev: true - /web3-core-subscriptions/1.10.3: - resolution: {integrity: sha512-KW0Mc8sgn70WadZu7RjQ4H5sNDJ5Lx8JMI3BWos+f2rW0foegOCyWhRu33W1s6ntXnqeBUw5rRCXZRlA3z+HNA==} + /web3-core-subscriptions/1.10.4: + resolution: {integrity: sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.4 - web3-core-helpers: 1.10.3 + web3-core-helpers: 1.10.4 dev: true /web3-core/1.10.0: @@ -7945,49 +9220,22 @@ packages: - supports-color dev: true - /web3-core/1.10.3: - resolution: {integrity: sha512-Vbk0/vUNZxJlz3RFjAhNNt7qTpX8yE3dn3uFxfX5OHbuon5u65YEOd3civ/aQNW745N0vGUlHFNxxmn+sG9DIw==} + /web3-core/1.10.4: + resolution: {integrity: sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww==} engines: {node: '>=8.0.0'} dependencies: '@types/bn.js': 5.1.5 '@types/node': 12.20.55 bignumber.js: 9.1.2 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-requestmanager: 1.10.3 - web3-utils: 1.10.3 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-requestmanager: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-core/4.3.2: - resolution: {integrity: sha512-uIMVd/j4BgOnwfpY8ZT+QKubOyM4xohEhFZXz9xB8wimXWMMlYVlIK/TbfHqFolS9uOerdSGhsMbcK9lETae8g==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-errors: 1.1.4 - web3-eth-accounts: 4.1.1 - web3-eth-iban: 4.0.7 - web3-providers-http: 4.1.0 - web3-providers-ws: 4.0.7 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - optionalDependencies: - web3-providers-ipc: 4.0.7 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - - /web3-errors/1.1.4: - resolution: {integrity: sha512-WahtszSqILez+83AxGecVroyZsMuuRT+KmQp4Si5P4Rnqbczno1k748PCrZTS1J4UCPmXMG2/Vt+0Bz2zwXkwQ==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-types: 1.3.1 - dev: true - /web3-eth-abi/1.10.0: resolution: {integrity: sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg==} engines: {node: '>=8.0.0'} @@ -7996,26 +9244,12 @@ packages: web3-utils: 1.10.0 dev: true - /web3-eth-abi/1.10.3: - resolution: {integrity: sha512-O8EvV67uhq0OiCMekqYsDtb6FzfYzMXT7VMHowF8HV6qLZXCGTdB/NH4nJrEh2mFtEwVdS6AmLFJAQd2kVyoMQ==} + /web3-eth-abi/1.10.4: + resolution: {integrity: sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ==} engines: {node: '>=8.0.0'} dependencies: '@ethersproject/abi': 5.7.0 - web3-utils: 1.10.3 - dev: true - - /web3-eth-abi/4.2.0_typescript@5.3.3: - resolution: {integrity: sha512-x7dUCmk6th+5N63s5kUusoNtsDJKUUQgl9+jECvGTBOTiyHe/V6aOY0120FUjaAGaapOnR7BImQdhqHv6yT2YQ==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - abitype: 0.7.1_typescript@5.3.3 - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - typescript - - zod + web3-utils: 1.10.4 dev: true /web3-eth-accounts/1.10.0: @@ -8037,8 +9271,8 @@ packages: - supports-color dev: true - /web3-eth-accounts/1.10.3: - resolution: {integrity: sha512-8MipGgwusDVgn7NwKOmpeo3gxzzd+SmwcWeBdpXknuyDiZSQy9tXe+E9LeFGrmys/8mLLYP79n3jSbiTyv+6pQ==} + /web3-eth-accounts/1.10.4: + resolution: {integrity: sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg==} engines: {node: '>=8.0.0'} dependencies: '@ethereumjs/common': 2.6.5 @@ -8047,28 +9281,15 @@ packages: eth-lib: 0.2.8 scrypt-js: 3.0.1 uuid: 9.0.1 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-eth-accounts/4.1.1: - resolution: {integrity: sha512-9JqhRi1YhO1hQOEmmBHgEGsME/B1FHMxpA/AK3vhpvQ8QeP6KbJW+cForTLfPpUbkmPxnRunG4PNNaETNlZfrA==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - '@ethereumjs/rlp': 4.0.1 - crc-32: 1.2.2 - ethereum-cryptography: 2.1.3 - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - dev: true - /web3-eth-contract/1.10.0: resolution: {integrity: sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w==} engines: {node: '>=8.0.0'} @@ -8086,42 +9307,23 @@ packages: - supports-color dev: true - /web3-eth-contract/1.10.3: - resolution: {integrity: sha512-Y2CW61dCCyY4IoUMD4JsEQWrILX4FJWDWC/Txx/pr3K/+fGsBGvS9kWQN5EsVXOp4g7HoFOfVh9Lf7BmVVSRmg==} + /web3-eth-contract/1.10.4: + resolution: {integrity: sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A==} engines: {node: '>=8.0.0'} dependencies: '@types/bn.js': 5.1.5 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-promievent: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-eth-abi: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-promievent: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-eth-abi: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-eth-contract/4.2.0_typescript@5.3.3: - resolution: {integrity: sha512-K7bUypsomTs8/Oa0Lgvq5plsSB5afgKJ79NMuXxvC5jfV+AxNrQyKcr5Vd5yEGNqrdQuIPduGQa8DpuY+rMe1g==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-core: 4.3.2 - web3-errors: 1.1.4 - web3-eth: 4.4.0_typescript@5.3.3 - web3-eth-abi: 4.2.0_typescript@5.3.3 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: true - /web3-eth-ens/1.10.0: resolution: {integrity: sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g==} engines: {node: '>=8.0.0'} @@ -8139,44 +9341,23 @@ packages: - supports-color dev: true - /web3-eth-ens/1.10.3: - resolution: {integrity: sha512-hR+odRDXGqKemw1GFniKBEXpjYwLgttTES+bc7BfTeoUyUZXbyDHe5ifC+h+vpzxh4oS0TnfcIoarK0Z9tFSiQ==} + /web3-eth-ens/1.10.4: + resolution: {integrity: sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg==} engines: {node: '>=8.0.0'} dependencies: content-hash: 2.5.2 eth-ens-namehash: 2.0.8 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-promievent: 1.10.3 - web3-eth-abi: 1.10.3 - web3-eth-contract: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-promievent: 1.10.4 + web3-eth-abi: 1.10.4 + web3-eth-contract: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-eth-ens/4.0.8_typescript@5.3.3: - resolution: {integrity: sha512-nj0JfeD45BbzVJcVYpUJnSo8iwDcY9CQ7CZhhIVVOFjvpMAPw0zEwjTvZEIQyCW61OoDG9xcBzwxe2tZoYhMRw==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - '@adraffy/ens-normalize': 1.10.1 - web3-core: 4.3.2 - web3-errors: 1.1.4 - web3-eth: 4.4.0_typescript@5.3.3 - web3-eth-contract: 4.2.0_typescript@5.3.3 - web3-net: 4.0.7 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: true - /web3-eth-iban/1.10.0: resolution: {integrity: sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg==} engines: {node: '>=8.0.0'} @@ -8185,22 +9366,12 @@ packages: web3-utils: 1.10.0 dev: true - /web3-eth-iban/1.10.3: - resolution: {integrity: sha512-ZCfOjYKAjaX2TGI8uif5ah+J3BYFuo+47JOIV1RIz2l7kD9VfnxvRH5UiQDRyMALQC7KFd2hUqIEtHklapNyKA==} + /web3-eth-iban/1.10.4: + resolution: {integrity: sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw==} engines: {node: '>=8.0.0'} dependencies: bn.js: 5.2.1 - web3-utils: 1.10.3 - dev: true - - /web3-eth-iban/4.0.7: - resolution: {integrity: sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 + web3-utils: 1.10.4 dev: true /web3-eth-personal/1.10.0: @@ -8218,39 +9389,21 @@ packages: - supports-color dev: true - /web3-eth-personal/1.10.3: - resolution: {integrity: sha512-avrQ6yWdADIvuNQcFZXmGLCEzulQa76hUOuVywN7O3cklB4nFc/Gp3yTvD3bOAaE7DhjLQfhUTCzXL7WMxVTsw==} + /web3-eth-personal/1.10.4: + resolution: {integrity: sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w==} engines: {node: '>=8.0.0'} dependencies: '@types/node': 12.20.55 - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-net: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-net: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-eth-personal/4.0.8_typescript@5.3.3: - resolution: {integrity: sha512-sXeyLKJ7ddQdMxz1BZkAwImjqh7OmKxhXoBNF3isDmD4QDpMIwv/t237S3q4Z0sZQamPa/pHebJRWVuvP8jZdw==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-core: 4.3.2 - web3-eth: 4.4.0_typescript@5.3.3 - web3-rpc-methods: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: true - /web3-eth/1.10.0: resolution: {integrity: sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA==} engines: {node: '>=8.0.0'} @@ -8272,50 +9425,27 @@ packages: - supports-color dev: true - /web3-eth/1.10.3: - resolution: {integrity: sha512-Uk1U2qGiif2mIG8iKu23/EQJ2ksB1BQXy3wF3RvFuyxt8Ft9OEpmGlO7wOtAyJdoKzD5vcul19bJpPcWSAYZhA==} + /web3-eth/1.10.4: + resolution: {integrity: sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA==} engines: {node: '>=8.0.0'} dependencies: - web3-core: 1.10.3 - web3-core-helpers: 1.10.3 - web3-core-method: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-eth-abi: 1.10.3 - web3-eth-accounts: 1.10.3 - web3-eth-contract: 1.10.3 - web3-eth-ens: 1.10.3 - web3-eth-iban: 1.10.3 - web3-eth-personal: 1.10.3 - web3-net: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-helpers: 1.10.4 + web3-core-method: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-eth-abi: 1.10.4 + web3-eth-accounts: 1.10.4 + web3-eth-contract: 1.10.4 + web3-eth-ens: 1.10.4 + web3-eth-iban: 1.10.4 + web3-eth-personal: 1.10.4 + web3-net: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-eth/4.4.0_typescript@5.3.3: - resolution: {integrity: sha512-HswKdzF44wUrciRAtEJaml9O7rDYDxElHmFs+27WcO3nel2zku+n0xs4e2ZAehfrCZ+05/y7TgnOZnaDU8Fb/A==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - setimmediate: 1.0.5 - web3-core: 4.3.2 - web3-errors: 1.1.4 - web3-eth-abi: 4.2.0_typescript@5.3.3 - web3-eth-accounts: 4.1.1 - web3-net: 4.0.7 - web3-providers-ws: 4.0.7 - web3-rpc-methods: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: true - /web3-net/1.10.0: resolution: {integrity: sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA==} engines: {node: '>=8.0.0'} @@ -8328,32 +9458,18 @@ packages: - supports-color dev: true - /web3-net/1.10.3: - resolution: {integrity: sha512-IoSr33235qVoI1vtKssPUigJU9Fc/Ph0T9CgRi15sx+itysmvtlmXMNoyd6Xrgm9LuM4CIhxz7yDzH93B79IFg==} + /web3-net/1.10.4: + resolution: {integrity: sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow==} engines: {node: '>=8.0.0'} dependencies: - web3-core: 1.10.3 - web3-core-method: 1.10.3 - web3-utils: 1.10.3 + web3-core: 1.10.4 + web3-core-method: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-net/4.0.7: - resolution: {integrity: sha512-SzEaXFrBjY25iQGk5myaOfO9ZyfTwQEa4l4Ps4HDNVMibgZji3WPzpjq8zomVHMwi8bRp6VV7YS71eEsX7zLow==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-core: 4.3.2 - web3-rpc-methods: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - /web3-providers-http/1.10.0: resolution: {integrity: sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA==} engines: {node: '>=8.0.0'} @@ -8366,26 +9482,14 @@ packages: - encoding dev: true - /web3-providers-http/1.10.3: - resolution: {integrity: sha512-6dAgsHR3MxJ0Qyu3QLFlQEelTapVfWNTu5F45FYh8t7Y03T1/o+YAkVxsbY5AdmD+y5bXG/XPJ4q8tjL6MgZHw==} + /web3-providers-http/1.10.4: + resolution: {integrity: sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ==} engines: {node: '>=8.0.0'} dependencies: abortcontroller-polyfill: 1.7.5 cross-fetch: 4.0.0 es6-promise: 4.2.8 - web3-core-helpers: 1.10.3 - transitivePeerDependencies: - - encoding - dev: true - - /web3-providers-http/4.1.0: - resolution: {integrity: sha512-6qRUGAhJfVQM41E5t+re5IHYmb5hSaLc02BE2MaRQsz2xKA6RjmHpOA5h/+ojJxEpI9NI2CrfDKOAgtJfoUJQg==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - cross-fetch: 4.0.0 - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 + web3-core-helpers: 1.10.4 transitivePeerDependencies: - encoding dev: true @@ -8398,24 +9502,13 @@ packages: web3-core-helpers: 1.10.0 dev: true - /web3-providers-ipc/1.10.3: - resolution: {integrity: sha512-vP5WIGT8FLnGRfswTxNs9rMfS1vCbMezj/zHbBe/zB9GauBRTYVrUo2H/hVrhLg8Ut7AbsKZ+tCJ4mAwpKi2hA==} + /web3-providers-ipc/1.10.4: + resolution: {integrity: sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw==} engines: {node: '>=8.0.0'} dependencies: oboe: 2.1.5 - web3-core-helpers: 1.10.3 - dev: true - - /web3-providers-ipc/4.0.7: - resolution: {integrity: sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==} - engines: {node: '>=14', npm: '>=6.12.0'} - requiresBuild: true - dependencies: - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 + web3-core-helpers: 1.10.4 dev: true - optional: true /web3-providers-ws/1.10.0: resolution: {integrity: sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ==} @@ -8428,45 +9521,17 @@ packages: - supports-color dev: true - /web3-providers-ws/1.10.3: - resolution: {integrity: sha512-/filBXRl48INxsh6AuCcsy4v5ndnTZ/p6bl67kmO9aK1wffv7CT++DrtclDtVMeDGCgB3van+hEf9xTAVXur7Q==} + /web3-providers-ws/1.10.4: + resolution: {integrity: sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA==} engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.4 - web3-core-helpers: 1.10.3 + web3-core-helpers: 1.10.4 websocket: 1.0.34 transitivePeerDependencies: - supports-color dev: true - /web3-providers-ws/4.0.7: - resolution: {integrity: sha512-n4Dal9/rQWjS7d6LjyEPM2R458V8blRm0eLJupDEJOOIBhGYlxw5/4FthZZ/cqB7y/sLVi7K09DdYx2MeRtU5w==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - '@types/ws': 8.5.3 - isomorphic-ws: 5.0.0_ws@8.16.0 - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - ws: 8.16.0 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - dev: true - - /web3-rpc-methods/1.1.4: - resolution: {integrity: sha512-LTFNg4LFaeU8K9ecuT8fHDp/LOXyxCneeZjCrRYIW1u82Ly52SrY55FIzMIISGoG/iT5Wh7UiHOB3CQsWLBmbQ==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - web3-core: 4.3.2 - web3-types: 1.3.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - utf-8-validate - dev: true - /web3-shh/1.10.0: resolution: {integrity: sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg==} engines: {node: '>=8.0.0'} @@ -8481,25 +9546,20 @@ packages: - supports-color dev: true - /web3-shh/1.10.3: - resolution: {integrity: sha512-cAZ60CPvs9azdwMSQ/PSUdyV4PEtaW5edAZhu3rCXf6XxQRliBboic+AvwUvB6j3eswY50VGa5FygfVmJ1JVng==} + /web3-shh/1.10.4: + resolution: {integrity: sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw==} engines: {node: '>=8.0.0'} requiresBuild: true dependencies: - web3-core: 1.10.3 - web3-core-method: 1.10.3 - web3-core-subscriptions: 1.10.3 - web3-net: 1.10.3 + web3-core: 1.10.4 + web3-core-method: 1.10.4 + web3-core-subscriptions: 1.10.4 + web3-net: 1.10.4 transitivePeerDependencies: - encoding - supports-color dev: true - /web3-types/1.3.1: - resolution: {integrity: sha512-8fXi7h/t95VKRtgU4sxprLPZpsTh3jYDfSghshIDBgUD/OoGe5S+syP24SUzBZYllZ/L+hMr2gdp/0bGJa8pYQ==} - engines: {node: '>=14', npm: '>=6.12.0'} - dev: true - /web3-utils/1.10.0: resolution: {integrity: sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg==} engines: {node: '>=8.0.0'} @@ -8513,8 +9573,8 @@ packages: utf8: 3.0.0 dev: true - /web3-utils/1.10.3: - resolution: {integrity: sha512-OqcUrEE16fDBbGoQtZXWdavsPzbGIDc5v3VrRTZ0XrIpefC/viZ1ZU9bGEemazyS0catk/3rkOOxpzTfY+XsyQ==} + /web3-utils/1.10.4: + resolution: {integrity: sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A==} engines: {node: '>=8.0.0'} dependencies: '@ethereumjs/util': 8.1.0 @@ -8527,27 +9587,6 @@ packages: utf8: 3.0.0 dev: true - /web3-utils/4.1.1: - resolution: {integrity: sha512-5AOmLKH6QuwHunLCNdVFlPSDE+T88bJYRQP+HWYoKNbI4STALCYQiJvj7LXE+Ed6cPfqANaK/LwKNbMPLCPFwA==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - ethereum-cryptography: 2.1.3 - web3-errors: 1.1.4 - web3-types: 1.3.1 - web3-validator: 2.0.4 - dev: true - - /web3-validator/2.0.4: - resolution: {integrity: sha512-qRxVePwdW+SByOmTpDZFWHIUAa7PswvxNszrOua6BoGqAhERo5oJZBN+EbWtK/+O+ApNxt5FR3nCPmiZldiOQA==} - engines: {node: '>=14', npm: '>=6.12.0'} - dependencies: - ethereum-cryptography: 2.1.3 - util: 0.12.5 - web3-errors: 1.1.4 - web3-types: 1.3.1 - zod: 3.22.4 - dev: true - /web3/1.10.0: resolution: {integrity: sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng==} engines: {node: '>=8.0.0'} @@ -8567,18 +9606,18 @@ packages: - utf-8-validate dev: true - /web3/1.10.3: - resolution: {integrity: sha512-DgUdOOqC/gTqW+VQl1EdPxrVRPB66xVNtuZ5KD4adVBtko87hkgM8BTZ0lZ8IbUfnQk6DyjcDujMiH3oszllAw==} + /web3/1.10.4: + resolution: {integrity: sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA==} engines: {node: '>=8.0.0'} requiresBuild: true dependencies: - web3-bzz: 1.10.3 - web3-core: 1.10.3 - web3-eth: 1.10.3 - web3-eth-personal: 1.10.3 - web3-net: 1.10.3 - web3-shh: 1.10.3 - web3-utils: 1.10.3 + web3-bzz: 1.10.4 + web3-core: 1.10.4 + web3-eth: 1.10.4 + web3-eth-personal: 1.10.4 + web3-net: 1.10.4 + web3-shh: 1.10.4 + web3-utils: 1.10.4 transitivePeerDependencies: - bufferutil - encoding @@ -8586,34 +9625,6 @@ packages: - utf-8-validate dev: true - /web3/4.4.0_typescript@5.3.3: - resolution: {integrity: sha512-WcFA3RgE+cyM96MHLPs5Ec155nkYQuwhjk3JIhxcy6J1QrZK2zvKGzTQCCYHe3JhraduNTMbWy+EeNNGGji9+Q==} - engines: {node: '>=14.0.0', npm: '>=6.12.0'} - dependencies: - web3-core: 4.3.2 - web3-errors: 1.1.4 - web3-eth: 4.4.0_typescript@5.3.3 - web3-eth-abi: 4.2.0_typescript@5.3.3 - web3-eth-accounts: 4.1.1 - web3-eth-contract: 4.2.0_typescript@5.3.3 - web3-eth-ens: 4.0.8_typescript@5.3.3 - web3-eth-iban: 4.0.7 - web3-eth-personal: 4.0.8_typescript@5.3.3 - web3-net: 4.0.7 - web3-providers-http: 4.1.0 - web3-providers-ws: 4.0.7 - web3-rpc-methods: 1.1.4 - web3-types: 1.3.1 - web3-utils: 4.1.1 - web3-validator: 2.0.4 - transitivePeerDependencies: - - bufferutil - - encoding - - typescript - - utf-8-validate - - zod - dev: true - /webidl-conversions/3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} dev: true @@ -8664,12 +9675,19 @@ packages: engines: {node: '>= 0.4'} dependencies: available-typed-arrays: 1.0.6 - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 dev: true + /which/1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8678,6 +9696,13 @@ packages: isexe: 2.0.0 dev: true + /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: resolution: {integrity: sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==} engines: {node: '>= 0.10.0'} @@ -8757,7 +9782,6 @@ packages: utf-8-validate: optional: true dev: true - optional: true /ws/8.13.0_2adebc2xdjqbcvbjxkodkhadp4: resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} @@ -8775,19 +9799,6 @@ packages: utf-8-validate: 6.0.3 dev: true - /ws/8.16.0: - resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - /xhr-request-promise/0.1.3: resolution: {integrity: sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg==} dependencies: @@ -8884,7 +9895,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -8915,7 +9926,3 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - - /zod/3.22.4: - resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} - dev: true diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 7a7920b39..000000000 --- a/yarn.lock +++ /dev/null @@ -1,9249 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aashutoshrathi/word-wrap@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" - integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== - -"@apollo/protobufjs@1.2.6": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.6.tgz#d601e65211e06ae1432bf5993a1a0105f2862f27" - integrity sha512-Wqo1oSHNUj/jxmsVp4iR3I480p6qdqHikn38lKrFhfzcDJ7lwd7Ck7cHRl4JE81tWNArl77xhnG/OkZhxKBYOw== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.0" - "@types/node" "^10.1.0" - long "^4.0.0" - -"@apollo/protobufjs@1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@apollo/protobufjs/-/protobufjs-1.2.7.tgz#3a8675512817e4a046a897e5f4f16415f16a7d8a" - integrity sha512-Lahx5zntHPZia35myYDBRuF58tlwPskwHc5CWBZC/4bMKB6siTBWwtMrkqXcsNwQiFSzSx5hKdRPUmemrEp3Gg== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.0" - long "^4.0.0" - -"@apollo/usage-reporting-protobuf@^4.0.0": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@apollo/usage-reporting-protobuf/-/usage-reporting-protobuf-4.1.1.tgz#407c3d18c7fbed7a264f3b9a3812620b93499de1" - integrity sha512-u40dIUePHaSKVshcedO7Wp+mPiZsaU6xjv9J+VyxpoU/zL6Jle+9zWeG98tr/+SZ0nZ4OXhrbb8SNr0rAPpIDA== - dependencies: - "@apollo/protobufjs" "1.2.7" - -"@apollo/utils.dropunuseddefinitions@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.dropunuseddefinitions/-/utils.dropunuseddefinitions-1.1.0.tgz#02b04006442eaf037f4c4624146b12775d70d929" - integrity sha512-jU1XjMr6ec9pPoL+BFWzEPW7VHHulVdGKMkPAMiCigpVIT11VmCbnij0bWob8uS3ODJ65tZLYKAh/55vLw2rbg== - -"@apollo/utils.keyvaluecache@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@apollo/utils.keyvaluecache/-/utils.keyvaluecache-1.0.2.tgz#2bfe358c4d82f3a0950518451996758c52613f57" - integrity sha512-p7PVdLPMnPzmXSQVEsy27cYEjVON+SH/Wb7COyW3rQN8+wJgT1nv9jZouYtztWW8ZgTkii5T6tC9qfoDREd4mg== - dependencies: - "@apollo/utils.logger" "^1.0.0" - lru-cache "7.10.1 - 7.13.1" - -"@apollo/utils.logger@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@apollo/utils.logger/-/utils.logger-1.0.1.tgz#aea0d1bb7ceb237f506c6bbf38f10a555b99a695" - integrity sha512-XdlzoY7fYNK4OIcvMD2G94RoFZbzTQaNP0jozmqqMudmaGo2I/2Jx71xlDJ801mWA/mbYRihyaw6KJii7k5RVA== - -"@apollo/utils.printwithreducedwhitespace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.printwithreducedwhitespace/-/utils.printwithreducedwhitespace-1.1.0.tgz#c466299a4766eef8577a2a64c8f27712e8bd7e30" - integrity sha512-GfFSkAv3n1toDZ4V6u2d7L4xMwLA+lv+6hqXicMN9KELSJ9yy9RzuEXaX73c/Ry+GzRsBy/fdSUGayGqdHfT2Q== - -"@apollo/utils.removealiases@1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.removealiases/-/utils.removealiases-1.0.0.tgz#75f6d83098af1fcae2d3beb4f515ad4a8452a8c1" - integrity sha512-6cM8sEOJW2LaGjL/0vHV0GtRaSekrPQR4DiywaApQlL9EdROASZU5PsQibe2MWeZCOhNrPRuHh4wDMwPsWTn8A== - -"@apollo/utils.sortast@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.sortast/-/utils.sortast-1.1.0.tgz#93218c7008daf3e2a0725196085a33f5aab5ad07" - integrity sha512-VPlTsmUnOwzPK5yGZENN069y6uUHgeiSlpEhRnLFYwYNoJHsuJq2vXVwIaSmts015WTPa2fpz1inkLYByeuRQA== - dependencies: - lodash.sortby "^4.7.0" - -"@apollo/utils.stripsensitiveliterals@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@apollo/utils.stripsensitiveliterals/-/utils.stripsensitiveliterals-1.2.0.tgz#4920651f36beee8e260e12031a0c5863ad0c7b28" - integrity sha512-E41rDUzkz/cdikM5147d8nfCFVKovXxKBcjvLEQ7bjZm/cg9zEcXvS6vFY8ugTubI3fn6zoqo0CyU8zT+BGP9w== - -"@apollo/utils.usagereporting@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@apollo/utils.usagereporting/-/utils.usagereporting-1.0.1.tgz#3c70b49e554771659576fe35381c7a4b321d27fd" - integrity sha512-6dk+0hZlnDbahDBB2mP/PZ5ybrtCJdLMbeNJD+TJpKyZmSY6bA3SjI8Cr2EM9QA+AdziywuWg+SgbWUF3/zQqQ== - dependencies: - "@apollo/usage-reporting-protobuf" "^4.0.0" - "@apollo/utils.dropunuseddefinitions" "^1.1.0" - "@apollo/utils.printwithreducedwhitespace" "^1.1.0" - "@apollo/utils.removealiases" "1.0.0" - "@apollo/utils.sortast" "^1.1.0" - "@apollo/utils.stripsensitiveliterals" "^1.2.0" - -"@apollographql/apollo-tools@^0.5.3": - version "0.5.4" - resolved "https://registry.yarnpkg.com/@apollographql/apollo-tools/-/apollo-tools-0.5.4.tgz#cb3998c6cf12e494b90c733f44dd9935e2d8196c" - integrity sha512-shM3q7rUbNyXVVRkQJQseXv6bnYM3BUma/eZhwXR4xsuM+bqWnJKvW7SAfRjP7LuSCocrexa5AXhjjawNHrIlw== - -"@apollographql/graphql-playground-html@1.6.29": - version "1.6.29" - resolved "https://registry.yarnpkg.com/@apollographql/graphql-playground-html/-/graphql-playground-html-1.6.29.tgz#a7a646614a255f62e10dcf64a7f68ead41dec453" - integrity sha512-xCcXpoz52rI4ksJSdOCxeOCn2DLocxwHf9dVT/Q90Pte1LX+LY+91SFtJF3KXVHH8kEin+g1KKCQPKBjZJfWNA== - dependencies: - xss "^1.0.8" - -"@babel/code-frame@^7.0.0": - version "7.23.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.23.5.tgz#9009b69a8c602293476ad598ff53e4562e15c244" - integrity sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA== - dependencies: - "@babel/highlight" "^7.23.4" - chalk "^2.4.2" - -"@babel/helper-validator-identifier@^7.22.20": - version "7.22.20" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" - integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== - -"@babel/highlight@^7.23.4": - version "7.23.4" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.23.4.tgz#edaadf4d8232e1a961432db785091207ead0621b" - integrity sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A== - dependencies: - "@babel/helper-validator-identifier" "^7.22.20" - chalk "^2.4.2" - js-tokens "^4.0.0" - -"@babel/runtime@^7.4.4", "@babel/runtime@^7.6.3": - version "7.23.9" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.9.tgz#47791a15e4603bb5f905bc0753801cf21d6345f7" - integrity sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw== - dependencies: - regenerator-runtime "^0.14.0" - -"@chainsafe/as-sha256@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@chainsafe/as-sha256/-/as-sha256-0.3.1.tgz#3639df0e1435cab03f4d9870cc3ac079e57a6fc9" - integrity sha512-hldFFYuf49ed7DAakWVXSJODuq3pzJEguD8tQ7h+sGkM18vja+OFoJI9krnGmgzyuZC2ETX0NOIcCTy31v2Mtg== - -"@chainsafe/persistent-merkle-tree@^0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.4.2.tgz#4c9ee80cc57cd3be7208d98c40014ad38f36f7ff" - integrity sha512-lLO3ihKPngXLTus/L7WHKaw9PnNJWizlOF1H9NNzHP6Xvh82vzg9F2bzkXhYIFshMZ2gTCEz8tq6STe7r5NDfQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/persistent-merkle-tree@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@chainsafe/persistent-merkle-tree/-/persistent-merkle-tree-0.5.0.tgz#2b4a62c9489a5739dedd197250d8d2f5427e9f63" - integrity sha512-l0V1b5clxA3iwQLXP40zYjyZYospQLZXzBVIhhr9kDg/1qHZfzzHw0jj4VPBijfYCArZDlPkRi1wZaV2POKeuw== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - -"@chainsafe/ssz@^0.10.0": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.10.2.tgz#c782929e1bb25fec66ba72e75934b31fd087579e" - integrity sha512-/NL3Lh8K+0q7A3LsiFq09YXS9fPE+ead2rr7vM2QK8PLzrNsw3uqrif9bpRX5UxgeRjM+vYi+boCM3+GM4ovXg== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.5.0" - -"@chainsafe/ssz@^0.9.2": - version "0.9.4" - resolved "https://registry.yarnpkg.com/@chainsafe/ssz/-/ssz-0.9.4.tgz#696a8db46d6975b600f8309ad3a12f7c0e310497" - integrity sha512-77Qtg2N1ayqs4Bg/wvnWfg5Bta7iy7IRh8XqXh7oNMeP2HBbBwx8m6yTpA8p0EHItWPEBkgZd5S5/LSlp3GXuQ== - dependencies: - "@chainsafe/as-sha256" "^0.3.1" - "@chainsafe/persistent-merkle-tree" "^0.4.2" - case "^1.6.3" - -"@ensdomains/address-encoder@^0.1.7": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" - integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== - dependencies: - bech32 "^1.1.3" - blakejs "^1.1.0" - bn.js "^4.11.8" - bs58 "^4.0.1" - crypto-addr-codec "^0.1.7" - nano-base32 "^1.0.1" - ripemd160 "^2.0.2" - -"@ensdomains/ens@0.4.5": - version "0.4.5" - resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.5.tgz#e0aebc005afdc066447c6e22feb4eda89a5edbfc" - integrity sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw== - dependencies: - bluebird "^3.5.2" - eth-ens-namehash "^2.0.8" - solc "^0.4.20" - testrpc "0.0.1" - web3-utils "^1.0.0-beta.31" - -"@ensdomains/ensjs@^2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.1.0.tgz#0a7296c1f3d735ef019320d863a7846a0760c460" - integrity sha512-GRbGPT8Z/OJMDuxs75U/jUNEC0tbL0aj7/L/QQznGYKm/tiasp+ndLOaoULy9kKJFC0TBByqfFliEHDgoLhyog== - dependencies: - "@babel/runtime" "^7.4.4" - "@ensdomains/address-encoder" "^0.1.7" - "@ensdomains/ens" "0.4.5" - "@ensdomains/resolver" "0.2.4" - content-hash "^2.5.2" - eth-ens-namehash "^2.0.8" - ethers "^5.0.13" - js-sha3 "^0.8.0" - -"@ensdomains/resolver@0.2.4": - version "0.2.4" - resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" - integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== - -"@eslint-community/eslint-utils@^4.1.2", "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== - dependencies: - eslint-visitor-keys "^3.3.0" - -"@eslint-community/regexpp@^4.6.0", "@eslint-community/regexpp@^4.6.1": - version "4.10.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.10.0.tgz#548f6de556857c8bb73bbee70c35dc82a2e74d63" - integrity sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA== - -"@eslint/eslintrc@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" - integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== - dependencies: - ajv "^6.12.4" - debug "^4.3.2" - espree "^9.6.0" - globals "^13.19.0" - ignore "^5.2.0" - import-fresh "^3.2.1" - js-yaml "^4.1.0" - minimatch "^3.1.2" - strip-json-comments "^3.1.1" - -"@eslint/js@8.56.0": - version "8.56.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.56.0.tgz#ef20350fec605a7f7035a01764731b2de0f3782b" - integrity sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A== - -"@ethereumjs/common@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.1" - -"@ethereumjs/common@2.6.5", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.4": - version "2.6.5" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.5.tgz#0a75a22a046272579d91919cb12d84f2756e8d30" - integrity sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA== - dependencies: - crc-32 "^1.2.0" - ethereumjs-util "^7.1.5" - -"@ethereumjs/rlp@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" - integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== - -"@ethereumjs/tx@3.3.2": - version "3.3.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.2.tgz#348d4624bf248aaab6c44fec2ae67265efe3db00" - integrity sha512-6AaJhwg4ucmwTvw/1qLaZUX5miWrwZ4nLOUsKyb/HtzS3BMw/CasKhdi1ims9mBKeK9sOJCH4qGKOBGyJCeeog== - dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.2" - -"@ethereumjs/tx@3.5.2": - version "3.5.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.5.2.tgz#197b9b6299582ad84f9527ca961466fce2296c1c" - integrity sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw== - dependencies: - "@ethereumjs/common" "^2.6.4" - ethereumjs-util "^7.1.5" - -"@ethereumjs/util@^8.1.0": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" - integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== - dependencies: - "@ethereumjs/rlp" "^4.0.1" - ethereum-cryptography "^2.0.0" - micro-ftch "^0.3.1" - -"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.6.3", "@ethersproject/abi@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" - integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" - integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - -"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" - integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" - integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - -"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" - integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - -"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" - integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - -"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" - integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - bn.js "^5.2.1" - -"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" - integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" - integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - -"@ethersproject/contracts@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" - integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - -"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" - integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" - integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" - integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== - dependencies: - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/pbkdf2" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - aes-js "3.0.0" - scrypt-js "3.0.1" - -"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" - integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - js-sha3 "0.8.0" - -"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" - integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== - -"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" - integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" - integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - -"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" - integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== - dependencies: - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/providers@5.7.2", "@ethersproject/providers@^5.7.1", "@ethersproject/providers@^5.7.2": - version "5.7.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" - integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/base64" "^5.7.0" - "@ethersproject/basex" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/networks" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/web" "^5.7.0" - bech32 "1.1.4" - ws "7.4.6" - -"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" - integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" - integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" - integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - hash.js "1.1.7" - -"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" - integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - bn.js "^5.2.1" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.7.0", "@ethersproject/solidity@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" - integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/sha2" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" - integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.6.2", "@ethersproject/transactions@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" - integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== - dependencies: - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/rlp" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - -"@ethersproject/units@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" - integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== - dependencies: - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - -"@ethersproject/wallet@5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" - integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== - dependencies: - "@ethersproject/abstract-provider" "^5.7.0" - "@ethersproject/abstract-signer" "^5.7.0" - "@ethersproject/address" "^5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/hdnode" "^5.7.0" - "@ethersproject/json-wallets" "^5.7.0" - "@ethersproject/keccak256" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/random" "^5.7.0" - "@ethersproject/signing-key" "^5.7.0" - "@ethersproject/transactions" "^5.7.0" - "@ethersproject/wordlists" "^5.7.0" - -"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": - version "5.7.1" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" - integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== - dependencies: - "@ethersproject/base64" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": - version "5.7.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" - integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== - dependencies: - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/hash" "^5.7.0" - "@ethersproject/logger" "^5.7.0" - "@ethersproject/properties" "^5.7.0" - "@ethersproject/strings" "^5.7.0" - -"@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== - -"@graphql-tools/batch-execute@8.5.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/batch-execute/-/batch-execute-8.5.1.tgz#fa3321d58c64041650be44250b1ebc3aab0ba7a9" - integrity sha512-hRVDduX0UDEneVyEWtc2nu5H2PxpfSfM/riUlgZvo/a/nG475uyehxR5cFGvTEPEQUKY3vGIlqvtRigzqTfCew== - dependencies: - "@graphql-tools/utils" "8.9.0" - dataloader "2.1.0" - tslib "^2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/delegate@^8.4.3": - version "8.8.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/delegate/-/delegate-8.8.1.tgz#0653a72f38947f38ab7917dfac50ebf6a6b883e9" - integrity sha512-NDcg3GEQmdEHlnF7QS8b4lM1PSF+DKeFcIlLEfZFBvVq84791UtJcDj8734sIHLukmyuAxXMfA1qLd2l4lZqzA== - dependencies: - "@graphql-tools/batch-execute" "8.5.1" - "@graphql-tools/schema" "8.5.1" - "@graphql-tools/utils" "8.9.0" - dataloader "2.1.0" - tslib "~2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/merge@8.3.1": - version "8.3.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.3.1.tgz#06121942ad28982a14635dbc87b5d488a041d722" - integrity sha512-BMm99mqdNZbEYeTPK3it9r9S6rsZsQKtlqJsSBknAclXq2pGEfOxjcIZi+kBSkHZKPKCRrYDd5vY0+rUmIHVLg== - dependencies: - "@graphql-tools/utils" "8.9.0" - tslib "^2.4.0" - -"@graphql-tools/merge@^8.4.1": - version "8.4.2" - resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-8.4.2.tgz#95778bbe26b635e8d2f60ce9856b388f11fe8288" - integrity sha512-XbrHAaj8yDuINph+sAfuq3QCZ/tKblrTLOpirK0+CAgNlZUCHs0Fa+xtMUURgwCVThLle1AF7svJCxFizygLsw== - dependencies: - "@graphql-tools/utils" "^9.2.1" - tslib "^2.4.0" - -"@graphql-tools/mock@^8.1.2": - version "8.7.20" - resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-8.7.20.tgz#c83ae0f1940d194a3982120c9c85f3ac6b4f7f20" - integrity sha512-ljcHSJWjC/ZyzpXd5cfNhPI7YljRVvabKHPzKjEs5ElxWu2cdlLGvyNYepApXDsM/OJG/2xuhGM+9GWu5gEAPQ== - dependencies: - "@graphql-tools/schema" "^9.0.18" - "@graphql-tools/utils" "^9.2.1" - fast-json-stable-stringify "^2.1.0" - tslib "^2.4.0" - -"@graphql-tools/schema@8.5.1", "@graphql-tools/schema@^8.0.0", "@graphql-tools/schema@^8.3.1": - version "8.5.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-8.5.1.tgz#c2f2ff1448380919a330312399c9471db2580b58" - integrity sha512-0Esilsh0P/qYcB5DKQpiKeQs/jevzIadNTaT0jeWklPMwNbT7yMX4EqZany7mbeRRlSRwMzNzL5olyFdffHBZg== - dependencies: - "@graphql-tools/merge" "8.3.1" - "@graphql-tools/utils" "8.9.0" - tslib "^2.4.0" - value-or-promise "1.0.11" - -"@graphql-tools/schema@^9.0.18": - version "9.0.19" - resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-9.0.19.tgz#c4ad373b5e1b8a0cf365163435b7d236ebdd06e7" - integrity sha512-oBRPoNBtCkk0zbUsyP4GaIzCt8C0aCI4ycIRUL67KK5pOHljKLBBtGT+Jr6hkzA74C8Gco8bpZPe7aWFjiaK2w== - dependencies: - "@graphql-tools/merge" "^8.4.1" - "@graphql-tools/utils" "^9.2.1" - tslib "^2.4.0" - value-or-promise "^1.0.12" - -"@graphql-tools/utils@8.9.0": - version "8.9.0" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-8.9.0.tgz#c6aa5f651c9c99e1aca55510af21b56ec296cdb7" - integrity sha512-pjJIWH0XOVnYGXCqej8g/u/tsfV4LvLlj0eATKQu5zwnxd/TiTHq7Cg313qUPTFFHZ3PP5wJ15chYVtLDwaymg== - dependencies: - tslib "^2.4.0" - -"@graphql-tools/utils@^9.2.1": - version "9.2.1" - resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-9.2.1.tgz#1b3df0ef166cfa3eae706e3518b17d5922721c57" - integrity sha512-WUw506Ql6xzmOORlriNrD6Ugx+HjVgYxt9KCXD9mHAak+eaXSwuGGPyE60hy9xaDEoXKBsG7SkG69ybitaVl6A== - dependencies: - "@graphql-typed-document-node/core" "^3.1.1" - tslib "^2.4.0" - -"@graphql-typed-document-node/core@^3.1.1": - version "3.2.0" - resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.2.0.tgz#5f3d96ec6b2354ad6d8a28bf216a1d97b5426861" - integrity sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ== - -"@humanwhocodes/config-array@^0.11.13": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== - dependencies: - "@humanwhocodes/object-schema" "^2.0.2" - debug "^4.3.1" - minimatch "^3.0.5" - -"@humanwhocodes/module-importer@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" - integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== - -"@humanwhocodes/object-schema@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz#d9fae00a2d5cb40f92cfe64b47ad749fbc38f917" - integrity sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw== - -"@josephg/resolvable@^1.0.0": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@josephg/resolvable/-/resolvable-1.0.1.tgz#69bc4db754d79e1a2f17a650d3466e038d94a5eb" - integrity sha512-CtzORUwWTTOTqfVtHaKRJ0I1kNQd1bpn3sUh8I3nJDVY+5/M/Oe1DnEWzPQvqq/xPIIkzzzIP7mfCoAjFRvDhg== - -"@metamask/eth-sig-util@^4.0.0": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" - integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== - dependencies: - ethereumjs-abi "^0.6.8" - ethereumjs-util "^6.2.1" - ethjs-util "^0.1.6" - tweetnacl "^1.0.3" - tweetnacl-util "^0.15.1" - -"@noble/curves@1.3.0", "@noble/curves@~1.3.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" - integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== - dependencies: - "@noble/hashes" "1.3.3" - -"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" - integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== - -"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" - integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== - -"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" - integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.8": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@nomicfoundation/ethereumjs-block@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-5.0.2.tgz#13a7968f5964f1697da941281b7f7943b0465d04" - integrity sha512-hSe6CuHI4SsSiWWjHDIzWhSiAVpzMUcDRpWYzN0T9l8/Rz7xNn3elwVOJ/tAyS0LqL6vitUD78Uk7lQDXZun7Q== - 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.1" - -"@nomicfoundation/ethereumjs-blockchain@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-7.0.2.tgz#45323b673b3d2fab6b5008535340d1b8fea7d446" - integrity sha512-8UUsSXJs+MFfIIAKdh3cG16iNmWzWC/91P40sazNvrqhhdR/RtGDlFk2iFTGbBAZPs2+klZVzhRX8m2wvuvz3w== - 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.3" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - level "^8.0.0" - lru-cache "^5.1.1" - memory-level "^1.0.0" - -"@nomicfoundation/ethereumjs-common@4.0.2": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.2.tgz#a15d1651ca36757588fdaf2a7d381a150662a3c3" - integrity sha512-I2WGP3HMGsOoycSdOTSqIaES0ughQTueOsddJ36aYVpI3SN8YSusgRFLwzDJwRFVIYDKx/iJz0sQ5kBHVgdDwg== - dependencies: - "@nomicfoundation/ethereumjs-util" "9.0.2" - crc-32 "^1.2.0" - -"@nomicfoundation/ethereumjs-ethash@3.0.2": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-3.0.2.tgz#da77147f806401ee996bfddfa6487500118addca" - integrity sha512-8PfoOQCcIcO9Pylq0Buijuq/O73tmMVURK0OqdjhwqcGHYC2PwhbajDh7GZ55ekB0Px197ajK3PQhpKoiI/UPg== - dependencies: - "@nomicfoundation/ethereumjs-block" "5.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - abstract-level "^1.0.3" - bigint-crypto-utils "^3.0.23" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-evm@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-2.0.2.tgz#4c2f4b84c056047102a4fa41c127454e3f0cfcf6" - integrity sha512-rBLcUaUfANJxyOx9HIdMX6uXGin6lANCulIm/pjMgRqfiCRMZie3WKYxTSd8ZE/d+qT+zTedBF4+VHTdTSePmQ== - dependencies: - "@ethersproject/providers" "^5.7.1" - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-tx" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/ethereumjs-rlp@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.2.tgz#4fee8dc58a53ac6ae87fb1fca7c15dc06c6b5dea" - integrity sha512-QwmemBc+MMsHJ1P1QvPl8R8p2aPvvVcKBbvHnQOKBpBztEo0omN0eaob6FeZS/e3y9NSe+mfu3nNFBHszqkjTA== - -"@nomicfoundation/ethereumjs-statemanager@2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-2.0.2.tgz#3ba4253b29b1211cafe4f9265fee5a0d780976e0" - integrity sha512-dlKy5dIXLuDubx8Z74sipciZnJTRSV/uHG48RSijhgm1V7eXYFC567xgKtsKiVZB1ViTP9iFL4B6Je0xD6X2OA== - dependencies: - "@nomicfoundation/ethereumjs-common" "4.0.2" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - debug "^4.3.3" - ethereum-cryptography "0.1.3" - ethers "^5.7.1" - js-sdsl "^4.1.4" - -"@nomicfoundation/ethereumjs-trie@6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-6.0.2.tgz#9a6dbd28482dca1bc162d12b3733acab8cd12835" - integrity sha512-yw8vg9hBeLYk4YNg5MrSJ5H55TLOv2FSWUTROtDtTMMmDGROsAu+0tBjiNGTnKRi400M6cEzoFfa89Fc5k8NTQ== - dependencies: - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - "@nomicfoundation/ethereumjs-util" "9.0.2" - "@types/readable-stream" "^2.3.13" - ethereum-cryptography "0.1.3" - readable-stream "^3.6.0" - -"@nomicfoundation/ethereumjs-tx@5.0.2": - version "5.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.2.tgz#117813b69c0fdc14dd0446698a64be6df71d7e56" - integrity sha512-T+l4/MmTp7VhJeNloMkM+lPU3YMUaXdcXgTGCf8+ZFvV9NYZTRLFekRwlG6/JMmVfIfbrW+dRRJ9A6H5Q/Z64g== - dependencies: - "@chainsafe/ssz" "^0.9.2" - "@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.2": - version "9.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.2.tgz#16bdc1bb36f333b8a3559bbb4b17dac805ce904d" - integrity sha512-4Wu9D3LykbSBWZo8nJCnzVIYGvGCuyiYLIJa9XXNVt1q1jUzHdB+sJvx95VGCpPkCT+IbLecW6yfzy3E1bQrwQ== - dependencies: - "@chainsafe/ssz" "^0.10.0" - "@nomicfoundation/ethereumjs-rlp" "5.0.2" - ethereum-cryptography "0.1.3" - -"@nomicfoundation/ethereumjs-vm@7.0.2": - version "7.0.2" - resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-7.0.2.tgz#3b0852cb3584df0e18c182d0672a3596c9ca95e6" - integrity sha512-Bj3KZT64j54Tcwr7Qm/0jkeZXJMfdcAtRBedou+Hx0dPOSIgqaIr0vvLwP65TpHbak2DmAq+KJbW2KNtIoFwvA== - 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.3" - ethereum-cryptography "0.1.3" - mcl-wasm "^0.7.1" - rustbn.js "~0.2.0" - -"@nomicfoundation/hardhat-verify@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.4.tgz#65b86787fc7b47d38fd941862266065c7eb9bca4" - integrity sha512-B8ZjhOrmbbRWqJi65jvQblzjsfYktjqj2vmOm+oc2Vu8drZbT2cjeSCRHZKbS7lOtfW78aJZSFvw+zRLCiABJA== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@ethersproject/address" "^5.0.2" - cbor "^8.1.0" - chalk "^2.4.2" - debug "^4.1.1" - lodash.clonedeep "^4.5.0" - semver "^6.3.0" - table "^6.8.0" - undici "^5.14.0" - -"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" - integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== - -"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" - integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== - -"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" - integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== - -"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" - integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== - -"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" - integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== - -"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" - integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== - -"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" - integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== - -"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" - integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== - -"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" - integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== - -"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" - integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== - -"@nomicfoundation/solidity-analyzer@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" - integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== - optionalDependencies: - "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" - "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" - "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" - "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" - -"@openzeppelin/contract-loader@^0.6.2": - version "0.6.3" - resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" - integrity sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg== - dependencies: - find-up "^4.1.0" - fs-extra "^8.1.0" - -"@openzeppelin/contracts-upgradeable@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.0.1.tgz#ebc163cbed2de6b8b69bff628261d18deb912a81" - integrity sha512-MvaLoPnVcoZr/qqZP+4cl9piuR4gg0iIGgxVSZ/AL1iId3M6IdEHzz9Naw5Lirl4KKBI6ciTVnX07yL4dOMIJg== - -"@openzeppelin/contracts@^4.1.0": - version "4.9.5" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-4.9.5.tgz#1eed23d4844c861a1835b5d33507c1017fa98de8" - integrity sha512-ZK+W5mVhRppff9BE6YdR8CC52C8zAvsVAiWhEtQ5+oNxFE6h1WdeWo+FJSF8KKvtxxVYZ7MTP/5KoVpAU3aSWg== - -"@openzeppelin/contracts@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.0.1.tgz#93da90fc209a0a4ff09c1deb037fbb35e4020890" - integrity sha512-yQJaT5HDp9hYOOp4jTYxMsR02gdFZFXhewX5HW9Jo4fsqSVqqyIO/xTHdWDaKX5a3pv1txmf076Lziz+sO7L1w== - -"@openzeppelin/test-helpers@~0.5.16": - version "0.5.16" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.16.tgz#2c9054f85069dfbfb5e8cef3ed781e8caf241fb3" - integrity sha512-T1EvspSfH1qQO/sgGlskLfYVBbqzJR23SZzYl/6B2JnT4EhThcI85UpvDk0BkLWKaDScQTabGHt4GzHW+3SfZg== - dependencies: - "@openzeppelin/contract-loader" "^0.6.2" - "@truffle/contract" "^4.0.35" - ansi-colors "^3.2.3" - chai "^4.2.0" - chai-bn "^0.2.1" - ethjs-abi "^0.2.1" - lodash.flatten "^4.4.0" - semver "^5.6.0" - web3 "^1.2.5" - web3-utils "^1.2.5" - -"@pnpm/config.env-replace@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz#ab29da53df41e8948a00f2433f085f54de8b3a4c" - integrity sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w== - -"@pnpm/network.ca-file@^1.0.1": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz#2ab05e09c1af0cdf2fcf5035bea1484e222f7983" - integrity sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA== - dependencies: - graceful-fs "4.2.10" - -"@pnpm/npm-conf@^2.1.0": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@pnpm/npm-conf/-/npm-conf-2.2.2.tgz#0058baf1c26cbb63a828f0193795401684ac86f0" - integrity sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA== - dependencies: - "@pnpm/config.env-replace" "^1.1.0" - "@pnpm/network.ca-file" "^1.0.1" - config-chain "^1.1.11" - -"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf" - integrity sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ== - -"@protobufjs/base64@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735" - integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg== - -"@protobufjs/codegen@^2.0.4": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb" - integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg== - -"@protobufjs/eventemitter@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70" - integrity sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q== - -"@protobufjs/fetch@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45" - integrity sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ== - dependencies: - "@protobufjs/aspromise" "^1.1.1" - "@protobufjs/inquire" "^1.1.0" - -"@protobufjs/float@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1" - integrity sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ== - -"@protobufjs/inquire@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089" - integrity sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q== - -"@protobufjs/path@^1.1.2": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d" - integrity sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA== - -"@protobufjs/pool@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54" - integrity sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw== - -"@protobufjs/utf8@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570" - integrity sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw== - -"@redux-saga/core@^1.0.0": - version "1.3.0" - resolved "https://registry.yarnpkg.com/@redux-saga/core/-/core-1.3.0.tgz#2ce08b73d407fc6ea9e7f7d83d2e97d981a3a8b8" - integrity sha512-L+i+qIGuyWn7CIg7k1MteHGfttKPmxwZR5E7OsGikCL2LzYA0RERlaUY00Y3P3ZV2EYgrsYlBrGs6cJP5OKKqA== - dependencies: - "@babel/runtime" "^7.6.3" - "@redux-saga/deferred" "^1.2.1" - "@redux-saga/delay-p" "^1.2.1" - "@redux-saga/is" "^1.1.3" - "@redux-saga/symbols" "^1.1.3" - "@redux-saga/types" "^1.2.1" - typescript-tuple "^2.2.1" - -"@redux-saga/deferred@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/deferred/-/deferred-1.2.1.tgz#aca373a08ccafd6f3481037f2f7ee97f2c87c3ec" - integrity sha512-cmin3IuuzMdfQjA0lG4B+jX+9HdTgHZZ+6u3jRAOwGUxy77GSlTi4Qp2d6PM1PUoTmQUR5aijlA39scWWPF31g== - -"@redux-saga/delay-p@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/delay-p/-/delay-p-1.2.1.tgz#e72ac4731c5080a21f75b61bedc31cb639d9e446" - integrity sha512-MdiDxZdvb1m+Y0s4/hgdcAXntpUytr9g0hpcOO1XFVyyzkrDu3SKPgBFOtHn7lhu7n24ZKIAT1qtKyQjHqRd+w== - dependencies: - "@redux-saga/symbols" "^1.1.3" - -"@redux-saga/is@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/is/-/is-1.1.3.tgz#b333f31967e87e32b4e6b02c75b78d609dd4ad73" - integrity sha512-naXrkETG1jLRfVfhOx/ZdLj0EyAzHYbgJWkXbB3qFliPcHKiWbv/ULQryOAEKyjrhiclmr6AMdgsXFyx7/yE6Q== - dependencies: - "@redux-saga/symbols" "^1.1.3" - "@redux-saga/types" "^1.2.1" - -"@redux-saga/symbols@^1.1.3": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@redux-saga/symbols/-/symbols-1.1.3.tgz#b731d56201719e96dc887dc3ae9016e761654367" - integrity sha512-hCx6ZvU4QAEUojETnX8EVg4ubNLBFl1Lps4j2tX7o45x/2qg37m3c6v+kSp8xjDJY+2tJw4QB3j8o8dsl1FDXg== - -"@redux-saga/types@^1.2.1": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@redux-saga/types/-/types-1.2.1.tgz#9403f51c17cae37edf870c6bc0c81c1ece5ccef8" - integrity sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA== - -"@resolver-engine/core@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@resolver-engine/core/-/core-0.2.1.tgz#0d71803f6d3b8cb2e9ed481a1bf0ca5f5256d0c0" - integrity sha512-nsLQHmPJ77QuifqsIvqjaF5B9aHnDzJjp73Q1z6apY3e9nqYrx4Dtowhpsf7Jwftg/XzVDEMQC+OzUBNTS+S1A== - dependencies: - debug "^3.1.0" - request "^2.85.0" - -"@resolver-engine/fs@^0.2.1": - version "0.2.1" - resolved "https://registry.yarnpkg.com/@resolver-engine/fs/-/fs-0.2.1.tgz#f98a308d77568cc02651d03636f46536b941b241" - integrity sha512-7kJInM1Qo2LJcKyDhuYzh9ZWd+mal/fynfL9BNjWOiTcOpX+jNfqb/UmGUqros5pceBITlWGqS4lU709yHFUbg== - dependencies: - "@resolver-engine/core" "^0.2.1" - debug "^3.1.0" - -"@resolver-engine/imports-fs@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports-fs/-/imports-fs-0.2.2.tgz#5a81ef3285dbf0411ab3b15205080a1ad7622d9e" - integrity sha512-gFCgMvCwyppjwq0UzIjde/WI+yDs3oatJhozG9xdjJdewwtd7LiF0T5i9lrHAUtqrQbqoFE4E+ZMRVHWpWHpKQ== - dependencies: - "@resolver-engine/fs" "^0.2.1" - "@resolver-engine/imports" "^0.2.2" - debug "^3.1.0" - -"@resolver-engine/imports@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@resolver-engine/imports/-/imports-0.2.2.tgz#d3de55a1bb5f3beb7703fdde743298f321175843" - integrity sha512-u5/HUkvo8q34AA+hnxxqqXGfby5swnH0Myw91o3Sm2TETJlNKXibFGSKBavAH+wvWdBi4Z5gS2Odu0PowgVOUg== - dependencies: - "@resolver-engine/core" "^0.2.1" - debug "^3.1.0" - hosted-git-info "^2.6.0" - -"@scure/base@~1.1.0", "@scure/base@~1.1.4": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157" - integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ== - -"@scure/bip32@1.1.5": - version "1.1.5" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" - integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== - dependencies: - "@noble/hashes" "~1.2.0" - "@noble/secp256k1" "~1.7.0" - "@scure/base" "~1.1.0" - -"@scure/bip32@1.3.3": - version "1.3.3" - resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" - integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== - dependencies: - "@noble/curves" "~1.3.0" - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@scure/bip39@1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" - integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== - dependencies: - "@noble/hashes" "~1.2.0" - "@scure/base" "~1.1.0" - -"@scure/bip39@1.2.2": - version "1.2.2" - resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" - integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== - dependencies: - "@noble/hashes" "~1.3.2" - "@scure/base" "~1.1.4" - -"@sentry/core@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" - integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/hub@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" - integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== - dependencies: - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/minimal@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" - integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sentry/node@^5.18.1": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" - integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== - dependencies: - "@sentry/core" "5.30.0" - "@sentry/hub" "5.30.0" - "@sentry/tracing" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - cookie "^0.4.1" - https-proxy-agent "^5.0.0" - lru_map "^0.3.3" - tslib "^1.9.3" - -"@sentry/tracing@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" - integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== - dependencies: - "@sentry/hub" "5.30.0" - "@sentry/minimal" "5.30.0" - "@sentry/types" "5.30.0" - "@sentry/utils" "5.30.0" - tslib "^1.9.3" - -"@sentry/types@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" - integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== - -"@sentry/utils@5.30.0": - version "5.30.0" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" - integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== - dependencies: - "@sentry/types" "5.30.0" - tslib "^1.9.3" - -"@sindresorhus/is@^4.0.0", "@sindresorhus/is@^4.6.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@sindresorhus/is@^5.2.0": - version "5.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-5.6.0.tgz#41dd6093d34652cddb5d5bdeee04eafc33826668" - integrity sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g== - -"@solidity-parser/parser@^0.14.0", "@solidity-parser/parser@^0.14.1": - version "0.14.5" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" - integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@solidity-parser/parser@^0.16.0": - version "0.16.2" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.16.2.tgz#42cb1e3d88b3e8029b0c9befff00b634cd92d2fa" - integrity sha512-PI9NfoA3P8XK2VBkK5oIfRgKDsicwDZfkVq9ZTBCQYGOP1N2owgY2dyLGyU5/J/hQs8KRk55kdmvTLjy3Mu3vg== - dependencies: - antlr4ts "^0.5.0-alpha.4" - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@szmarczak/http-timer@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-5.0.1.tgz#c7c1bf1141cdd4751b0399c8fc7b8b664cd5be3a" - integrity sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw== - dependencies: - defer-to-connect "^2.0.1" - -"@truffle/abi-utils@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-1.0.3.tgz#9f0df7a8aaf5e815bee47e0ad26bd4c91e4045f2" - integrity sha512-AWhs01HCShaVKjml7Z4AbVREr/u4oiWxCcoR7Cktm0mEvtT04pvnxW5xB/cI4znRkrbPdFQlFt67kgrAjesYkw== - dependencies: - change-case "3.0.2" - fast-check "3.1.1" - web3-utils "1.10.0" - -"@truffle/blockchain-utils@^0.1.9": - version "0.1.9" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.1.9.tgz#d9b55bd23a134578e4217bae55a6dfbbb038d6dc" - integrity sha512-RHfumgbIVo68Rv9ofDYfynjnYZIfP/f1vZy4RoqkfYAO+fqfc58PDRzB1WAGq2U6GPuOnipOJxQhnqNnffORZg== - -"@truffle/code-utils@^3.0.4": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@truffle/code-utils/-/code-utils-3.0.4.tgz#5a3ab050847522f17ee318a86869f6d586a264bd" - integrity sha512-MWK3TMisIFaBpSjK7tt1GoQan7DQDBqT2iSsdQOGD74C7r9NMwsIdnL2EYoB/DPcEJ7B8yP4grlG2fQTrPF96g== - dependencies: - cbor "^5.2.0" - -"@truffle/codec@^0.17.3": - version "0.17.3" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.17.3.tgz#94057e56e1a947594b35eba498d96915df3861d2" - integrity sha512-Ko/+dsnntNyrJa57jUD9u4qx9nQby+H4GsUO6yjiCPSX0TQnEHK08XWqBSg0WdmCH2+h0y1nr2CXSx8gbZapxg== - dependencies: - "@truffle/abi-utils" "^1.0.3" - "@truffle/compile-common" "^0.9.8" - big.js "^6.0.3" - bn.js "^5.1.3" - cbor "^5.2.0" - debug "^4.3.1" - lodash "^4.17.21" - semver "^7.5.4" - utf8 "^3.0.0" - web3-utils "1.10.0" - -"@truffle/compile-common@^0.9.8": - version "0.9.8" - resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.9.8.tgz#f91507c895852289a17bf401eefebc293c4c69f0" - integrity sha512-DTpiyo32t/YhLI1spn84D3MHYHrnoVqO+Gp7ZHrYNwDs86mAxtNiH5lsVzSb8cPgiqlvNsRCU9nm9R0YmKMTBQ== - dependencies: - "@truffle/error" "^0.2.2" - colors "1.4.0" - -"@truffle/config@^1.3.61": - version "1.3.61" - resolved "https://registry.yarnpkg.com/@truffle/config/-/config-1.3.61.tgz#912d11eb03720b6b8cb79979aa56b85215075aec" - integrity sha512-L4uyG47V+k0NrSoVJ9D+hp2jcMstihW1QlNuXiu5g3mU24BjrozlJT34DFkczh/TtRceLjdrQJKA8WJCMICutw== - dependencies: - "@truffle/error" "^0.2.2" - "@truffle/events" "^0.1.25" - "@truffle/provider" "^0.3.13" - conf "^10.1.2" - debug "^4.3.1" - find-up "^2.1.0" - lodash "^4.17.21" - original-require "^1.0.1" - -"@truffle/contract-schema@^3.4.16": - version "3.4.16" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.16.tgz#c529c3f230db407b2f03290373b20b7366f2d37e" - integrity sha512-g0WNYR/J327DqtJPI70ubS19K1Fth/1wxt2jFqLsPmz5cGZVjCwuhiie+LfBde4/Mc9QR8G+L3wtmT5cyoBxAg== - dependencies: - ajv "^6.10.0" - debug "^4.3.1" - -"@truffle/contract@^4.0.35": - version "4.6.31" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.6.31.tgz#75cb059689ce73b365675d9650718908c01b6b58" - integrity sha512-s+oHDpXASnZosiCdzu+X1Tx5mUJUs1L1CYXIcgRmzMghzqJkaUFmR6NpNo7nJYliYbO+O9/aW8oCKqQ7rCHfmQ== - dependencies: - "@ensdomains/ensjs" "^2.1.0" - "@truffle/blockchain-utils" "^0.1.9" - "@truffle/contract-schema" "^3.4.16" - "@truffle/debug-utils" "^6.0.57" - "@truffle/error" "^0.2.2" - "@truffle/interface-adapter" "^0.5.37" - bignumber.js "^7.2.1" - debug "^4.3.1" - ethers "^4.0.32" - web3 "1.10.0" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-eth-abi "1.10.0" - web3-utils "1.10.0" - -"@truffle/dashboard-message-bus-client@^0.1.12": - version "0.1.12" - resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-client/-/dashboard-message-bus-client-0.1.12.tgz#160bf0ae888efee8a45425232d296630f83fe6af" - integrity sha512-pI9G0La9tTstb2J2wxUZIMx6H+ZF0XBlsGN3HBkffr4edT0oT12WMCK9GxmKE22Q5VnpXl7wGjatRSEx0C9qDQ== - dependencies: - "@truffle/dashboard-message-bus-common" "^0.1.7" - "@truffle/promise-tracker" "^0.1.7" - axios "1.5.0" - debug "^4.3.1" - delay "^5.0.0" - isomorphic-ws "^4.0.1" - node-abort-controller "^3.0.1" - tiny-typed-emitter "^2.1.0" - ws "^7.2.0" - -"@truffle/dashboard-message-bus-common@^0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@truffle/dashboard-message-bus-common/-/dashboard-message-bus-common-0.1.7.tgz#dc7b76e18845788429929a97a416c1e6e37580dc" - integrity sha512-jN7q8LBmwQRldSzT/YJE33mnDLrp3EFFDuZyLwtQGInlfcRTXcr5yPY42jxr3Ln19dQe2Chx3I6dWtDByeKLIQ== - -"@truffle/db-loader@^0.2.36": - version "0.2.36" - resolved "https://registry.yarnpkg.com/@truffle/db-loader/-/db-loader-0.2.36.tgz#7f9f06191d7e8945949e5408c2bed7aaefc8daec" - integrity sha512-Cm8uVc2eoihquMOSZm8UOuGGUvBo+/GHkxRoPAZ5pftOpSlRAug0okVOp6ETj1BujgLJ02izU/qdrwSGWwGR9A== - optionalDependencies: - "@truffle/db" "^2.0.36" - -"@truffle/db@^2.0.36": - version "2.0.36" - resolved "https://registry.yarnpkg.com/@truffle/db/-/db-2.0.36.tgz#f502f8307a70ad17acaded48d69bcb680c3848b3" - integrity sha512-PpUjOXZgf9Gy8RlP8bJhl5pjJRkghZUcCiGOsS0YbCCI//PGDDoKmS+3QUjXWhiMwTeld3gfUV2ip4p2hMbyVA== - dependencies: - "@graphql-tools/delegate" "^8.4.3" - "@graphql-tools/schema" "^8.3.1" - "@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.11.0" - debug "^4.3.1" - fs-extra "^9.1.0" - graphql "^15.3.0" - graphql-tag "^2.12.6" - json-stable-stringify "^1.0.1" - pascal-case "^2.0.1" - pluralize "^8.0.0" - pouchdb "7.3.0" - pouchdb-adapter-memory "^7.1.1" - pouchdb-debug "^7.1.1" - pouchdb-find "^7.0.0" - web3-utils "1.10.0" - -"@truffle/debug-utils@^6.0.57": - version "6.0.57" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-6.0.57.tgz#4e9a1051221c5f467daa398b0ca638d8b6408a82" - integrity sha512-Q6oI7zLaeNLB69ixjwZk2UZEWBY6b2OD1sjLMGDKBGR7GaHYiw96GLR2PFgPH1uwEeLmV4N78LYaQCrDsHbNeA== - dependencies: - "@truffle/codec" "^0.17.3" - "@trufflesuite/chromafi" "^3.0.0" - bn.js "^5.1.3" - chalk "^2.4.2" - debug "^4.3.1" - highlightjs-solidity "^2.0.6" - -"@truffle/debugger@^12.1.5": - version "12.1.5" - resolved "https://registry.yarnpkg.com/@truffle/debugger/-/debugger-12.1.5.tgz#39be29471f8e0ed31e9a3f5434266058bde74708" - integrity sha512-m6FQoddmptcXZkO+OABcz4Ka7YDLAPW9/GhnTSqYonlaOeV7g5dMzybhHq6whaQet34rhNteomep7JpskKW9Mw== - dependencies: - "@ensdomains/ensjs" "^2.1.0" - "@truffle/abi-utils" "^1.0.3" - "@truffle/codec" "^0.17.3" - "@truffle/source-map-utils" "^1.3.119" - bn.js "^5.1.3" - debug "^4.3.1" - json-pointer "^0.6.1" - json-stable-stringify "^1.0.1" - lodash "^4.17.21" - redux "^3.7.2" - redux-saga "1.0.0" - reselect-tree "^1.3.7" - semver "^7.5.4" - web3 "1.10.0" - web3-eth-abi "1.10.0" - -"@truffle/error@^0.2.2": - version "0.2.2" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.2.2.tgz#1b4c4237c14dda792f20bd4f19ff4e4585b47796" - integrity sha512-TqbzJ0O8DHh34cu8gDujnYl4dUl6o2DE4PR6iokbybvnIm/L2xl6+Gv1VC+YJS45xfH83Yo3/Zyg/9Oq8/xZWg== - -"@truffle/events@^0.1.25": - version "0.1.25" - resolved "https://registry.yarnpkg.com/@truffle/events/-/events-0.1.25.tgz#52d4ae968273c267edfcb5c8e2d3b90c7f1f6b89" - integrity sha512-5elJxNXPVuXDMOoIcCVox0sz95ovRhRbte/H9ht18vyOvtualb4bTjwYyRoWw6Y7j0pom0tPI3OLZWqCdKQNdA== - dependencies: - "@truffle/dashboard-message-bus-client" "^0.1.12" - "@truffle/spinners" "^0.2.5" - debug "^4.3.1" - emittery "^0.4.1" - web3-utils "1.10.0" - -"@truffle/interface-adapter@^0.5.37": - version "0.5.37" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.37.tgz#95d249c1912d2baaa63c54e8a138d3f476a1181a" - integrity sha512-lPH9MDgU+7sNDlJSClwyOwPCfuOimqsCx0HfGkznL3mcFRymc1pukAR1k17zn7ErHqBwJjiKAZ6Ri72KkS+IWw== - dependencies: - bn.js "^5.1.3" - ethers "^4.0.32" - web3 "1.10.0" - -"@truffle/promise-tracker@^0.1.7": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@truffle/promise-tracker/-/promise-tracker-0.1.7.tgz#edc5e5940656439db7b1956bd4838d12dd4b9ecf" - integrity sha512-NiPXNJvdei8MRZRUjEZoL0Y7TPDR1TaeCfGUgB3md6Q7TBiqSKo2p5OT36JO106B2j57SLmXOiDn8fLb+u2sjA== - -"@truffle/provider@^0.3.13": - version "0.3.13" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.3.13.tgz#795b6172c5db20f30a026f2f733b9a3417847a9f" - integrity sha512-W9yZO0ZUwA0LhFvf7+NNNXVSCOd4x5pTbFiXUVURjyqp7f4YooLAqnlLPSpV+6qwIwThc+86CeLlOiFslYdDIA== - dependencies: - "@truffle/error" "^0.2.2" - "@truffle/interface-adapter" "^0.5.37" - debug "^4.3.1" - web3 "1.10.0" - -"@truffle/source-map-utils@^1.3.119": - version "1.3.119" - resolved "https://registry.yarnpkg.com/@truffle/source-map-utils/-/source-map-utils-1.3.119.tgz#d02b5859183d61a605fa8aafa2ad56b39f145f9a" - integrity sha512-TFYi3XvanY8WZBOfBwDHQe9HfZUXJ2ejnmFNjsq1//sbM4fUNWjeNshGqkWGxfKPh3OAzXgD4iTnPG3YeXM8YQ== - dependencies: - "@truffle/code-utils" "^3.0.4" - "@truffle/codec" "^0.17.3" - debug "^4.3.1" - json-pointer "^0.6.1" - node-interval-tree "^1.3.3" - web3-utils "1.10.0" - -"@truffle/spinners@^0.2.5": - version "0.2.5" - resolved "https://registry.yarnpkg.com/@truffle/spinners/-/spinners-0.2.5.tgz#fe3bb3451768f5353085551b8fe6285d354705ef" - integrity sha512-emYyLEuoY62MQV/RNjyVIuTPEjMyIA0WiYMG2N3yfh8OSjD/TC0HRc2oyDWtVkNNox/5D2tH2m5fFB8HOt80FQ== - dependencies: - "@trufflesuite/spinnies" "^0.1.1" - -"@trufflesuite/bigint-buffer@1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz#a1d9ca22d3cad1a138b78baaf15543637a3e1692" - integrity sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw== - dependencies: - node-gyp-build "4.4.0" - -"@trufflesuite/chromafi@^3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/chromafi/-/chromafi-3.0.0.tgz#f6956408c1af6a38a6ed1657783ce59504a1eb8b" - integrity sha512-oqWcOqn8nT1bwlPPfidfzS55vqcIDdpfzo3HbU9EnUmcSTX+I8z0UyUFI3tZQjByVJulbzxHxUGS3ZJPwK/GPQ== - dependencies: - camelcase "^4.1.0" - chalk "^2.3.2" - cheerio "^1.0.0-rc.2" - detect-indent "^5.0.0" - highlight.js "^10.4.1" - lodash.merge "^4.6.2" - strip-ansi "^4.0.0" - strip-indent "^2.0.0" - -"@trufflesuite/spinnies@^0.1.1": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@trufflesuite/spinnies/-/spinnies-0.1.1.tgz#719230993f55ab39f936ed8778979e7661af188d" - integrity sha512-jltEtmFJj6xmQqr85gP8OqBHCEiId+zw+uAsb3DyLLRD17O6sySW6Afa2Z/jpzSafj+32ssDfLJ+c0of1NLqcA== - dependencies: - chalk "^4.1.2" - cli-cursor "^3.1.0" - strip-ansi "^6.0.0" - -"@trufflesuite/uws-js-unofficial@20.30.0-unofficial.0": - version "20.30.0-unofficial.0" - resolved "https://registry.yarnpkg.com/@trufflesuite/uws-js-unofficial/-/uws-js-unofficial-20.30.0-unofficial.0.tgz#2fbc2f8ef7e82fbeea6abaf7e8a9d42a02b479d3" - integrity sha512-r5X0aOQcuT6pLwTRLD+mPnAM/nlKtvIK4Z+My++A8tTOR0qTjNRx8UB8jzRj3D+p9PMAp5LnpCUUGmz7/TppwA== - dependencies: - ws "8.13.0" - optionalDependencies: - bufferutil "4.0.7" - utf-8-validate "6.0.3" - -"@types/accepts@^1.3.5": - version "1.3.7" - resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.7.tgz#3b98b1889d2b2386604c2bbbe62e4fb51e95b265" - integrity sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ== - dependencies: - "@types/node" "*" - -"@types/bn.js@^4.11.3": - version "4.11.6" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" - integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== - dependencies: - "@types/node" "*" - -"@types/bn.js@^5.1.0", "@types/bn.js@^5.1.1": - version "5.1.5" - resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" - integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== - dependencies: - "@types/node" "*" - -"@types/body-parser@*": - version "1.19.5" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.5.tgz#04ce9a3b677dc8bd681a17da1ab9835dc9d3ede4" - integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/body-parser@1.19.2": - version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" - integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== - dependencies: - "@types/connect" "*" - "@types/node" "*" - -"@types/cacheable-request@^6.0.1", "@types/cacheable-request@^6.0.2": - version "6.0.3" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" - integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "^3.1.4" - "@types/node" "*" - "@types/responselike" "^1.0.0" - -"@types/concat-stream@^1.6.0": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" - integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== - dependencies: - "@types/node" "*" - -"@types/connect@*": - version "3.4.38" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" - integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== - dependencies: - "@types/node" "*" - -"@types/cors@2.8.12": - version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" - integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== - -"@types/express-serve-static-core@4.17.31": - version "4.17.31" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz#a1139efeab4e7323834bb0226e62ac019f474b2f" - integrity sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - -"@types/express-serve-static-core@^4.17.18": - version "4.17.43" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz#10d8444be560cb789c4735aea5eac6e5af45df54" - integrity sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg== - dependencies: - "@types/node" "*" - "@types/qs" "*" - "@types/range-parser" "*" - "@types/send" "*" - -"@types/express@4.17.14": - version "4.17.14" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.14.tgz#143ea0557249bc1b3b54f15db4c81c3d4eb3569c" - integrity sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg== - dependencies: - "@types/body-parser" "*" - "@types/express-serve-static-core" "^4.17.18" - "@types/qs" "*" - "@types/serve-static" "*" - -"@types/form-data@0.0.33": - version "0.0.33" - resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" - integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== - dependencies: - "@types/node" "*" - -"@types/http-cache-semantics@*", "@types/http-cache-semantics@^4.0.2": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" - integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== - -"@types/http-errors@*": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.4.tgz#7eb47726c391b7345a6ec35ad7f4de469cf5ba4f" - integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== - -"@types/json5@^0.0.29": - version "0.0.29" - resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" - integrity sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ== - -"@types/keyv@^3.1.4": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/long@^4.0.0": - version "4.0.2" - resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.2.tgz#b74129719fc8d11c01868010082d483b7545591a" - integrity sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA== - -"@types/lru-cache@5.1.1", "@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - -"@types/mime@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.4.tgz#2198ac274de6017b44d941e00261d5bc6a0e0a45" - integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== - -"@types/mime@^1": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" - integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== - -"@types/node@*": - version "20.11.17" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.17.tgz#cdd642d0e62ef3a861f88ddbc2b61e32578a9292" - integrity sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw== - dependencies: - undici-types "~5.26.4" - -"@types/node@^10.0.3", "@types/node@^10.1.0": - version "10.17.60" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" - integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== - -"@types/node@^12.12.6": - version "12.20.55" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240" - integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ== - -"@types/node@^8.0.0": - version "8.10.66" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" - integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== - -"@types/pbkdf2@^3.0.0": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" - integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== - dependencies: - "@types/node" "*" - -"@types/qs@*", "@types/qs@^6.2.31": - version "6.9.11" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.11.tgz#208d8a30bc507bd82e03ada29e4732ea46a6bbda" - integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== - -"@types/range-parser@*": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" - integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== - -"@types/readable-stream@^2.3.13": - version "2.3.15" - resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-2.3.15.tgz#3d79c9ceb1b6a57d5f6e6976f489b9b5384321ae" - integrity sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ== - dependencies: - "@types/node" "*" - safe-buffer "~5.1.1" - -"@types/responselike@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" - integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== - dependencies: - "@types/node" "*" - -"@types/secp256k1@^4.0.1": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" - integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== - dependencies: - "@types/node" "*" - -"@types/seedrandom@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/seedrandom/-/seedrandom-3.0.1.tgz#1254750a4fec4aff2ebec088ccd0bb02e91fedb4" - integrity sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw== - -"@types/send@*": - version "0.17.4" - resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.4.tgz#6619cd24e7270793702e4e6a4b958a9010cfc57a" - integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== - dependencies: - "@types/mime" "^1" - "@types/node" "*" - -"@types/serve-static@*": - version "1.15.5" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.5.tgz#15e67500ec40789a1e8c9defc2d32a896f05b033" - integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== - dependencies: - "@types/http-errors" "*" - "@types/mime" "*" - "@types/node" "*" - -"@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== - -abort-controller@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" - integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== - dependencies: - event-target-shim "^5.0.0" - -abortcontroller-polyfill@^1.7.3, abortcontroller-polyfill@^1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz#6738495f4e901fbb57b6c0611d0c75f76c485bed" - integrity sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ== - -abstract-level@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.3.tgz#78a67d3d84da55ee15201486ab44c09560070741" - integrity sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -abstract-level@^1.0.0, abstract-level@^1.0.2, abstract-level@^1.0.3, abstract-level@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abstract-level/-/abstract-level-1.0.4.tgz#3ad8d684c51cc9cbc9cf9612a7100b716c414b57" - integrity sha512-eUP/6pbXBkMbXFdx4IH2fVgvB7M0JvR7/lIL33zcs0IBcwjdzSSl31TOJsaCzmKSSDF9h8QYSOJux4Nd4YJqFg== - dependencies: - buffer "^6.0.3" - catering "^2.1.0" - is-buffer "^2.0.5" - level-supports "^4.0.0" - level-transcoder "^1.0.1" - module-error "^1.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@7.2.0, abstract-leveldown@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz#08d19d4e26fb5be426f7a57004851b39e1795a2e" - integrity sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ== - dependencies: - buffer "^6.0.3" - catering "^2.0.0" - is-buffer "^2.0.5" - level-concat-iterator "^3.0.0" - level-supports "^2.0.1" - queue-microtask "^1.2.3" - -abstract-leveldown@^6.2.1: - version "6.3.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" - integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~6.2.1, abstract-leveldown@~6.2.3: - version "6.2.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" - integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== - dependencies: - buffer "^5.5.0" - immediate "^3.2.3" - level-concat-iterator "~2.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -accepts@^1.3.5, accepts@~1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" - integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== - dependencies: - mime-types "~2.1.34" - negotiator "0.6.3" - -acorn-jsx@^5.3.2: - version "5.3.2" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" - integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== - -acorn@^8.9.0: - version "8.11.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" - integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== - -adm-zip@^0.4.16: - version "0.4.16" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" - integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== - -ado-contracts@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ado-contracts/-/ado-contracts-1.0.0.tgz#44879d18ab37da1c5f5282e2d1d3a1db42eb34d2" - integrity sha512-tLJdlGed3Fcwih4m9yNaI3+PqfxKarbLBR2OavM8RiPX8zo5TrLUZ6akrqkK+BFBInhaxONnMKsWiHj4QNPdCw== - dependencies: - "@openzeppelin/contracts" "^4.1.0" - -aes-js@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" - integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== - -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv-formats@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" - integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== - dependencies: - ajv "^8.0.0" - -ajv@^6.10.0, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.6: - version "6.12.6" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.0, ajv@^8.0.1, ajv@^8.6.3: - version "8.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" - integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-align@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" - integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== - dependencies: - string-width "^4.1.0" - -ansi-colors@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-colors@^3.2.3: - version "3.2.4" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" - integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA== - -ansi-regex@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" - integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -antlr4@^4.11.0: - version "4.13.1" - resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.13.1.tgz#1e0a1830a08faeb86217cb2e6c34716004e4253d" - integrity sha512-kiXTspaRYvnIArgE97z5YVVf/cDVQABr3abFRR6mE7yesLMkgu4ujuyV/sgxafQ8wgve0DJQUJ38Z8tkgA2izA== - -antlr4ts@^0.5.0-alpha.4: - version "0.5.0-alpha.4" - resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" - integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -apollo-datasource@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/apollo-datasource/-/apollo-datasource-3.3.2.tgz#5711f8b38d4b7b53fb788cb4dbd4a6a526ea74c8" - integrity sha512-L5TiS8E2Hn/Yz7SSnWIVbZw0ZfEIXZCa5VUiVxD9P53JvSrf4aStvsFDlGWPvpIdCR+aly2CfoB79B9/JjKFqg== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - apollo-server-env "^4.2.1" - -apollo-reporting-protobuf@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/apollo-reporting-protobuf/-/apollo-reporting-protobuf-3.4.0.tgz#6edd31f09d4a3704d9e808d1db30eca2229ded26" - integrity sha512-h0u3EbC/9RpihWOmcSsvTW2O6RXVaD/mPEjfrPkxRPTEPWqncsgOoRJw+wih4OqfH3PvTJvoEIf4LwKrUaqWog== - dependencies: - "@apollo/protobufjs" "1.2.6" - -apollo-server-core@^3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-3.13.0.tgz#ad6601fbb34cc97eedca27a9fb0b5738d11cd27d" - integrity sha512-v/g6DR6KuHn9DYSdtQijz8dLOkP78I5JSVJzPkARhDbhpH74QNwrQ2PP2URAPPEDJ2EeZNQDX8PvbYkAKqg+kg== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - "@apollo/utils.logger" "^1.0.0" - "@apollo/utils.usagereporting" "^1.0.0" - "@apollographql/apollo-tools" "^0.5.3" - "@apollographql/graphql-playground-html" "1.6.29" - "@graphql-tools/mock" "^8.1.2" - "@graphql-tools/schema" "^8.0.0" - "@josephg/resolvable" "^1.0.0" - apollo-datasource "^3.3.2" - apollo-reporting-protobuf "^3.4.0" - apollo-server-env "^4.2.1" - apollo-server-errors "^3.3.1" - apollo-server-plugin-base "^3.7.2" - apollo-server-types "^3.8.0" - async-retry "^1.2.1" - fast-json-stable-stringify "^2.1.0" - graphql-tag "^2.11.0" - loglevel "^1.6.8" - lru-cache "^6.0.0" - node-abort-controller "^3.0.1" - sha.js "^2.4.11" - uuid "^9.0.0" - whatwg-mimetype "^3.0.0" - -apollo-server-env@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/apollo-server-env/-/apollo-server-env-4.2.1.tgz#ea5b1944accdbdba311f179e4dfaeca482c20185" - integrity sha512-vm/7c7ld+zFMxibzqZ7SSa5tBENc4B0uye9LTfjJwGoQFY5xsUPH5FpO5j0bMUDZ8YYNbrF9SNtzc5Cngcr90g== - dependencies: - node-fetch "^2.6.7" - -apollo-server-errors@^3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/apollo-server-errors/-/apollo-server-errors-3.3.1.tgz#ba5c00cdaa33d4cbd09779f8cb6f47475d1cd655" - integrity sha512-xnZJ5QWs6FixHICXHxUfm+ZWqqxrNuPlQ+kj5m6RtEgIpekOPssH/SD9gf2B4HuWV0QozorrygwZnux8POvyPA== - -apollo-server-express@^3.13.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/apollo-server-express/-/apollo-server-express-3.13.0.tgz#0d8d9bbba3b8b8264912d215f63fd44e74d5f42a" - integrity sha512-iSxICNbDUyebOuM8EKb3xOrpIwOQgKxGbR2diSr4HP3IW8T3njKFOoMce50vr+moOCe1ev8BnLcw9SNbuUtf7g== - dependencies: - "@types/accepts" "^1.3.5" - "@types/body-parser" "1.19.2" - "@types/cors" "2.8.12" - "@types/express" "4.17.14" - "@types/express-serve-static-core" "4.17.31" - accepts "^1.3.5" - apollo-server-core "^3.13.0" - apollo-server-types "^3.8.0" - body-parser "^1.19.0" - cors "^2.8.5" - parseurl "^1.3.3" - -apollo-server-plugin-base@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/apollo-server-plugin-base/-/apollo-server-plugin-base-3.7.2.tgz#c19cd137bc4c993ba2490ba2b571b0f3ce60a0cd" - integrity sha512-wE8dwGDvBOGehSsPTRZ8P/33Jan6/PmL0y0aN/1Z5a5GcbFhDaaJCjK5cav6npbbGL2DPKK0r6MPXi3k3N45aw== - dependencies: - apollo-server-types "^3.8.0" - -apollo-server-types@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/apollo-server-types/-/apollo-server-types-3.8.0.tgz#d976b6967878681f715fe2b9e4dad9ba86b1346f" - integrity sha512-ZI/8rTE4ww8BHktsVpb91Sdq7Cb71rdSkXELSwdSR0eXu600/sY+1UXhTWdiJvk+Eq5ljqoHLwLbY2+Clq2b9A== - dependencies: - "@apollo/utils.keyvaluecache" "^1.0.1" - "@apollo/utils.logger" "^1.0.0" - apollo-reporting-protobuf "^3.4.0" - apollo-server-env "^4.2.1" - -apollo-server@^3.11.0: - version "3.13.0" - resolved "https://registry.yarnpkg.com/apollo-server/-/apollo-server-3.13.0.tgz#38d355756717c0cb519e7ab95bce6dcc8ce35677" - integrity sha512-hgT/MswNB5G1r+oBhggVX4Fjw53CFLqG15yB5sN+OrYkCVWF5YwPbJWHfSWa7699JMEXJGaoVfFzcvLZK0UlDg== - dependencies: - "@types/express" "4.17.14" - apollo-server-core "^3.13.0" - apollo-server-express "^3.13.0" - express "^4.17.1" - -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -argsarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" - integrity sha512-u96dg2GcAKtpTrBdDoFIM7PjcBA+6rSP0OR94MOReNRyUECL6MtQt5XXmRr4qrftYaef9+l5hcpO5te7sML1Cg== - -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== - dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== - -array-includes@^3.1.7: - version "3.1.7" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.7.tgz#8cd2e01b26f7a3086cbc87271593fe921c62abda" - integrity sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-string "^1.0.7" - -array.prototype.filter@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz#423771edeb417ff5914111fff4277ea0624c0d0e" - integrity sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - -array.prototype.findlastindex@^1.2.3: - version "1.2.4" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.4.tgz#d1c50f0b3a9da191981ff8942a0aedd82794404f" - integrity sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.3.0" - es-shim-unscopables "^1.0.2" - -array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" - -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== - dependencies: - array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" - is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" - -asap@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== - -ast-parents@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" - integrity sha512-XHusKxKz3zoYk1ic8Un640joHbFMhbqneyoZfoKnEGtf2ey9Uh/IdpcQplODdO/kENaMIWsD0nJm4+wX3UNLHA== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async-eventemitter@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" - integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== - dependencies: - async "^2.4.0" - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async-retry@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/async-retry/-/async-retry-1.3.3.tgz#0e7f36c04d8478e7a58bdbed80cedf977785f280" - integrity sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw== - dependencies: - retry "0.13.1" - -async@^2.4.0: - version "2.6.4" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" - integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== - dependencies: - lodash "^4.17.14" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -atomically@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe" - integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w== - -available-typed-arrays@^1.0.5, available-typed-arrays@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz#ac812d8ce5a6b976d738e1c45f08d0b00bc7d725" - integrity sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -axios@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.5.0.tgz#f02e4af823e2e46a9768cfc74691fdd0517ea267" - integrity sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ== - dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -axios@^1.5.1: - version "1.6.7" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.7.tgz#7b48c2e27c96f9c68a2f8f31e2ab19f59b06b0a7" - integrity sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA== - dependencies: - follow-redirects "^1.15.4" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2, base-x@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -bech32@1.1.4, bech32@^1.1.3: - version "1.1.4" - resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" - integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== - -big-integer@1.6.36: - version "1.6.36" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" - integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== - -big.js@^6.0.3: - version "6.2.1" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-6.2.1.tgz#7205ce763efb17c2e41f26f121c420c6a7c2744f" - integrity sha512-bCtHMwL9LeDIozFn+oNhhFoq+yQ3BNdnsLSASUxLciOb1vgvpHsIO1dsENiGMgbb4SkP5TrzWzRiLddn8ahVOQ== - -bigint-crypto-utils@^3.0.23: - version "3.3.0" - resolved "https://registry.yarnpkg.com/bigint-crypto-utils/-/bigint-crypto-utils-3.3.0.tgz#72ad00ae91062cf07f2b1def9594006c279c1d77" - integrity sha512-jOTSb+drvEDxEq6OuUybOAv/xxoh3cuYRUIPyu8sSHQNKM303UQ2R1DAo45o1AkcIXw6fzbaFI1+xGGdaXs2lg== - -bignumber.js@^7.2.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" - integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== - -bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.1.2" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.2.tgz#b7c4242259c008903b13707983b5f4bbd31eda0c" - integrity sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blakejs@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" - integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== - -bluebird@^3.5.0, bluebird@^3.5.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@4.11.6: - version "4.11.6" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" - integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== - -bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: - version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" - integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== - -bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0, bn.js@^5.2.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -body-parser@1.20.1: - version "1.20.1" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" - integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== - dependencies: - bytes "3.1.2" - content-type "~1.0.4" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.1" - type-is "~1.6.18" - unpipe "1.0.0" - -body-parser@^1.16.0, body-parser@^1.19.0: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== - dependencies: - bytes "3.1.2" - content-type "~1.0.5" - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - http-errors "2.0.0" - iconv-lite "0.4.24" - on-finished "2.4.1" - qs "6.11.0" - raw-body "2.5.2" - type-is "~1.6.18" - unpipe "1.0.0" - -boolbase@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== - -boxen@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" - integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== - dependencies: - ansi-align "^3.0.0" - camelcase "^6.2.0" - chalk "^4.1.0" - cli-boxes "^2.2.1" - string-width "^4.2.2" - type-fest "^0.20.2" - widest-line "^3.1.0" - wrap-ansi "^7.0.0" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== - -browser-level@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browser-level/-/browser-level-1.0.1.tgz#36e8c3183d0fe1c405239792faaab5f315871011" - integrity sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.1" - module-error "^1.0.2" - run-parallel-limit "^1.1.0" - -browser-stdout@1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" - integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== - -browserify-aes@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -bs58check@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" - integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== - dependencies: - bs58 "^4.0.0" - create-hash "^1.1.0" - safe-buffer "^5.1.2" - -buffer-from@1.1.2, buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer-to-arraybuffer@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" - integrity sha512-3dthu5CYiVB1DEJp61FtApNnNndTckcqe4pFcLdvHtrpG+kcyekCJKg4MRiDcFW7A6AODnXB9U4dwQiCW5kzJQ== - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== - -buffer@6.0.3, buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -bufferutil@4.0.5: - version "4.0.5" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" - integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad" - integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw== - dependencies: - node-gyp-build "^4.3.0" - -bufferutil@^4.0.1: - version "4.0.8" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.8.tgz#1de6a71092d65d7766c4d8a522b261a6e787e8ea" - integrity sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw== - dependencies: - node-gyp-build "^4.3.0" - -builtin-modules@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -builtins@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -bytes@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" - integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-lookup@^6.0.4: - version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-6.1.0.tgz#0330a543471c61faa4e9035db583aad753b36385" - integrity sha512-KJ/Dmo1lDDhmW2XDPMo+9oiy/CeqosPguPCrgcVzKyZrL6pM1gU2GmPY/xo6OQPTUaA/c0kwHuywB4E6nmT9ww== - -cacheable-lookup@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz#3476a8215d046e5a3202a9209dd13fec1f933a27" - integrity sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w== - -cacheable-request@^10.2.8: - version "10.2.14" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-10.2.14.tgz#eb915b665fda41b79652782df3f553449c406b9d" - integrity sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ== - dependencies: - "@types/http-cache-semantics" "^4.0.2" - get-stream "^6.0.1" - http-cache-semantics "^4.1.1" - keyv "^4.5.3" - mimic-response "^4.0.0" - normalize-url "^8.0.0" - responselike "^3.0.0" - -cacheable-request@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" - integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.4" - set-function-length "^1.2.1" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camel-case@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg== - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== - -camelcase@^6.0.0, camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -case@^1.6.3: - version "1.6.3" - resolved "https://registry.yarnpkg.com/case/-/case-1.6.3.tgz#0a4386e3e9825351ca2e6216c60467ff5f1ea1c9" - integrity sha512-mzDSXIPaFwVDvZAHqZ9VlbyF4yyXRuX6IvB06WvPYkqJVO24kX1PPhv9bfpKNFZyxYFmmgo03HUiD8iklmJYRQ== - -caseless@^0.12.0, caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -catering@^2.0.0, catering@^2.1.0, catering@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/catering/-/catering-2.1.1.tgz#66acba06ed5ee28d5286133982a927de9a04b510" - integrity sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w== - -cbor@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-5.2.0.tgz#4cca67783ccd6de7b50ab4ed62636712f287a67c" - integrity sha512-5IMhi9e1QU76ppa5/ajP1BmMWZ2FHkhAhjeVKQ/EFCgYSEaeVaoGtL7cxJskf9oCCk+XjzaIdc3IuU/dbA/o2A== - dependencies: - bignumber.js "^9.0.1" - nofilter "^1.0.4" - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chai-bn@^0.2.1: - version "0.2.2" - resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" - integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== - -chai@^4.2.0, chai@^4.3.6: - version "4.4.1" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" - integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.3" - deep-eql "^4.1.3" - get-func-name "^2.0.2" - loupe "^2.3.6" - pathval "^1.1.1" - type-detect "^4.0.8" - -chalk@^2.3.2, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -change-case@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" - integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== - dependencies: - camel-case "^3.0.0" - constant-case "^2.0.0" - dot-case "^2.1.0" - header-case "^1.0.0" - is-lower-case "^1.1.0" - is-upper-case "^1.1.0" - lower-case "^1.1.1" - lower-case-first "^1.0.0" - no-case "^2.3.2" - param-case "^2.1.0" - pascal-case "^2.0.0" - path-case "^2.1.0" - sentence-case "^2.1.0" - snake-case "^2.1.0" - swap-case "^1.1.0" - title-case "^2.1.0" - upper-case "^1.1.1" - upper-case-first "^1.1.0" - -"charenc@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" - integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== - -check-error@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" - integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== - dependencies: - get-func-name "^2.0.2" - -cheerio-select@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" - integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== - dependencies: - boolbase "^1.0.0" - css-select "^5.1.0" - css-what "^6.1.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - -cheerio@^1.0.0-rc.2: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== - dependencies: - cheerio-select "^2.1.0" - dom-serializer "^2.0.0" - domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" - parse5-htmlparser2-tree-adapter "^7.0.0" - -chokidar@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chokidar@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -ci-info@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" - integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== - -cids@^0.7.1: - version "0.7.5" - resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2" - integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA== - dependencies: - buffer "^5.5.0" - class-is "^1.1.0" - multibase "~0.6.0" - multicodec "^1.0.0" - multihashes "~0.4.15" - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-is@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" - integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== - -classic-level@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/classic-level/-/classic-level-1.4.1.tgz#169ecf9f9c6200ad42a98c8576af449c1badbaee" - integrity sha512-qGx/KJl3bvtOHrGau2WklEZuXhS3zme+jf+fsu6Ej7W7IP/C49v7KNlWIsT1jZu0YnfzSIYDGcEWpCa1wKGWXQ== - dependencies: - abstract-level "^1.0.2" - catering "^2.1.0" - module-error "^1.0.1" - napi-macros "^2.2.2" - node-gyp-build "^4.3.0" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-boxes@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" - integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-table3@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-buffer@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g== - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA== - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colors@1.4.0, colors@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - -combined-stream@^1.0.6, combined-stream@^1.0.8, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -command-exists@^1.2.8: - version "1.2.9" - resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" - integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== - -commander@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" - integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.3: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -concat-stream@^1.6.0, concat-stream@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -conf@^10.1.2: - version "10.2.0" - resolved "https://registry.yarnpkg.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6" - integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg== - dependencies: - ajv "^8.6.3" - ajv-formats "^2.1.1" - atomically "^1.7.0" - debounce-fn "^4.0.0" - dot-prop "^6.0.1" - env-paths "^2.2.1" - json-schema-typed "^7.0.3" - onetime "^5.1.2" - pkg-up "^3.1.0" - semver "^7.3.5" - -config-chain@^1.1.11: - version "1.1.13" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.13.tgz#fad0795aa6a6cdaff9ed1b68e9dff94372c232f4" - integrity sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ== - dependencies: - ini "^1.3.4" - proto-list "~1.2.1" - -constant-case@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" - integrity sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ== - dependencies: - snake-case "^2.1.0" - upper-case "^1.1.1" - -content-disposition@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" - integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== - dependencies: - safe-buffer "5.2.1" - -content-hash@^2.5.2: - version "2.5.2" - resolved "https://registry.yarnpkg.com/content-hash/-/content-hash-2.5.2.tgz#bbc2655e7c21f14fd3bfc7b7d4bfe6e454c9e211" - integrity sha512-FvIQKy0S1JaWV10sMsA7TRx8bpU+pqPkhbsfvOJAdjRXvYxEckAwQWGwtRjiaJfh+E0DvcWUGqcdjwMGFjsSdw== - dependencies: - cids "^0.7.1" - multicodec "^0.5.5" - multihashes "^0.4.15" - -content-type@~1.0.4, content-type@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" - integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== - -cookie@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" - integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== - -cookie@^0.4.1: - version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" - integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -core-util-is@~1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" - integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== - -cors@^2.8.1, cors@^2.8.5: - version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" - integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== - dependencies: - object-assign "^4" - vary "^1" - -cosmiconfig@^8.0.0: - version "8.3.6" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" - integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== - dependencies: - import-fresh "^3.3.0" - js-yaml "^4.1.0" - parse-json "^5.2.0" - path-type "^4.0.0" - -crc-32@^1.2.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff" - integrity sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ== - -create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.4, create-hmac@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-fetch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" - integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== - dependencies: - node-fetch "^2.6.12" - -cross-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-4.0.0.tgz#f037aef1580bb3a1a35164ea2a848ba81b445983" - integrity sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g== - dependencies: - node-fetch "^2.6.12" - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -"crypt@>= 0.0.1": - version "0.0.2" - resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" - integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== - -crypto-addr-codec@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.8.tgz#45c4b24e2ebce8e24a54536ee0ca25b65787b016" - integrity sha512-GqAK90iLLgP3FvhNmHbpT3wR6dEdaM8hZyZtLX29SPardh3OA13RFLHDR6sntGCgRWOfiHqW6sIyohpNqOtV/g== - dependencies: - base-x "^3.0.8" - big-integer "1.6.36" - blakejs "^1.1.0" - bs58 "^4.0.1" - ripemd160-min "0.0.6" - safe-buffer "^5.2.0" - sha3 "^2.1.1" - -css-select@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" - integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== - dependencies: - boolbase "^1.0.0" - css-what "^6.1.0" - domhandler "^5.0.2" - domutils "^3.0.1" - nth-check "^2.0.1" - -css-what@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" - integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== - -cssfilter@0.0.10: - version "0.0.10" - resolved "https://registry.yarnpkg.com/cssfilter/-/cssfilter-0.0.10.tgz#c6d2672632a2e5c83e013e6864a42ce8defd20ae" - integrity sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw== - -custom-error-test-helper@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/custom-error-test-helper/-/custom-error-test-helper-1.0.6.tgz#84358bc8c964470bd87223d1813bf90faee5e837" - integrity sha512-mtSur97B5c2Nxx0HS7VQtVl9FMNl/Xf13RxTWwfMLIKnNVror/e43ll6VWjs+J5gP2E6AZn5+Z0AqTNF5UXIcw== - dependencies: - "@ethersproject/abi" "^5.7.0" - "@ethersproject/bytes" "^5.7.0" - "@ethersproject/solidity" "^5.7.0" - chai "^4.3.6" - -d@1, d@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" - integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== - dependencies: - es5-ext "^0.10.50" - type "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dataloader@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.1.0.tgz#c69c538235e85e7ac6c6c444bae8ecabf5de9df7" - integrity sha512-qTcEYLen3r7ojZNgVUaRggOI+KM7jrKxXeSHhogh/TWxYMeONEMqY+hmkobiYQozsGIyg9OYVzO4ZIfoB4I0pQ== - -debounce-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7" - integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ== - dependencies: - mimic-fn "^3.0.0" - -debug@2.6.9, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.1.0, debug@^3.2.7: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== - -decamelize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" - integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== - -decode-uri-component@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" - integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== - -decompress-response@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" - integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== - dependencies: - mimic-response "^1.0.0" - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deep-eql@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" - integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== - dependencies: - type-detect "^4.0.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" - integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== - -defer-to-connect@^2.0.0, defer-to-connect@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -deferred-leveldown@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" - integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== - dependencies: - abstract-leveldown "~6.2.1" - inherits "^2.0.3" - -define-data-property@^1.0.1, define-data-property@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" - integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== - dependencies: - es-define-property "^1.0.0" - es-errors "^1.3.0" - gopd "^1.0.1" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delay@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d" - integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -depd@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -destroy@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" - integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== - -detect-indent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-5.0.0.tgz#3871cc0a6a002e8c3e5b3cf7f336264675f06b9d" - integrity sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g== - -diff@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" - integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -dom-serializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" - integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.2" - entities "^4.2.0" - -dom-walk@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" - integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== - -domelementtype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" - integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== - -domhandler@^5.0.2, domhandler@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" - integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== - dependencies: - domelementtype "^2.3.0" - -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== - dependencies: - dom-serializer "^2.0.0" - domelementtype "^2.3.0" - domhandler "^5.0.3" - -dot-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" - integrity sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug== - dependencies: - no-case "^2.2.0" - -dot-prop@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083" - integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA== - dependencies: - is-obj "^2.0.0" - -dotenv@^16.4.1: - version "16.4.4" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.4.tgz#a26e7bb95ebd36272ebb56edb80b826aecf224c1" - integrity sha512-XvPXc8XAQThSjAbY6cQ/9PcBXmFoWuw1sQ3b8HqUCR6ziGXjkTi//kB9SWa2UwqlgdAIuRqAa/9hVljzPehbYg== - -double-ended-queue@2.1.0-0: - version "2.1.0-0" - resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" - integrity sha512-+BNfZ+deCo8hMNpDqDnvT+c0XpJ5cUa6mqYq89bho2Ifze4URTqRkcwR399hWoTrTkbZ/XJYDgP6rc7pRgffEQ== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== - -elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.4: - version "6.5.4" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" - integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== - dependencies: - bn.js "^4.11.9" - brorand "^1.1.0" - hash.js "^1.0.0" - hmac-drbg "^1.0.1" - inherits "^2.0.4" - minimalistic-assert "^1.0.1" - minimalistic-crypto-utils "^1.0.1" - -emittery@0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.0.tgz#bb373c660a9d421bb44706ec4967ed50c02a8026" - integrity sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ== - -emittery@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" - integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== - -encoding-down@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" - integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== - dependencies: - abstract-leveldown "^6.2.1" - inherits "^2.0.3" - level-codec "^9.0.0" - level-errors "^2.0.0" - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -end-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/end-stream/-/end-stream-0.1.0.tgz#32003f3f438a2b0143168137f8fa6e9866c81ed5" - integrity sha512-Brl10T8kYnc75IepKizW6Y9liyW8ikz1B7n/xoHrJxoVSSjoqPn30sb7XVFfQERK4QfUMYRGs9dhWwtt2eu6uA== - dependencies: - write-stream "~0.4.3" - -enquirer@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" - integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== - dependencies: - ansi-colors "^4.1.1" - strip-ansi "^6.0.1" - -entities@^4.2.0, entities@^4.4.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -env-paths@^2.2.0, env-paths@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" - integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== - -errno@~0.1.1: - version "0.1.8" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" - integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== - dependencies: - prr "~1.0.1" - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -es-abstract@^1.22.1, es-abstract@^1.22.3: - version "1.22.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.4.tgz#26eb2e7538c3271141f5754d31aabfdb215f27bf" - integrity sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg== - dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" - available-typed-arrays "^1.0.6" - call-bind "^1.0.7" - es-define-property "^1.0.0" - es-errors "^1.3.0" - es-set-tostringtag "^2.0.2" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.1" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.0" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.1" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.14" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" - -es-errors@^1.0.0, es-errors@^1.2.1, es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-set-tostringtag@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== - dependencies: - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es5-ext@^0.10.35, es5-ext@^0.10.50: - version "0.10.62" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5" - integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA== - dependencies: - es6-iterator "^2.0.3" - es6-symbol "^3.1.3" - next-tick "^1.1.0" - -es6-iterator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" - integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g== - dependencies: - d "1" - es5-ext "^0.10.35" - es6-symbol "^3.1.1" - -es6-promise@^4.2.8: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-symbol@^3.1.1, es6-symbol@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" - integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== - dependencies: - d "^1.0.1" - ext "^1.1.2" - -escalade@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== - -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== - -escape-string-regexp@4.0.0, escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -eslint-compat-utils@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz#f45e3b5ced4c746c127cf724fb074cd4e730d653" - integrity sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg== - -eslint-config-standard@^17.1.0: - version "17.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-17.1.0.tgz#40ffb8595d47a6b242e07cbfd49dc211ed128975" - integrity sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q== - -eslint-import-resolver-node@^0.3.9: - version "0.3.9" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz#d4eaac52b8a2e7c3cd1903eb00f7e053356118ac" - integrity sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g== - dependencies: - debug "^3.2.7" - is-core-module "^2.13.0" - resolve "^1.22.4" - -eslint-module-utils@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz#e439fee65fc33f6bba630ff621efc38ec0375c49" - integrity sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw== - dependencies: - debug "^3.2.7" - -eslint-plugin-es-x@^7.5.0: - version "7.5.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz#d08d9cd155383e35156c48f736eb06561d07ba92" - integrity sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ== - dependencies: - "@eslint-community/eslint-utils" "^4.1.2" - "@eslint-community/regexpp" "^4.6.0" - eslint-compat-utils "^0.1.2" - -eslint-plugin-import@^2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== - dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" - array.prototype.flat "^1.3.2" - array.prototype.flatmap "^1.3.2" - debug "^3.2.7" - doctrine "^2.1.0" - eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" - is-glob "^4.0.3" - minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" - semver "^6.3.1" - tsconfig-paths "^3.15.0" - -eslint-plugin-n@^16.6.2: - version "16.6.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz#6a60a1a376870064c906742272074d5d0b412b0b" - integrity sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ== - dependencies: - "@eslint-community/eslint-utils" "^4.4.0" - builtins "^5.0.1" - eslint-plugin-es-x "^7.5.0" - get-tsconfig "^4.7.0" - globals "^13.24.0" - ignore "^5.2.4" - is-builtin-module "^3.2.1" - is-core-module "^2.12.1" - minimatch "^3.1.2" - resolve "^1.22.2" - semver "^7.5.3" - -eslint-plugin-promise@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz#269a3e2772f62875661220631bd4dafcb4083816" - integrity sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig== - -eslint-scope@^7.2.2: - version "7.2.2" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" - integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== - dependencies: - esrecurse "^4.3.0" - estraverse "^5.2.0" - -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -eslint@^8.56.0: - version "8.56.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.56.0.tgz#4957ce8da409dc0809f99ab07a1b94832ab74b15" - integrity sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ== - dependencies: - "@eslint-community/eslint-utils" "^4.2.0" - "@eslint-community/regexpp" "^4.6.1" - "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.56.0" - "@humanwhocodes/config-array" "^0.11.13" - "@humanwhocodes/module-importer" "^1.0.1" - "@nodelib/fs.walk" "^1.2.8" - "@ungap/structured-clone" "^1.2.0" - ajv "^6.12.4" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.3.2" - doctrine "^3.0.0" - escape-string-regexp "^4.0.0" - eslint-scope "^7.2.2" - eslint-visitor-keys "^3.4.3" - espree "^9.6.1" - esquery "^1.4.2" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - find-up "^5.0.0" - glob-parent "^6.0.2" - globals "^13.19.0" - graphemer "^1.4.0" - ignore "^5.2.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - is-path-inside "^3.0.3" - js-yaml "^4.1.0" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.1.2" - natural-compare "^1.4.0" - optionator "^0.9.3" - strip-ansi "^6.0.1" - text-table "^0.2.0" - -espree@^9.6.0, espree@^9.6.1: - version "9.6.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" - integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== - dependencies: - acorn "^8.9.0" - acorn-jsx "^5.3.2" - eslint-visitor-keys "^3.4.1" - -esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== - -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" - integrity sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw== - dependencies: - idna-uts46-hx "^2.3.1" - js-sha3 "^0.5.7" - -eth-gas-reporter@^0.2.27: - version "0.2.27" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" - integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== - dependencies: - "@solidity-parser/parser" "^0.14.0" - axios "^1.5.1" - cli-table3 "^0.5.0" - colors "1.4.0" - ethereum-cryptography "^1.0.3" - ethers "^5.7.2" - fs-readdir-recursive "^1.1.0" - lodash "^4.17.14" - markdown-table "^1.1.3" - mocha "^10.2.0" - req-cwd "^2.0.0" - sha1 "^1.1.1" - sync-request "^6.0.0" - -eth-helpers@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/eth-helpers/-/eth-helpers-1.3.1.tgz#e41d7a8f04d42f1b887bde2eb8d6de19a901c47c" - integrity sha512-iEcqhro1pqnZbnE3te0KDargTadc1J4zAiV0J1dwBDPo5nbHYBMxPDLQFA+0sMKUxe7cjHtMger6/75ukN3P5A== - dependencies: - nanoassert "^2.0.0" - -eth-lib@0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" - integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - xhr-request-promise "^0.1.2" - -eth-lib@^0.1.26: - version "0.1.29" - resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.1.29.tgz#0c11f5060d42da9f931eab6199084734f4dbd1d9" - integrity sha512-bfttrr3/7gG4E02HoWTDUcDDslN003OlOoBxk9virpAZQ1ja/jDgwkWB8QfJF7ojuEowrqy+lzp9VcJG7/k5bQ== - dependencies: - bn.js "^4.11.6" - elliptic "^6.4.0" - nano-json-stream-parser "^0.1.2" - servify "^0.1.12" - ws "^3.0.0" - xhr-request-promise "^0.1.2" - -ethereum-bloom-filters@^1.0.6: - version "1.0.10" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" - integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== - dependencies: - js-sha3 "^0.8.0" - -ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" - integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== - dependencies: - "@types/pbkdf2" "^3.0.0" - "@types/secp256k1" "^4.0.1" - blakejs "^1.1.0" - browserify-aes "^1.2.0" - bs58check "^2.1.2" - create-hash "^1.2.0" - create-hmac "^1.1.7" - hash.js "^1.1.7" - keccak "^3.0.0" - pbkdf2 "^3.0.17" - randombytes "^2.1.0" - safe-buffer "^5.1.2" - scrypt-js "^3.0.0" - secp256k1 "^4.0.1" - setimmediate "^1.0.5" - -ethereum-cryptography@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" - integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== - dependencies: - "@noble/hashes" "1.2.0" - "@noble/secp256k1" "1.7.1" - "@scure/bip32" "1.1.5" - "@scure/bip39" "1.1.1" - -ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" - integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== - dependencies: - "@noble/curves" "1.3.0" - "@noble/hashes" "1.3.3" - "@scure/bip32" "1.3.3" - "@scure/bip39" "1.2.2" - -ethereumjs-abi@^0.6.8: - version "0.6.8" - resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" - integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== - dependencies: - bn.js "^4.11.8" - ethereumjs-util "^6.0.0" - -ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" - integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== - dependencies: - "@types/bn.js" "^4.11.3" - bn.js "^4.11.0" - create-hash "^1.1.2" - elliptic "^6.5.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.3" - -ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.5: - version "7.1.5" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" - integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - rlp "^2.2.4" - -ethers@^4.0.32: - version "4.0.49" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" - integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== - dependencies: - aes-js "3.0.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.3" - js-sha3 "0.5.7" - scrypt-js "2.0.4" - setimmediate "1.0.4" - uuid "2.0.1" - xmlhttprequest "1.8.0" - -ethers@^5.0.13, ethers@^5.7.1, ethers@^5.7.2: - version "5.7.2" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" - integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== - dependencies: - "@ethersproject/abi" "5.7.0" - "@ethersproject/abstract-provider" "5.7.0" - "@ethersproject/abstract-signer" "5.7.0" - "@ethersproject/address" "5.7.0" - "@ethersproject/base64" "5.7.0" - "@ethersproject/basex" "5.7.0" - "@ethersproject/bignumber" "5.7.0" - "@ethersproject/bytes" "5.7.0" - "@ethersproject/constants" "5.7.0" - "@ethersproject/contracts" "5.7.0" - "@ethersproject/hash" "5.7.0" - "@ethersproject/hdnode" "5.7.0" - "@ethersproject/json-wallets" "5.7.0" - "@ethersproject/keccak256" "5.7.0" - "@ethersproject/logger" "5.7.0" - "@ethersproject/networks" "5.7.1" - "@ethersproject/pbkdf2" "5.7.0" - "@ethersproject/properties" "5.7.0" - "@ethersproject/providers" "5.7.2" - "@ethersproject/random" "5.7.0" - "@ethersproject/rlp" "5.7.0" - "@ethersproject/sha2" "5.7.0" - "@ethersproject/signing-key" "5.7.0" - "@ethersproject/solidity" "5.7.0" - "@ethersproject/strings" "5.7.0" - "@ethersproject/transactions" "5.7.0" - "@ethersproject/units" "5.7.0" - "@ethersproject/wallet" "5.7.0" - "@ethersproject/web" "5.7.1" - "@ethersproject/wordlists" "5.7.0" - -ethjs-abi@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.2.1.tgz#e0a7a93a7e81163a94477bad56ede524ab6de533" - integrity sha512-g2AULSDYI6nEJyJaEVEXtTimRY2aPC2fi7ddSy0W+LXvEVL8Fe1y76o43ecbgdUKwZD+xsmEgX1yJr1Ia3r1IA== - dependencies: - bn.js "4.11.6" - js-sha3 "0.5.5" - number-to-bn "1.7.0" - -ethjs-unit@0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" - integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== - dependencies: - bn.js "4.11.6" - number-to-bn "1.7.0" - -ethjs-util@0.1.6, ethjs-util@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" - integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== - dependencies: - is-hex-prefixed "1.0.0" - strip-hex-prefix "1.0.0" - -event-target-shim@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" - integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== - -eventemitter3@4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" - integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== - -evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -express@^4.14.0, express@^4.17.1: - version "4.18.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" - integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== - dependencies: - accepts "~1.3.8" - array-flatten "1.1.1" - body-parser "1.20.1" - content-disposition "0.5.4" - content-type "~1.0.4" - cookie "0.5.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "2.0.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "1.2.0" - fresh "0.5.2" - http-errors "2.0.0" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "2.4.1" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.7" - qs "6.11.0" - range-parser "~1.2.1" - safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" - setprototypeof "1.2.0" - statuses "2.0.1" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -ext@^1.1.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f" - integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw== - dependencies: - type "^2.7.2" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-check@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.1.1.tgz#72c5ae7022a4e86504762e773adfb8a5b0b01252" - integrity sha512-3vtXinVyuUKCKFKYcwXhGE6NtGWkqF8Yh3rvMZNzmwz8EPrgoc/v4pDdLHyLnCyCI5MZpZZkDEwFyXyEONOxpA== - dependencies: - pure-rand "^5.0.1" - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.2.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - -fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== - -fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== - dependencies: - reusify "^1.0.4" - -fetch-cookie@0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/fetch-cookie/-/fetch-cookie-0.11.0.tgz#e046d2abadd0ded5804ce7e2cae06d4331c15407" - integrity sha512-BQm7iZLFhMWFy5CZ/162sAGjBfdNWb7a8LEqqnzsHFhxT/X/SVj/z2t2nu3aJvjlbQkrAlTUApplPRjWyH4mhA== - dependencies: - tough-cookie "^2.3.3 || ^3.0.1 || ^4.0.0" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "2.4.1" - parseurl "~1.3.3" - statuses "2.0.1" - unpipe "~1.0.0" - -find-up@5.0.0, find-up@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" - integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== - dependencies: - locate-path "^6.0.0" - path-exists "^4.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA== - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - -flat-cache@^3.0.4: - version "3.2.0" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" - integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== - dependencies: - flatted "^3.2.9" - keyv "^4.5.3" - rimraf "^3.0.2" - -flat@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" - integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== - -flatted@^3.2.9: - version "3.2.9" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.9.tgz#7eb4c67ca1ba34232ca9d2d93e9886e611ad7daf" - integrity sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ== - -follow-redirects@^1.12.1, follow-redirects@^1.15.0, follow-redirects@^1.15.4: - version "1.15.5" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" - integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -foreach@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.6.tgz#87bcc8a1a0e74000ff2bf9802110708cfb02eb6e" - integrity sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg== - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data-encoder@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-1.7.1.tgz#ac80660e4f87ee0d3d3c3638b7da8278ddb8ec96" - integrity sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg== - -form-data-encoder@^2.1.2: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data-encoder/-/form-data-encoder-2.1.4.tgz#261ea35d2a70d48d30ec7a9603130fa5515e9cd5" - integrity sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw== - -form-data@^2.2.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" - integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" - integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== - -fp-ts@1.19.3: - version "1.19.3" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" - integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== - -fp-ts@^1.0.0: - version "1.19.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" - integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== - -fs-extra@^0.30.0: - version "0.30.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" - integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^2.1.0" - klaw "^1.0.0" - path-is-absolute "^1.0.0" - rimraf "^2.2.8" - -fs-extra@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" - integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-readdir-recursive@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" - integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -ganache@7.9.1: - version "7.9.1" - resolved "https://registry.yarnpkg.com/ganache/-/ganache-7.9.1.tgz#94f8518215c7989ff5fd542db80bd47d7c7da786" - integrity sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA== - dependencies: - "@trufflesuite/bigint-buffer" "1.1.10" - "@trufflesuite/uws-js-unofficial" "20.30.0-unofficial.0" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "5.1.1" - "@types/seedrandom" "3.0.1" - abstract-level "1.0.3" - abstract-leveldown "7.2.0" - async-eventemitter "0.2.4" - emittery "0.10.0" - keccak "3.0.2" - leveldown "6.1.0" - secp256k1 "4.0.3" - optionalDependencies: - bufferutil "4.0.5" - utf-8-validate "5.0.7" - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-func-name@^2.0.1, get-func-name@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" - integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== - -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-port@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" - integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-stream@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== - dependencies: - call-bind "^1.0.5" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - -get-tsconfig@^4.7.0: - version "4.7.2" - resolved "https://registry.yarnpkg.com/get-tsconfig/-/get-tsconfig-4.7.2.tgz#0dcd6fb330391d46332f4c6c1bf89a6514c2ddce" - integrity sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A== - dependencies: - resolve-pkg-maps "^1.0.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" - integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== - dependencies: - is-glob "^4.0.3" - -glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@8.1.0, glob@^8.0.3: - version "8.1.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" - integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^5.0.1" - once "^1.3.0" - -glob@^7.1.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global@~4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/global/-/global-4.4.0.tgz#3e7b105179006a323ed71aafca3e9c57a5cc6406" - integrity sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w== - dependencies: - min-document "^2.19.0" - process "^0.11.10" - -globals@^13.19.0, globals@^13.24.0: - version "13.24.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" - integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== - dependencies: - type-fest "^0.20.2" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -got@12.1.0: - version "12.1.0" - resolved "https://registry.yarnpkg.com/got/-/got-12.1.0.tgz#099f3815305c682be4fd6b0ee0726d8e4c6b0af4" - integrity sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig== - dependencies: - "@sindresorhus/is" "^4.6.0" - "@szmarczak/http-timer" "^5.0.1" - "@types/cacheable-request" "^6.0.2" - "@types/responselike" "^1.0.0" - cacheable-lookup "^6.0.4" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - form-data-encoder "1.7.1" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^2.0.0" - -got@^11.8.5: - version "11.8.6" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" - integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -got@^12.1.0: - version "12.6.1" - resolved "https://registry.yarnpkg.com/got/-/got-12.6.1.tgz#8869560d1383353204b5a9435f782df9c091f549" - integrity sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ== - dependencies: - "@sindresorhus/is" "^5.2.0" - "@szmarczak/http-timer" "^5.0.1" - cacheable-lookup "^7.0.0" - cacheable-request "^10.2.8" - decompress-response "^6.0.0" - form-data-encoder "^2.1.2" - get-stream "^6.0.1" - http2-wrapper "^2.1.10" - lowercase-keys "^3.0.0" - p-cancelable "^3.0.0" - responselike "^3.0.0" - -graceful-fs@4.2.10: - version "4.2.10" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -graphemer@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" - integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== - -graphql-tag@^2.11.0, graphql-tag@^2.12.6: - version "2.12.6" - resolved "https://registry.yarnpkg.com/graphql-tag/-/graphql-tag-2.12.6.tgz#d441a569c1d2537ef10ca3d1633b48725329b5f1" - integrity sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg== - dependencies: - tslib "^2.1.0" - -graphql@^15.3.0: - version "15.8.0" - resolved "https://registry.yarnpkg.com/graphql/-/graphql-15.8.0.tgz#33410e96b012fa3bdb1091cc99a94769db212b38" - integrity sha512-5gghUc24tP9HRznNpV2+FIoq3xKkj5dTQqf4v0CpdPbFVwFkWoxOM+o+2OC9ZSvjEMTjfmG9QT+gcvggTwW1zw== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== - -har-validator@~5.1.3: - version "5.1.5" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" - integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== - dependencies: - ajv "^6.12.3" - har-schema "^2.0.0" - -hardhat@^2.19.5: - version "2.19.5" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.19.5.tgz#6017c35ae2844b669e9bcc84c3d05346d4ef031c" - integrity sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw== - dependencies: - "@ethersproject/abi" "^5.1.2" - "@metamask/eth-sig-util" "^4.0.0" - "@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/solidity-analyzer" "^0.1.0" - "@sentry/node" "^5.18.1" - "@types/bn.js" "^5.1.0" - "@types/lru-cache" "^5.1.0" - adm-zip "^0.4.16" - aggregate-error "^3.0.0" - ansi-escapes "^4.3.0" - boxen "^5.1.2" - chalk "^2.4.2" - chokidar "^3.4.0" - ci-info "^2.0.0" - debug "^4.1.1" - enquirer "^2.3.0" - env-paths "^2.2.0" - ethereum-cryptography "^1.0.3" - ethereumjs-abi "^0.6.8" - find-up "^2.1.0" - fp-ts "1.19.3" - fs-extra "^7.0.1" - glob "7.2.0" - immutable "^4.0.0-rc.12" - io-ts "1.10.4" - keccak "^3.0.2" - lodash "^4.17.11" - mnemonist "^0.38.0" - mocha "^10.0.0" - p-map "^4.0.0" - raw-body "^2.4.1" - resolve "1.17.0" - semver "^6.3.0" - solc "0.7.3" - source-map-support "^0.5.13" - stacktrace-parser "^0.1.10" - tsort "0.0.1" - undici "^5.14.0" - uuid "^8.3.2" - ws "^7.4.6" - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" - integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== - dependencies: - es-define-property "^1.0.0" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0, has-tostringtag@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hash-base@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" - integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== - dependencies: - inherits "^2.0.4" - readable-stream "^3.6.0" - safe-buffer "^5.2.0" - -hash.js@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" - integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasown@^2.0.0, hasown@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" - integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== - dependencies: - function-bind "^1.1.2" - -he@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -header-case@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" - integrity sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ== - dependencies: - no-case "^2.2.0" - upper-case "^1.1.3" - -highlight.js@^10.4.1: - version "10.7.3" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" - integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== - -highlightjs-solidity@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.6.tgz#e7a702a2b05e0a97f185e6ba39fd4846ad23a990" - integrity sha512-DySXWfQghjm2l6a/flF+cteroJqD4gI8GSdL4PtvxZSsAHie8m3yVe2JFoRg03ROKT6hp2Lc/BxXkqerNmtQYg== - -hmac-drbg@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== - dependencies: - domelementtype "^2.3.0" - domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" - -http-basic@^8.1.1: - version "8.1.3" - resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" - integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== - dependencies: - caseless "^0.12.0" - concat-stream "^1.6.2" - http-response-object "^3.0.1" - parse-cache-control "^1.0.1" - -http-cache-semantics@^4.0.0, http-cache-semantics@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" - integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== - -http-errors@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" - integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== - dependencies: - depd "2.0.0" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses "2.0.1" - toidentifier "1.0.1" - -http-https@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/http-https/-/http-https-1.0.0.tgz#2f908dd5f1db4068c058cd6e6d4ce392c913389b" - integrity sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg== - -http-response-object@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" - integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== - dependencies: - "@types/node" "^10.0.3" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -http2-wrapper@^2.1.10: - version "2.2.1" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-2.2.1.tgz#310968153dcdedb160d8b72114363ef5fce1f64a" - integrity sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.2.0" - -https-proxy-agent@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" - integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== - dependencies: - agent-base "6" - debug "4" - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -idna-uts46-hx@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz#a1dc5c4df37eee522bf66d969cc980e00e8711f9" - integrity sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA== - dependencies: - punycode "2.1.0" - -ieee754@^1.1.13, ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0, ignore@^5.2.4: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== - -immediate@3.3.0, immediate@^3.2.3: - version "3.3.0" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.3.0.tgz#1aef225517836bcdf7f2a2de2600c79ff0269266" - integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== - -immutable@^4.0.0-rc.12: - version "4.3.5" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" - integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== - -import-fresh@^3.2.1, import-fresh@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@^1.3.4, ini@~1.3.0: - version "1.3.8" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== - dependencies: - es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" - -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ== - -io-ts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" - integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== - dependencies: - fp-ts "^1.0.0" - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-arguments@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-buffer@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" - integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== - -is-builtin-module@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.2.1.tgz#f03271717d8654cfcaf07ab0463faa3571581169" - integrity sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A== - dependencies: - builtin-modules "^3.3.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-core-module@^2.12.1, is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw== - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-function@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" - integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== - -is-generator-function@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" - integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== - dependencies: - has-tostringtag "^1.0.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hex-prefixed@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" - integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== - -is-lower-case@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" - integrity sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA== - dependencies: - lower-case "^1.1.0" - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-path-inside@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.13, is-typed-array@^1.1.3, is-typed-array@^1.1.9: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== - dependencies: - which-typed-array "^1.1.14" - -is-typedarray@^1.0.0, is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-upper-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" - integrity sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw== - dependencies: - upper-case "^1.1.0" - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-ws@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc" - integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -js-sdsl@^4.1.4: - version "4.4.2" - resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.4.2.tgz#2e3c031b1f47d3aca8b775532e3ebb0818e7f847" - integrity sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w== - -js-sha256@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.11.0.tgz#256a921d9292f7fe98905face82e367abaca9576" - integrity sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q== - -js-sha3@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" - integrity sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA== - -js-sha3@0.5.7, js-sha3@^0.5.7: - version "0.5.7" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.7.tgz#0d4ffd8002d5333aabaf4a23eed2f6374c9f28e7" - integrity sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g== - -js-sha3@0.8.0, js-sha3@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" - integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@4.1.0, js-yaml@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" - integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== - dependencies: - argparse "^2.0.1" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-buffer@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - -json-pointer@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/json-pointer/-/json-pointer-0.6.2.tgz#f97bd7550be5e9ea901f8c9264c9d436a22a93cd" - integrity sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw== - dependencies: - foreach "^2.0.4" - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-schema-typed@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9" - integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== - -json-stable-stringify@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz#52d4361b47d49168bcc4e564189a42e5a7439454" - integrity sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg== - dependencies: - call-bind "^1.0.5" - isarray "^2.0.5" - jsonify "^0.0.1" - object-keys "^1.1.1" - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593" - integrity sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA== - dependencies: - minimist "^1.2.0" - -jsonfile@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" - integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== - optionalDependencies: - graceful-fs "^4.1.6" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.1.tgz#2aa3111dae3d34a0f151c63f3a45d995d9420978" - integrity sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg== - -jsprim@^1.2.2: - version "1.4.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" - integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -keccak@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" - integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keccak@^3.0.0, keccak@^3.0.2: - version "3.0.4" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" - integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== - dependencies: - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - readable-stream "^3.6.0" - -keyv@^4.0.0, keyv@^4.5.3: - version "4.5.4" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" - integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== - dependencies: - json-buffer "3.0.1" - -klaw@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" - integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== - optionalDependencies: - graceful-fs "^4.1.9" - -latest-version@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-7.0.0.tgz#843201591ea81a4d404932eeb61240fe04e9e5da" - integrity sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg== - dependencies: - package-json "^8.1.0" - -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw== - dependencies: - invert-kv "^1.0.0" - -level-codec@9.0.2, level-codec@^9.0.0: - version "9.0.2" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-9.0.2.tgz#fd60df8c64786a80d44e63423096ffead63d8cbc" - integrity sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ== - dependencies: - buffer "^5.6.0" - -level-concat-iterator@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz#5235b1f744bc34847ed65a50548aa88d22e881cf" - integrity sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ== - dependencies: - catering "^2.1.0" - -level-concat-iterator@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" - integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== - -level-errors@^2.0.0, level-errors@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-2.0.1.tgz#2132a677bf4e679ce029f517c2f17432800c05c8" - integrity sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" - integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== - dependencies: - inherits "^2.0.4" - readable-stream "^3.4.0" - xtend "^4.0.2" - -level-js@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/level-js/-/level-js-5.0.2.tgz#5e280b8f93abd9ef3a305b13faf0b5397c969b55" - integrity sha512-SnBIDo2pdO5VXh02ZmtAyPP6/+6YTJg2ibLtl9C34pWvmtMEmRTWpra+qO/hifkUtBTOtfx6S9vLDjBsBK4gRg== - dependencies: - abstract-leveldown "~6.2.3" - buffer "^5.5.0" - inherits "^2.0.3" - ltgt "^2.1.2" - -level-packager@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" - integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== - dependencies: - encoding-down "^6.3.0" - levelup "^4.3.2" - -level-supports@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-2.1.0.tgz#9af908d853597ecd592293b2fad124375be79c5f" - integrity sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA== - -level-supports@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-4.0.1.tgz#431546f9d81f10ff0fea0e74533a0e875c08c66a" - integrity sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA== - -level-supports@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" - integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== - dependencies: - xtend "^4.0.2" - -level-transcoder@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/level-transcoder/-/level-transcoder-1.0.1.tgz#f8cef5990c4f1283d4c86d949e73631b0bc8ba9c" - integrity sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w== - dependencies: - buffer "^6.0.3" - module-error "^1.0.1" - -level-write-stream@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/level-write-stream/-/level-write-stream-1.0.0.tgz#3f7fbb679a55137c0feb303dee766e12ee13c1dc" - integrity sha512-bBNKOEOMl8msO+uIM9YX/gUO6ckokZ/4pCwTm/lwvs46x6Xs8Zy0sn3Vh37eDqse4mhy4fOMIb/JsSM2nyQFtw== - dependencies: - end-stream "~0.1.0" - -level@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-6.0.1.tgz#dc34c5edb81846a6de5079eac15706334b0d7cd6" - integrity sha512-psRSqJZCsC/irNhfHzrVZbmPYXDcEYhA5TVNwr+V92jF44rbf86hqGp8fiT702FyiArScYIlPSBTDUASCVNSpw== - dependencies: - level-js "^5.0.0" - level-packager "^5.1.0" - leveldown "^5.4.0" - -level@^8.0.0: - version "8.0.1" - resolved "https://registry.yarnpkg.com/level/-/level-8.0.1.tgz#737161db1bc317193aca4e7b6f436e7e1df64379" - integrity sha512-oPBGkheysuw7DmzFQYyFe8NAia5jFLAgEnkgWnK3OXAuJr8qFT+xBQIwokAZPME2bhPFzS8hlYcL16m8UZrtwQ== - dependencies: - abstract-level "^1.0.4" - browser-level "^1.0.1" - classic-level "^1.2.0" - -leveldown@5.6.0, leveldown@^5.4.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-5.6.0.tgz#16ba937bb2991c6094e13ac5a6898ee66d3eee98" - integrity sha512-iB8O/7Db9lPaITU1aA2txU/cBEXAt4vWwKQRrrWuS6XDgbP4QZGj9BL2aNbwb002atoQ/lIotJkfyzz+ygQnUQ== - dependencies: - abstract-leveldown "~6.2.1" - napi-macros "~2.0.0" - node-gyp-build "~4.1.0" - -leveldown@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/leveldown/-/leveldown-6.1.0.tgz#7ab1297706f70c657d1a72b31b40323aa612b9ee" - integrity sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w== - dependencies: - abstract-leveldown "^7.2.0" - napi-macros "~2.0.0" - node-gyp-build "^4.3.0" - -levelup@4.4.0, levelup@^4.3.2: - version "4.4.0" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" - integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== - dependencies: - deferred-leveldown "~5.3.0" - level-errors "~2.0.0" - level-iterator-stream "~4.0.0" - level-supports "~1.0.0" - xtend "~4.0.0" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A== - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" - -locate-path@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" - integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== - dependencies: - p-locate "^5.0.0" - -lodash-es@^4.2.1: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.assign@^4.0.3, lodash.assign@^4.0.6: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== - -lodash.flatten@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" - integrity sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g== - -lodash.isequal@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== - -lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.21, lodash@^4.2.1: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -loglevel@^1.6.8: - version "1.9.1" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.1.tgz#d63976ac9bcd03c7c873116d41c2a85bafff1be7" - integrity sha512-hP3I3kCrDIMuRwAwHltphhDM1r8i55H33GgqjXbrisuJhF4kRhW1dNuxsRklp4bXl8DSdLaNLuiL4A/LWRfxvg== - -long@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" - integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA== - -loose-envify@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loupe@^2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" - integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== - dependencies: - get-func-name "^2.0.1" - -lower-case-first@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" - integrity sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA== - dependencies: - lower-case "^1.1.2" - -lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lowercase-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-3.0.0.tgz#c5e7d442e37ead247ae9db117a9d0a467c89d4f2" - integrity sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ== - -"lru-cache@7.10.1 - 7.13.1": - version "7.13.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.13.1.tgz#267a81fbd0881327c46a81c5922606a2cfe336c4" - integrity sha512-CHqbAq7NFlW3RSnoWXLJBxCWaZVBrfa9UEHId2M3AW8iEBurbqduNexEUCGc3SHc6iCYXNJCDi903LajSVAEPQ== - -lru-cache@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" - integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== - dependencies: - yallist "^3.0.2" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -lru_map@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" - integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== - -ltgt@2.2.1, ltgt@^2.1.2, ltgt@~2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ltgt/-/ltgt-2.2.1.tgz#f35ca91c493f7b73da0e07495304f17b31f87ee5" - integrity sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA== - -markdown-table@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -mcl-wasm@^0.7.1: - version "0.7.9" - resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" - integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== - -memdown@1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha512-iVrGHZB8i4OQfM155xx8akvG9FIj+ht14DX5CQkCTG4EHzZ3d3sgckIf/Lm9ivZalEsFuEVnWv2B2WZvbrro2w== - dependencies: - abstract-leveldown "~2.7.1" - functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - -memory-level@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/memory-level/-/memory-level-1.0.0.tgz#7323c3fd368f9af2f71c3cd76ba403a17ac41692" - integrity sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og== - dependencies: - abstract-level "^1.0.0" - functional-red-black-tree "^1.0.1" - module-error "^1.0.1" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== - -micro-ftch@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" - integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-fn@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74" - integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -mimic-response@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-4.0.0.tgz#35468b19e7c75d10f5165ea25e75a5ceea7cf70f" - integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== - -min-document@^2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" - integrity sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ== - dependencies: - dom-walk "^0.1.0" - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== - -minimatch@5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" - integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== - dependencies: - brace-expansion "^2.0.1" - -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimatch@^5.0.1: - version "5.1.6" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" - integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== - dependencies: - brace-expansion "^2.0.1" - -minimist@^1.2.0, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -minipass@^2.6.0, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mkdirp-promise@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" - integrity sha512-Hepn5kb1lJPtVW84RFT40YG1OddBNTOVUZR2bzQUHc+Z03en8/3uX0+060JDhcEzyO08HmipsN9DcnFMxhIL9w== - dependencies: - mkdirp "*" - -mkdirp@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-3.0.1.tgz#e44e4c5607fb279c168241713cc6e0fea9adcb50" - integrity sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg== - -mkdirp@^0.5.5: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mnemonist@^0.38.0: - version "0.38.5" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" - integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== - dependencies: - obliterator "^2.0.0" - -mocha@10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.1.0.tgz#dbf1114b7c3f9d0ca5de3133906aea3dfc89ef7a" - integrity sha512-vUF7IYxEoN7XhQpFLxQAEMtE4W91acW4B6En9l97MwE9stL1A9gusXfoHZCLVHDUJ/7V5+lbCM6yMqzo5vNymg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "7.2.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - nanoid "3.3.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mocha@^10.0.0, mocha@^10.2.0: - version "10.3.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.3.0.tgz#0e185c49e6dccf582035c05fa91084a4ff6e3fe9" - integrity sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg== - dependencies: - ansi-colors "4.1.1" - browser-stdout "1.3.1" - chokidar "3.5.3" - debug "4.3.4" - diff "5.0.0" - escape-string-regexp "4.0.0" - find-up "5.0.0" - glob "8.1.0" - he "1.2.0" - js-yaml "4.1.0" - log-symbols "4.1.0" - minimatch "5.0.1" - ms "2.1.3" - serialize-javascript "6.0.0" - strip-json-comments "3.1.1" - supports-color "8.1.1" - workerpool "6.2.1" - yargs "16.2.0" - yargs-parser "20.2.4" - yargs-unparser "2.0.0" - -mock-fs@^4.1.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" - integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== - -module-error@^1.0.1, module-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/module-error/-/module-error-1.0.2.tgz#8d1a48897ca883f47a45816d4fb3e3c6ba404d86" - integrity sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA== - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@2.1.3, ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -multibase@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b" - integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multibase@~0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b" - integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw== - dependencies: - base-x "^3.0.8" - buffer "^5.5.0" - -multicodec@^0.5.5: - version "0.5.7" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-0.5.7.tgz#1fb3f9dd866a10a55d226e194abba2dcc1ee9ffd" - integrity sha512-PscoRxm3f+88fAtELwUnZxGDkduE2HD9Q6GHUOywQLjOGT/HAdhjLDYNZ1e7VR0s0TP0EwZ16LNUTFpoBGivOA== - dependencies: - varint "^5.0.0" - -multicodec@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f" - integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg== - dependencies: - buffer "^5.6.0" - varint "^5.0.0" - -multihashes@^0.4.15, multihashes@~0.4.15: - version "0.4.21" - resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5" - integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw== - dependencies: - buffer "^5.5.0" - multibase "^0.7.0" - varint "^5.0.0" - -nano-base32@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" - integrity sha512-sxEtoTqAPdjWVGv71Q17koMFGsOMSiHsIFEvzOM7cNp8BXB4AnEwmDabm5dorusJf/v1z7QxaZYxUorU9RKaAw== - -nano-json-stream-parser@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" - integrity sha512-9MqxMH/BSJC7dnLsEMPyfN5Dvoo49IsPFYMcHw3Bcfc2kN0lpHRBSzlMSVx4HGyJ7s9B31CyBTVehWJoQ8Ctew== - -nanoassert@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nanoassert/-/nanoassert-2.0.0.tgz#a05f86de6c7a51618038a620f88878ed1e490c09" - integrity sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA== - -nanoid@3.3.3: - version "3.3.3" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25" - integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w== - -napi-macros@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.2.2.tgz#817fef20c3e0e40a963fbf7b37d1600bd0201044" - integrity sha512-hmEVtAGYzVQpCKdbQea4skABsdXW4RUh5t5mJ2zzqowJS2OyXZTU1KhDVFhx+NlWZ4ap9mqR9TcDO3LTTttd+g== - -napi-macros@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b" - integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== - -negotiator@0.6.3: - version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" - integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== - -next-tick@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb" - integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ== - -no-case@^2.2.0, no-case@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== - dependencies: - lower-case "^1.1.1" - -node-abort-controller@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" - integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== - -node-addon-api@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" - integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== - -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-fetch@^2.6.12, node-fetch@^2.6.7: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-gyp-build@4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.4.0.tgz#42e99687ce87ddeaf3a10b99dc06abc11021f3f4" - integrity sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ== - -node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" - integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== - -node-gyp-build@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.1.1.tgz#d7270b5d86717068d114cc57fff352f96d745feb" - integrity sha512-dSq1xmcPDKPZ2EED2S6zw/b9NKsqzXRE6dVr8TVQnI3FJOTteUMuqF3Qqs6LZg+mLGYJWqQzMbIjMtJqTv87nQ== - -node-interval-tree@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/node-interval-tree/-/node-interval-tree-1.3.3.tgz#15ffb904cde08270214acace8dc7653e89ae32b7" - integrity sha512-K9vk96HdTK5fEipJwxSvIIqwTqr4e3HRJeJrNxBSeVMNSC/JWARRaX7etOLOuTmrRMeOI/K5TCJu3aWIwZiNTw== - dependencies: - shallowequal "^1.0.2" - -nofilter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" - integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -normalize-url@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-8.0.0.tgz#593dbd284f743e8dcf6a5ddf8fadff149c82701a" - integrity sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw== - -nth-check@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" - integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== - dependencies: - boolbase "^1.0.0" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== - -number-to-bn@1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" - integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== - dependencies: - bn.js "4.11.6" - strip-hex-prefix "1.0.0" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -object.fromentries@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.7.tgz#71e95f441e9a0ea6baf682ecaaf37fa2a8d7e616" - integrity sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -object.groupby@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.2.tgz#494800ff5bab78fd0eff2835ec859066e00192ec" - integrity sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw== - dependencies: - array.prototype.filter "^1.0.3" - call-bind "^1.0.5" - define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.0.0" - -object.values@^1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.7.tgz#617ed13272e7e1071b43973aa1655d9291b8442a" - integrity sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -obliterator@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" - integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== - -oboe@2.1.5: - version "2.1.5" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.5.tgz#5554284c543a2266d7a38f17e073821fbde393cd" - integrity sha512-zRFWiF+FoicxEs3jNI/WYUrVEgA7DeET/InK0XQuudGHRg8iIob3cNPrJTKaz4004uaA9Pbe+Dwa8iluhjLZWA== - dependencies: - http-https "^1.0.0" - -on-finished@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" - integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== - dependencies: - ee-first "1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0, onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" - integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== - dependencies: - "@aashutoshrathi/word-wrap" "^1.2.3" - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - -original-require@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/original-require/-/original-require-1.0.1.tgz#0f130471584cd33511c5ec38c8d59213f9ac5e20" - integrity sha512-5vdKMbE58WaE61uVD+PKyh8xdM398UnjPBLotW2sjG5MzHARwta/+NtMBCBA0t2WQblGYBvq5vsiZpWokwno+A== - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g== - dependencies: - lcid "^1.0.0" - -os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-cancelable@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-3.0.0.tgz#63826694b54d61ca1c20ebcb6d3ecf5e14cd8050" - integrity sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0, p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-limit@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" - integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== - dependencies: - yocto-queue "^0.1.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-locate@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" - integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== - dependencies: - p-limit "^3.0.2" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-json@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-8.1.1.tgz#3e9948e43df40d1e8e78a85485f1070bf8f03dc8" - integrity sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA== - dependencies: - got "^12.1.0" - registry-auth-token "^5.0.1" - registry-url "^6.0.0" - semver "^7.3.7" - -param-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w== - dependencies: - no-case "^2.2.0" - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parse-cache-control@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" - integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== - -parse-headers@^2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.5.tgz#069793f9356a54008571eb7f9761153e6c770da9" - integrity sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA== - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ== - dependencies: - error-ex "^1.2.0" - -parse-json@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== - dependencies: - domhandler "^5.0.2" - parse5 "^7.0.0" - -parse5@^7.0.0: - version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== - dependencies: - entities "^4.4.0" - -parseurl@^1.3.3, parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascal-case@^2.0.0, pascal-case@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" - integrity sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ== - dependencies: - camel-case "^3.0.0" - upper-case-first "^1.1.0" - -path-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" - integrity sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q== - dependencies: - no-case "^2.2.0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ== - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6, path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg== - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pathval@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" - integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== - -pbkdf2@^3.0.17: - version "3.1.2" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" - integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picomatch@^2.0.4, picomatch@^2.2.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw== - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg== - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -pouchdb-abstract-mapreduce@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.3.1.tgz#96ff4a0f41cbe273f3f52fde003b719005a2093c" - integrity sha512-0zKXVFBvrfc1KnN0ggrB762JDmZnUpePHywo9Bq3Jy+L1FnoG7fXM5luFfvv5/T0gEw+ZTIwoocZECMnESBI9w== - dependencies: - pouchdb-binary-utils "7.3.1" - pouchdb-collate "7.3.1" - pouchdb-collections "7.3.1" - pouchdb-errors "7.3.1" - pouchdb-fetch "7.3.1" - pouchdb-mapreduce-utils "7.3.1" - pouchdb-md5 "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-adapter-leveldb-core@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-leveldb-core/-/pouchdb-adapter-leveldb-core-7.3.1.tgz#3c71dce7ff06c2e483d873d7aabc1fded56372ca" - integrity sha512-mxShHlqLMPz2gChrgtA9okV1ogFmQrRAoM/O4EN0CrQWPLXqYtpL1f7sI2asIvFe7SmpnvbLx7kkZyFmLTfwjA== - dependencies: - argsarray "0.0.1" - buffer-from "1.1.2" - double-ended-queue "2.1.0-0" - levelup "4.4.0" - pouchdb-adapter-utils "7.3.1" - pouchdb-binary-utils "7.3.1" - pouchdb-collections "7.3.1" - pouchdb-errors "7.3.1" - pouchdb-json "7.3.1" - pouchdb-md5 "7.3.1" - pouchdb-merge "7.3.1" - pouchdb-utils "7.3.1" - sublevel-pouchdb "7.3.1" - through2 "3.0.2" - -pouchdb-adapter-memory@^7.1.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-memory/-/pouchdb-adapter-memory-7.3.1.tgz#7be4b0601326cb93eb1141ed910fdfdf40c36616" - integrity sha512-iHdWGJAHONqQv0we3Oi1MYen69ZS8McLW9wUyaAYcWTJnAIIAr2ZM0/TeTDVSHfMUwYqEYk7X8jRtJZEMwLnwg== - dependencies: - memdown "1.4.1" - pouchdb-adapter-leveldb-core "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-adapter-utils@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-adapter-utils/-/pouchdb-adapter-utils-7.3.1.tgz#7237cb597f8d337057df15d4859bfe3c881d8832" - integrity sha512-uKLG6dClwTs/sLIJ4WkLAi9wlnDBpOnfyhpeAgOjlOGN/XLz5nKHrA4UJRnURDyc+uv79S9r/Unc4hVpmbSPUw== - dependencies: - pouchdb-binary-utils "7.3.1" - pouchdb-collections "7.3.1" - pouchdb-errors "7.3.1" - pouchdb-md5 "7.3.1" - pouchdb-merge "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-binary-utils@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-binary-utils/-/pouchdb-binary-utils-7.3.1.tgz#eea22d9a5f880fcd95062476f4f5484cdf61496f" - integrity sha512-crZJNfAEOnUoRk977Qtmk4cxEv6sNKllQ6vDDKgQrQLFjMUXma35EHzNyIJr1s76J77Q4sqKQAmxz9Y40yHGtw== - dependencies: - buffer-from "1.1.2" - -pouchdb-collate@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-collate/-/pouchdb-collate-7.3.1.tgz#19d7b87dd173d1c765da8cc9987c5aa9eb24f11f" - integrity sha512-o4gyGqDMLMSNzf6EDTr3eHaH/JRMoqRhdc+eV+oA8u00nTBtr9wD+jypVe2LbgKLJ4NWqx2qVkXiTiQdUFtsLQ== - -pouchdb-collections@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-collections/-/pouchdb-collections-7.3.1.tgz#4f1819cf4dd6936a422c29f7fa26a9b5dca428f5" - integrity sha512-yUyDqR+OJmtwgExOSJegpBJXDLAEC84TWnbAYycyh+DZoA51Yw0+XVQF5Vh8Ii90/Ut2xo88fmrmp0t6kqom8w== - -pouchdb-debug@^7.1.1: - version "7.2.1" - resolved "https://registry.yarnpkg.com/pouchdb-debug/-/pouchdb-debug-7.2.1.tgz#f5f869f6113c12ccb97cddf5b0a32b6e0e67e961" - integrity sha512-eP3ht/AKavLF2RjTzBM6S9gaI2/apcW6xvaKRQhEdOfiANqerFuksFqHCal3aikVQuDO+cB/cw+a4RyJn/glBw== - dependencies: - debug "3.1.0" - -pouchdb-errors@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-errors/-/pouchdb-errors-7.3.1.tgz#78be36721e2edc446fac158a236a9218c7bcdb14" - integrity sha512-Zktz4gnXEUcZcty8FmyvtYUYsHskoST05m6H5/E2gg/0mCfEXq/XeyyLkZHaZmqD0ZPS9yNmASB1VaFWEKEaDw== - dependencies: - inherits "2.0.4" - -pouchdb-fetch@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-fetch/-/pouchdb-fetch-7.3.1.tgz#d54b1807be0f0a5d4b6d06e416c7d54952bbc348" - integrity sha512-205xAtvdHRPQ4fp1h9+RmT9oQabo9gafuPmWsS9aEl3ER54WbY8Vaj1JHZGbU4KtMTYvW7H5088zLS7Nrusuag== - dependencies: - abort-controller "3.0.0" - fetch-cookie "0.11.0" - node-fetch "2.6.7" - -pouchdb-find@^7.0.0: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-find/-/pouchdb-find-7.3.1.tgz#07a633d5ee2bd731dae9f991281cd25212088d29" - integrity sha512-AeqUfAVY1c7IFaY36BRT0vIz9r4VTKq/YOWTmiqndOZUQ/pDGxyO2fNFal6NN3PyYww0JijlD377cPvhnrhJVA== - dependencies: - pouchdb-abstract-mapreduce "7.3.1" - pouchdb-collate "7.3.1" - pouchdb-errors "7.3.1" - pouchdb-fetch "7.3.1" - pouchdb-md5 "7.3.1" - pouchdb-selector-core "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-json@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-json/-/pouchdb-json-7.3.1.tgz#a80a3060aa2914959e4dca7a4e2022ab20c7119a" - integrity sha512-AyOKsmc85/GtHjMZyEacqzja8qLVfycS1hh1oskR+Bm5PIITX52Fb8zyi0hEetV6VC0yuGbn0RqiLjJxQePeqQ== - dependencies: - vuvuzela "1.0.3" - -pouchdb-mapreduce-utils@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-mapreduce-utils/-/pouchdb-mapreduce-utils-7.3.1.tgz#f0ac2c8400fbedb705e9226082453ac7d3f2a066" - integrity sha512-oUMcq82+4pTGQ6dtrhgORHOVHZSr6w/5tFIUGlv7RABIDvJarL4snMawADjlpiEwPdiQ/ESG8Fqt8cxqvqsIgg== - dependencies: - argsarray "0.0.1" - inherits "2.0.4" - pouchdb-collections "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-md5@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-md5/-/pouchdb-md5-7.3.1.tgz#70fae44f9d27eb4c6a8e7106156b4593d31c1762" - integrity sha512-aDV8ui/mprnL3xmt0gT/81DFtTtJiKyn+OxIAbwKPMfz/rDFdPYvF0BmDC9QxMMzGfkV+JJUjU6at0PPs2mRLg== - dependencies: - pouchdb-binary-utils "7.3.1" - spark-md5 "3.0.2" - -pouchdb-merge@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-merge/-/pouchdb-merge-7.3.1.tgz#97aae682d7d8499b62b6ce234dcb9527c7bf6f02" - integrity sha512-FeK3r35mKimokf2PQ2tUI523QWyZ4lYZ0Yd75FfSch/SPY6wIokz5XBZZ6PHdu5aOJsEKzoLUxr8CpSg9DhcAw== - -pouchdb-selector-core@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-selector-core/-/pouchdb-selector-core-7.3.1.tgz#08245662de3d61f16ab8dae2b56ef622935b3fb3" - integrity sha512-HBX+nNGXcaL9z0uNpwSMRq2GNZd3EZXW+fe9rJHS0hvJohjZL7aRJLoaXfEdHPRTNW+CpjM3Rny60eGekQdI/w== - dependencies: - pouchdb-collate "7.3.1" - pouchdb-utils "7.3.1" - -pouchdb-utils@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/pouchdb-utils/-/pouchdb-utils-7.3.1.tgz#d25f0a034427f388ba5ae37d9ae3fbed210e8720" - integrity sha512-R3hHBo1zTdTu/NFs3iqkcaQAPwhIH0gMIdfVKd5lbDYlmP26rCG5pdS+v7NuoSSFLJ4xxnaGV+Gjf4duYsJ8wQ== - dependencies: - argsarray "0.0.1" - clone-buffer "1.0.0" - immediate "3.3.0" - inherits "2.0.4" - pouchdb-collections "7.3.1" - pouchdb-errors "7.3.1" - pouchdb-md5 "7.3.1" - uuid "8.3.2" - -pouchdb@7.3.0: - version "7.3.0" - resolved "https://registry.yarnpkg.com/pouchdb/-/pouchdb-7.3.0.tgz#440fbef12dfd8f9002320802528665e883a3b7f8" - integrity sha512-OwsIQGXsfx3TrU1pLruj6PGSwFH+h5k4hGNxFkZ76Um7/ZI8F5TzUHFrpldVVIhfXYi2vP31q0q7ot1FSLFYOw== - dependencies: - abort-controller "3.0.0" - argsarray "0.0.1" - buffer-from "1.1.2" - clone-buffer "1.0.0" - double-ended-queue "2.1.0-0" - fetch-cookie "0.11.0" - immediate "3.3.0" - inherits "2.0.4" - level "6.0.1" - level-codec "9.0.2" - level-write-stream "1.0.0" - leveldown "5.6.0" - levelup "4.4.0" - ltgt "2.2.1" - node-fetch "2.6.7" - readable-stream "1.1.14" - spark-md5 "3.0.2" - through2 "3.0.2" - uuid "8.3.2" - vuvuzela "1.0.3" - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier@^2.8.3: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== - -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process@^0.11.10: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== - -promise@^8.0.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" - integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== - dependencies: - asap "~2.0.6" - -proper-lockfile@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f" - integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA== - dependencies: - graceful-fs "^4.2.4" - retry "^0.12.0" - signal-exit "^3.0.2" - -proto-list@~1.2.1: - version "1.2.4" - resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" - integrity sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA== - -proxy-addr@~2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" - integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== - dependencies: - forwarded "0.2.0" - ipaddr.js "1.9.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -prr@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" - integrity sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw== - -psl@^1.1.28, psl@^1.1.33: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" - integrity sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -pure-rand@^5.0.1: - version "5.0.5" - resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.5.tgz#bda2a7f6a1fc0f284d78d78ca5902f26f2ad35cf" - integrity sha512-BwQpbqxSCBJVpamI6ydzcKqyFmnd5msMWUGvzXLm1aXvusbbgkbOto/EUPM00hjveJEaJtdbhUjKSzWRhQVkaw== - -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== - dependencies: - side-channel "^1.0.4" - -qs@^6.4.0: - version "6.11.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" - integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== - dependencies: - side-channel "^1.0.4" - -qs@~6.5.2: - version "6.5.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" - integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== - -query-string@^5.0.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw== - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - -querystringify@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" - integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== - -queue-microtask@^1.2.2, queue-microtask@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" - integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@2.5.2, raw-body@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" - integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== - dependencies: - bytes "3.1.2" - http-errors "2.0.0" - iconv-lite "0.4.24" - unpipe "1.0.0" - -rc@1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A== - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ== - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@1.1.14: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -"readable-stream@2 || 3", readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@^2.2.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" - integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~0.0.2: - version "0.0.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-0.0.4.tgz#f32d76e3fb863344a548d79923007173665b3b8d" - integrity sha512-azrivNydKRYt7zwLV5wWUK7YzKTWs3q87xSmY6DlHapPrCvaT6ZrukvM5erV+yCSSPmZT8zkSdttOHQpWWm9zw== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -redux-saga@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redux-saga/-/redux-saga-1.0.0.tgz#acb8b3ed9180fecbe75f342011d75af3ac11045b" - integrity sha512-GvJWs/SzMvEQgeaw6sRMXnS2FghlvEGsHiEtTLpJqc/FHF3I5EE/B+Hq5lyHZ8LSoT2r/X/46uWvkdCnK9WgHA== - dependencies: - "@redux-saga/core" "^1.0.0" - -redux@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" - integrity sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A== - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^1.0.3" - -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== - dependencies: - call-bind "^1.0.6" - define-properties "^1.2.1" - es-errors "^1.3.0" - set-function-name "^2.0.1" - -registry-auth-token@^5.0.1: - version "5.0.2" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-5.0.2.tgz#8b026cc507c8552ebbe06724136267e63302f756" - integrity sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ== - dependencies: - "@pnpm/npm-conf" "^2.1.0" - -registry-url@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-6.0.1.tgz#056d9343680f2f64400032b1e199faa692286c58" - integrity sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q== - dependencies: - rc "1.2.8" - -req-cwd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" - integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== - dependencies: - req-from "^2.0.0" - -req-from@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" - integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== - dependencies: - resolve-from "^3.0.0" - -request@^2.79.0, request@^2.85.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - integrity sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q== - -require-from-string@^2.0.0, require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== - -reselect-tree@^1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/reselect-tree/-/reselect-tree-1.3.7.tgz#c3eca58765d9df96bae0017f6ff3504c304cdea0" - integrity sha512-kZN+C1cVJ6fFN2smSb0l4UvYZlRzttgnu183svH4NrU22cBY++ikgr2QT75Uuk4MYpv5gXSVijw4c5U6cx6GKg== - dependencies: - debug "^3.1.0" - json-pointer "^0.6.1" - reselect "^4.0.0" - -reselect@^4.0.0: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== - -resolve-alpn@^1.0.0, resolve-alpn@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-pkg-maps@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz#616b3dc2c57056b5588c31cdf4b3d64db133720f" - integrity sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw== - -resolve@1.17.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -resolve@^1.10.0, resolve@^1.22.2, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -responselike@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-3.0.0.tgz#20decb6c298aff0dbee1c355ca95461d42823626" - integrity sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg== - dependencies: - lowercase-keys "^3.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -retry@0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" - integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== - -retry@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" - integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow== - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^2.2.8: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -ripemd160-min@0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" - integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== - -ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rlp@^2.2.3, rlp@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" - integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== - dependencies: - bn.js "^5.2.0" - -run-parallel-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz#be80e936f5768623a38a963262d6bef8ff11e7ba" - integrity sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw== - dependencies: - queue-microtask "^1.2.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rustbn.js@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" - integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== - -safe-array-concat@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" - integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== - dependencies: - call-bind "^1.0.5" - get-intrinsic "^1.2.2" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-regex "^1.1.4" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -scrypt-js@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-2.0.4.tgz#32f8c5149f0797672e551c07e230f834b6af5f16" - integrity sha512-4KsaGcPnuhtCZQCxFxN3GVYIhKFPTdLd8PLC552XwbMndtD0cjRFAhDuuydXQ0h08ZfPgzqe6EKHozpuH74iDw== - -scrypt-js@3.0.1, scrypt-js@^3.0.0, scrypt-js@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" - integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== - -secp256k1@4.0.3, secp256k1@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" - integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== - dependencies: - elliptic "^6.5.4" - node-addon-api "^2.0.0" - node-gyp-build "^4.2.0" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.6.0: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.0.0, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4: - version "7.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" - integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== - dependencies: - lru-cache "^6.0.0" - -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== - dependencies: - debug "2.6.9" - depd "2.0.0" - destroy "1.2.0" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "2.0.0" - mime "1.6.0" - ms "2.1.3" - on-finished "2.4.1" - range-parser "~1.2.1" - statuses "2.0.1" - -sentence-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" - integrity sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ== - dependencies: - no-case "^2.2.0" - upper-case-first "^1.1.2" - -serialize-javascript@6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" - integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== - dependencies: - randombytes "^2.1.0" - -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.18.0" - -servify@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/servify/-/servify-0.1.12.tgz#142ab7bee1f1d033b66d0707086085b17c06db95" - integrity sha512-/xE6GvsKKqyo1BAY+KxOWXcLpPsUUyji7Qg3bVD7hh1eRze5bR1uYiuDA/k3Gof1s9BTzQZEJK8sNcNGFIzeWw== - dependencies: - body-parser "^1.16.0" - cors "^2.8.1" - express "^4.14.0" - request "^2.79.0" - xhr "^2.3.3" - -set-blocking@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== - -set-function-length@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" - integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== - dependencies: - define-data-property "^1.1.2" - es-errors "^1.3.0" - function-bind "^1.1.2" - get-intrinsic "^1.2.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.1" - -set-function-name@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -setimmediate@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" - integrity sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog== - -setimmediate@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" - integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -sha.js@^2.4.0, sha.js@^2.4.11, sha.js@^2.4.8: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -sha1@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" - integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== - dependencies: - charenc ">= 0.0.1" - crypt ">= 0.0.1" - -sha3-wasm@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sha3-wasm/-/sha3-wasm-1.0.0.tgz#ceabc2533d9b82043a3381135721ed49f5b09d43" - integrity sha512-yX0ULD3VD8U80YlM+6FapExy9uzYBpEOZzXRHwdhJn/+3PBbKhRHiNhknBqmMkW110zglXrJoZ52gtRbDGK4tg== - dependencies: - nanoassert "^2.0.0" - -sha3@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" - integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== - dependencies: - buffer "6.0.3" - -shallowequal@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" - integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -side-channel@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.5.tgz#9a84546599b48909fb6af1211708d23b1946221b" - integrity sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-concat@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" - integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== - -simple-get@^2.7.0: - version "2.8.2" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.8.2.tgz#5708fb0919d440657326cd5fe7d2599d07705019" - integrity sha512-Ijd/rV5o+mSBBs4F/x9oDPtTx9Zb6X9brmnXvMW4J7IR15ngi9q5xxqWBKU744jTZiaXtxaPL7uHG6vtN8kUkw== - dependencies: - decompress-response "^3.3.0" - once "^1.3.1" - simple-concat "^1.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -snake-case@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" - integrity sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q== - dependencies: - no-case "^2.2.0" - -solc@0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" - integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== - dependencies: - command-exists "^1.2.8" - commander "3.0.2" - follow-redirects "^1.12.1" - fs-extra "^0.30.0" - js-sha3 "0.8.0" - memorystream "^0.3.1" - require-from-string "^2.0.0" - semver "^5.5.0" - tmp "0.0.33" - -solc@^0.4.20: - version "0.4.26" - resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" - integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== - dependencies: - fs-extra "^0.30.0" - memorystream "^0.3.1" - require-from-string "^1.1.0" - semver "^5.3.0" - yargs "^4.7.1" - -solhint@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-4.1.1.tgz#137c935ef028f01ba13687a1f237288d94dae1bf" - integrity sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw== - dependencies: - "@solidity-parser/parser" "^0.16.0" - ajv "^6.12.6" - antlr4 "^4.11.0" - ast-parents "^0.0.1" - chalk "^4.1.2" - commander "^10.0.0" - cosmiconfig "^8.0.0" - fast-diff "^1.2.0" - glob "^8.0.3" - ignore "^5.2.4" - js-yaml "^4.1.0" - latest-version "^7.0.0" - lodash "^4.17.21" - pluralize "^8.0.0" - semver "^7.5.2" - strip-ansi "^6.0.1" - table "^6.8.1" - text-table "^0.2.0" - optionalDependencies: - prettier "^2.8.3" - -source-map-support@^0.5.13: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spark-md5@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/spark-md5/-/spark-md5-3.0.2.tgz#7952c4a30784347abcee73268e473b9c0167e3fc" - integrity sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw== - -spdx-correct@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" - integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz#c07a4ede25b16e4f78e6707bbd84b15a45c19c1b" - integrity sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.17" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz#887da8aa73218e51a1d917502d79863161a93f9c" - integrity sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg== - -sshpk@^1.7.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" - integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stacktrace-parser@^0.1.10: - version "0.1.10" - resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" - integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== - dependencies: - type-fest "^0.7.1" - -statuses@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" - integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== - -strict-uri-encode@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" - integrity sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ== - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw== - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ== - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg== - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g== - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-hex-prefix@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" - integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== - dependencies: - is-hex-prefixed "1.0.0" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA== - -strip-json-comments@3.1.1, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== - -sublevel-pouchdb@7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/sublevel-pouchdb/-/sublevel-pouchdb-7.3.1.tgz#c1cc03af45081345c7c82821d6dcaa74564ae2ef" - integrity sha512-n+4fK72F/ORdqPwoGgMGYeOrW2HaPpW9o9k80bT1B3Cim5BSvkKkr9WbWOWynni/GHkbCEdvLVFJL1ktosAdhQ== - dependencies: - inherits "2.0.4" - level-codec "9.0.2" - ltgt "2.2.1" - readable-stream "1.1.14" - -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -swap-case@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" - integrity sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ== - dependencies: - lower-case "^1.1.1" - upper-case "^1.1.1" - -swarm-js@^0.1.40: - version "0.1.42" - resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.42.tgz#497995c62df6696f6e22372f457120e43e727979" - integrity sha512-BV7c/dVlA3R6ya1lMlSSNPLYrntt0LUq4YMgy3iwpCIc6rZnS5W2wUoctarZ5pXlpKtxDDf9hNziEkcfrxdhqQ== - dependencies: - bluebird "^3.5.0" - buffer "^5.0.5" - eth-lib "^0.1.26" - fs-extra "^4.0.2" - got "^11.8.5" - mime-types "^2.1.16" - mkdirp-promise "^5.0.1" - mock-fs "^4.1.0" - setimmediate "^1.0.5" - tar "^4.0.2" - xhr-request "^1.0.1" - -symbol-observable@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" - integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== - -sync-request@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" - integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== - dependencies: - http-response-object "^3.0.1" - sync-rpc "^1.2.1" - then-request "^6.0.0" - -sync-rpc@^1.2.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" - integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== - dependencies: - get-port "^3.1.0" - -table@^6.8.0, table@^6.8.1: - version "6.8.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.8.1.tgz#ea2b71359fe03b017a5fbc296204471158080bdf" - integrity sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA== - dependencies: - ajv "^8.0.1" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.3" - strip-ansi "^6.0.1" - -tar@^4.0.2: - version "4.4.19" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" - integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== - dependencies: - chownr "^1.1.4" - fs-minipass "^1.2.7" - minipass "^2.9.0" - minizlib "^1.3.3" - mkdirp "^0.5.5" - safe-buffer "^5.2.1" - yallist "^3.1.1" - -testrpc@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" - integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -then-request@^6.0.0: - version "6.0.2" - resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" - integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== - dependencies: - "@types/concat-stream" "^1.6.0" - "@types/form-data" "0.0.33" - "@types/node" "^8.0.0" - "@types/qs" "^6.2.31" - caseless "~0.12.0" - concat-stream "^1.6.0" - form-data "^2.2.0" - http-basic "^8.1.1" - http-response-object "^3.0.1" - promise "^8.0.0" - qs "^6.4.0" - -through2@3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - -timed-out@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== - -tiny-typed-emitter@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz#b3b027fdd389ff81a152c8e847ee2f5be9fad7b5" - integrity sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA== - -title-case@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" - integrity sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q== - dependencies: - no-case "^2.2.0" - upper-case "^1.0.3" - -tmp@0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -"tough-cookie@^2.3.3 || ^3.0.1 || ^4.0.0": - version "4.1.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" - integrity sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.2.0" - url-parse "^1.5.3" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -truffle-assertions@^0.9.2: - version "0.9.2" - resolved "https://registry.yarnpkg.com/truffle-assertions/-/truffle-assertions-0.9.2.tgz#0f8360f53ad92b6d8fdb8ceb5dce54c1fc392e23" - integrity sha512-9g2RhaxU2F8DeWhqoGQvL/bV8QVoSnQ6PY+ZPvYRP5eF7+/8LExb4mjLx/FeliLTjc3Tv1SABG05Gu5qQ/ErmA== - dependencies: - assertion-error "^1.1.0" - lodash.isequal "^4.5.0" - -truffle-flattener@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/truffle-flattener/-/truffle-flattener-1.6.0.tgz#abb64488b711e6cca0a9d3e449f6a85e35964c5d" - integrity sha512-scS5Bsi4CZyvlrmD4iQcLHTiG2RQFUXVheTgWeH6PuafmI+Lk5U87Es98loM3w3ImqC9/fPHq+3QIXbcPuoJ1Q== - dependencies: - "@resolver-engine/imports-fs" "^0.2.2" - "@solidity-parser/parser" "^0.14.1" - find-up "^2.1.0" - mkdirp "^1.0.4" - tsort "0.0.1" - -truffle@^5.11.5: - version "5.11.5" - resolved "https://registry.yarnpkg.com/truffle/-/truffle-5.11.5.tgz#b0a3a9308c417dbe0290307d7698316d3e8eabe8" - integrity sha512-yCa2uWs5DmL0spuJUuIMtnVayRQrVuWLtcRXHMB0NLrtWDcRo7VM9RViveV4+oi9LdZ8VpFmmqHGm43LbzUxOA== - dependencies: - "@truffle/db-loader" "^0.2.36" - "@truffle/debugger" "^12.1.5" - app-module-path "^2.2.0" - ganache "7.9.1" - mocha "10.1.0" - original-require "^1.0.1" - optionalDependencies: - "@truffle/db" "^2.0.36" - -tsconfig-paths@^3.15.0: - version "3.15.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" - integrity sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg== - dependencies: - "@types/json5" "^0.0.29" - json5 "^1.0.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0, tslib@^2.4.0: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tslib@~2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.1.tgz#0d0bfbaac2880b91e22df0768e55be9753a5b17e" - integrity sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA== - -tsort@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" - integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tweetnacl-util@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" - integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -tweetnacl@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-detect@^4.0.0, type-detect@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -type-fest@^0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" - integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== - -type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -type@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" - integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== - -type@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" - integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== - -typed-array-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz#0608ffe6bca71bf15a45bff0ca2604107a1325f5" - integrity sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ== - dependencies: - call-bind "^1.0.6" - es-errors "^1.3.0" - is-typed-array "^1.1.13" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== - -typescript-compare@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" - integrity sha512-8ja4j7pMHkfLJQO2/8tut7ub+J3Lw2S3061eJLFQcvs3tsmJKp8KG5NtpLn7KcY2w08edF74BSVN7qJS0U6oHA== - dependencies: - typescript-logic "^0.0.0" - -typescript-logic@^0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/typescript-logic/-/typescript-logic-0.0.0.tgz#66ebd82a2548f2b444a43667bec120b496890196" - integrity sha512-zXFars5LUkI3zP492ls0VskH3TtdeHCqu0i7/duGt60i5IGPIpAHE/DWo5FqJ6EjQ15YKXrt+AETjv60Dat34Q== - -typescript-tuple@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/typescript-tuple/-/typescript-tuple-2.2.1.tgz#7d9813fb4b355f69ac55032e0363e8bb0f04dad2" - integrity sha512-Zcr0lbt8z5ZdEzERHAMAniTiIKerFCMgd7yjq1fPnDJ43et/k9twIFQMUYff9k5oXcsQ0WpvFcgzK2ZKASoW6Q== - dependencies: - typescript-compare "^0.0.2" - -typescript@latest: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici-types@~5.26.4: - version "5.26.5" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" - integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== - -undici@^5.14.0: - version "5.28.3" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.3.tgz#a731e0eff2c3fcfd41c1169a869062be222d1e5b" - integrity sha512-3ItfzbrhDlINjaP0duwnNsKpDQk3acHI3gVJ1z4fmwMK31k5G9OVIAMLSIaP6w4FaGkaAkN6zaQO9LUvZ1t7VA== - dependencies: - "@fastify/busboy" "^2.0.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -universalify@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" - integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== - -upper-case-first@^1.1.0, upper-case-first@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" - integrity sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ== - dependencies: - upper-case "^1.1.1" - -upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -url-parse@^1.5.3: - version "1.5.10" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" - integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== - dependencies: - querystringify "^2.1.1" - requires-port "^1.0.0" - -url-set-query@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-set-query/-/url-set-query-1.0.0.tgz#016e8cfd7c20ee05cafe7795e892bd0702faa339" - integrity sha512-3AChu4NiXquPfeckE5R5cGdiHCMWJx1dwCWOmWIL4KHAziJNOFIYJlpGFeKDvwLPHovZRCxK3cYlwzqI9Vp+Gg== - -utf-8-validate@5.0.7: - version "5.0.7" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" - integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-6.0.3.tgz#7d8c936d854e86b24d1d655f138ee27d2636d777" - integrity sha512-uIuGf9TWQ/y+0Lp+KGZCMuJWc3N9BHA+l/UmHd/oUHwJJDeysyTRxNQVkbzsIWfGFbRe3OcgML/i0mvVRPOyDA== - dependencies: - node-gyp-build "^4.3.0" - -utf-8-validate@^5.0.2: - version "5.0.10" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2" - integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ== - dependencies: - node-gyp-build "^4.3.0" - -utf8@3.0.0, utf8@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" - integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== - dependencies: - inherits "^2.0.3" - is-arguments "^1.0.4" - is-generator-function "^1.0.7" - is-typed-array "^1.1.3" - which-typed-array "^1.1.2" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== - -uuid@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.1.tgz#c2a30dedb3e535d72ccf82e343941a50ba8533ac" - integrity sha512-nWg9+Oa3qD2CQzHIP4qKUqwNfzKn8P0LtFhotaCTFchsV7ZfDhAybeip/HZVeMIpZi9JgY1E3nUlwaCmZT1sEg== - -uuid@8.3.2, uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -uuid@^9.0.0: - version "9.0.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.1.tgz#e188d4c8853cc722220392c424cd637f32293f30" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-promise@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.11.tgz#3e90299af31dd014fe843fe309cefa7c1d94b140" - integrity sha512-41BrgH+dIbCFXClcSapVs5M6GkENd3gQOJpEfPDNa71LsUGMXDL0jMWpI/Rh7WhX+Aalfz2TTS3Zt5pUsbnhLg== - -value-or-promise@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" - integrity sha512-Z6Uz+TYwEqE7ZN50gwn+1LCVo9ZVrpxRPOhOLnncYkY1ZzOYtrX8Fwf/rFktZ8R5mJms6EZf5TqNOMeZmnPq9Q== - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -vary@^1, vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vuvuzela@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/vuvuzela/-/vuvuzela-1.0.3.tgz#3be145e58271c73ca55279dd851f12a682114b0b" - integrity sha512-Tm7jR1xTzBbPW+6y1tknKiEhz04Wf/1iZkcTJjSFcpNko43+dFW6+OOeQe9taJIug3NdfUAjFKgUSyQrIKaDvQ== - -web3-bzz@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.0.tgz#ac74bc71cdf294c7080a79091079192f05c5baed" - integrity sha512-o9IR59io3pDUsXTsps5pO5hW1D5zBmg46iNc2t4j2DkaYHNdDLwk2IP9ukoM2wg47QILfPEJYzhTfkS/CcX0KA== - dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" - -web3-bzz@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.10.4.tgz#dcc787970767d9004c73d11d0eeef774ce16b880" - integrity sha512-ZZ/X4sJ0Uh2teU9lAGNS8EjveEppoHNQiKlOXAjedsrdWuaMErBPdLQjXfcrYvN6WM6Su9PMsAxf3FXXZ+HwQw== - dependencies: - "@types/node" "^12.12.6" - got "12.1.0" - swarm-js "^0.1.40" - -web3-core-helpers@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.0.tgz#1016534c51a5df77ed4f94d1fcce31de4af37fad" - integrity sha512-pIxAzFDS5vnbXvfvLSpaA1tfRykAe9adw43YCKsEYQwH0gCLL0kMLkaCX3q+Q8EVmAh+e1jWL/nl9U0de1+++g== - dependencies: - web3-eth-iban "1.10.0" - web3-utils "1.10.0" - -web3-core-helpers@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.10.4.tgz#bd2b4140df2016d5dd3bb2b925fc29ad8678677c" - integrity sha512-r+L5ylA17JlD1vwS8rjhWr0qg7zVoVMDvWhajWA5r5+USdh91jRUYosp19Kd1m2vE034v7Dfqe1xYRoH2zvG0g== - dependencies: - web3-eth-iban "1.10.4" - web3-utils "1.10.4" - -web3-core-method@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.0.tgz#82668197fa086e8cc8066742e35a9d72535e3412" - integrity sha512-4R700jTLAMKDMhQ+nsVfIXvH6IGJlJzGisIfMKWAIswH31h5AZz7uDUW2YctI+HrYd+5uOAlS4OJeeT9bIpvkA== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-core-subscriptions "1.10.0" - web3-utils "1.10.0" - -web3-core-method@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.10.4.tgz#566b52f006d3cbb13b21b72b8d2108999bf5d6bf" - integrity sha512-uZTb7flr+Xl6LaDsyTeE2L1TylokCJwTDrIVfIfnrGmnwLc6bmTWCCrm71sSrQ0hqs6vp/MKbQYIYqUN0J8WyA== - dependencies: - "@ethersproject/transactions" "^5.6.2" - web3-core-helpers "1.10.4" - web3-core-promievent "1.10.4" - web3-core-subscriptions "1.10.4" - web3-utils "1.10.4" - -web3-core-promievent@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.0.tgz#cbb5b3a76b888df45ed3a8d4d8d4f54ccb66a37b" - integrity sha512-68N7k5LWL5R38xRaKFrTFT2pm2jBNFaM4GioS00YjAKXRQ3KjmhijOMG3TICz6Aa5+6GDWYelDNx21YAeZ4YTg== - dependencies: - eventemitter3 "4.0.4" - -web3-core-promievent@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.10.4.tgz#629b970b7934430b03c5033c79f3bb3893027e22" - integrity sha512-2de5WnJQ72YcIhYwV/jHLc4/cWJnznuoGTJGD29ncFQHAfwW/MItHFSVKPPA5v8AhJe+r6y4Y12EKvZKjQVBvQ== - dependencies: - eventemitter3 "4.0.4" - -web3-core-requestmanager@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.0.tgz#4b34f6e05837e67c70ff6f6993652afc0d54c340" - integrity sha512-3z/JKE++Os62APml4dvBM+GAuId4h3L9ckUrj7ebEtS2AR0ixyQPbrBodgL91Sv7j7cQ3Y+hllaluqjguxvSaQ== - dependencies: - util "^0.12.5" - web3-core-helpers "1.10.0" - web3-providers-http "1.10.0" - web3-providers-ipc "1.10.0" - web3-providers-ws "1.10.0" - -web3-core-requestmanager@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.10.4.tgz#eb1f147e6b9df84e3a37e602162f8925bdb4bb9a" - integrity sha512-vqP6pKH8RrhT/2MoaU+DY/OsYK9h7HmEBNCdoMj+4ZwujQtw/Mq2JifjwsJ7gits7Q+HWJwx8q6WmQoVZAWugg== - dependencies: - util "^0.12.5" - web3-core-helpers "1.10.4" - web3-providers-http "1.10.4" - web3-providers-ipc "1.10.4" - web3-providers-ws "1.10.4" - -web3-core-subscriptions@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.0.tgz#b534592ee1611788fc0cb0b95963b9b9b6eacb7c" - integrity sha512-HGm1PbDqsxejI075gxBc5OSkwymilRWZufIy9zEpnWKNmfbuv5FfHgW1/chtJP6aP3Uq2vHkvTDl3smQBb8l+g== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" - -web3-core-subscriptions@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.10.4.tgz#2f4dcb404237e92802a563265d11a33934dc38e6" - integrity sha512-o0lSQo/N/f7/L76C0HV63+S54loXiE9fUPfHFcTtpJRQNDBVsSDdWRdePbWwR206XlsBqD5VHApck1//jEafTw== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.4" - -web3-core@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.0.tgz#9aa07c5deb478cf356c5d3b5b35afafa5fa8e633" - integrity sha512-fWySwqy2hn3TL89w5TM8wXF1Z2Q6frQTKHWmP0ppRQorEK8NcHJRfeMiv/mQlSKoTS1F6n/nv2uyZsixFycjYQ== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-requestmanager "1.10.0" - web3-utils "1.10.0" - -web3-core@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.10.4.tgz#639de68b8b9871d2dc8892e0dd4e380cb1361a98" - integrity sha512-B6elffYm81MYZDTrat7aEhnhdtVE3lDBUZft16Z8awYMZYJDbnykEbJVS+l3mnA7AQTnSDr/1MjWofGDLBJPww== - dependencies: - "@types/bn.js" "^5.1.1" - "@types/node" "^12.12.6" - bignumber.js "^9.0.0" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-requestmanager "1.10.4" - web3-utils "1.10.4" - -web3-eth-abi@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.0.tgz#53a7a2c95a571e205e27fd9e664df4919483cce1" - integrity sha512-cwS+qRBWpJ43aI9L3JS88QYPfFcSJJ3XapxOQ4j40v6mk7ATpA8CVK1vGTzpihNlOfMVRBkR95oAj7oL6aiDOg== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.0" - -web3-eth-abi@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.10.4.tgz#16c19d0bde0aaf8c1a56cb7743a83156d148d798" - integrity sha512-cZ0q65eJIkd/jyOlQPDjr8X4fU6CRL1eWgdLwbWEpo++MPU/2P4PFk5ZLAdye9T5Sdp+MomePPJ/gHjLMj2VfQ== - dependencies: - "@ethersproject/abi" "^5.6.3" - web3-utils "1.10.4" - -web3-eth-accounts@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.0.tgz#2942beca0a4291455f32cf09de10457a19a48117" - integrity sha512-wiq39Uc3mOI8rw24wE2n15hboLE0E9BsQLdlmsL4Zua9diDS6B5abXG0XhFcoNsXIGMWXVZz4TOq3u4EdpXF/Q== - dependencies: - "@ethereumjs/common" "2.5.0" - "@ethereumjs/tx" "3.3.2" - eth-lib "0.2.8" - ethereumjs-util "^7.1.5" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-utils "1.10.0" - -web3-eth-accounts@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.10.4.tgz#df30e85a7cd70e475f8cf52361befba408829e34" - integrity sha512-ysy5sVTg9snYS7tJjxVoQAH6DTOTkRGR8emEVCWNGLGiB9txj+qDvSeT0izjurS/g7D5xlMAgrEHLK1Vi6I3yg== - dependencies: - "@ethereumjs/common" "2.6.5" - "@ethereumjs/tx" "3.5.2" - "@ethereumjs/util" "^8.1.0" - eth-lib "0.2.8" - scrypt-js "^3.0.1" - uuid "^9.0.0" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-utils "1.10.4" - -web3-eth-contract@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.0.tgz#8e68c7654576773ec3c91903f08e49d0242c503a" - integrity sha512-MIC5FOzP/+2evDksQQ/dpcXhSqa/2hFNytdl/x61IeWxhh6vlFeSjq0YVTAyIzdjwnL7nEmZpjfI6y6/Ufhy7w== - dependencies: - "@types/bn.js" "^5.1.1" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-promievent "1.10.0" - web3-core-subscriptions "1.10.0" - web3-eth-abi "1.10.0" - web3-utils "1.10.0" - -web3-eth-contract@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.10.4.tgz#22d39f04e11d9ff4e726e8025a56d78e843a2c3d" - integrity sha512-Q8PfolOJ4eV9TvnTj1TGdZ4RarpSLmHnUnzVxZ/6/NiTfe4maJz99R0ISgwZkntLhLRtw0C7LRJuklzGYCNN3A== - dependencies: - "@types/bn.js" "^5.1.1" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-promievent "1.10.4" - web3-core-subscriptions "1.10.4" - web3-eth-abi "1.10.4" - web3-utils "1.10.4" - -web3-eth-ens@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.0.tgz#96a676524e0b580c87913f557a13ed810cf91cd9" - integrity sha512-3hpGgzX3qjgxNAmqdrC2YUQMTfnZbs4GeLEmy8aCWziVwogbuqQZ+Gzdfrym45eOZodk+lmXyLuAdqkNlvkc1g== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-promievent "1.10.0" - web3-eth-abi "1.10.0" - web3-eth-contract "1.10.0" - web3-utils "1.10.0" - -web3-eth-ens@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.10.4.tgz#3d991adac52bc8e598f1f1b8528337fa6291004c" - integrity sha512-LLrvxuFeVooRVZ9e5T6OWKVflHPFgrVjJ/jtisRWcmI7KN/b64+D/wJzXqgmp6CNsMQcE7rpmf4CQmJCrTdsgg== - dependencies: - content-hash "^2.5.2" - eth-ens-namehash "2.0.8" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-promievent "1.10.4" - web3-eth-abi "1.10.4" - web3-eth-contract "1.10.4" - web3-utils "1.10.4" - -web3-eth-iban@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.0.tgz#5a46646401965b0f09a4f58e7248c8a8cd22538a" - integrity sha512-0l+SP3IGhInw7Q20LY3IVafYEuufo4Dn75jAHT7c2aDJsIolvf2Lc6ugHkBajlwUneGfbRQs/ccYPQ9JeMUbrg== - dependencies: - bn.js "^5.2.1" - web3-utils "1.10.0" - -web3-eth-iban@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.10.4.tgz#bc61b4a1930d19b1df8762c606d669902558e54d" - integrity sha512-0gE5iNmOkmtBmbKH2aTodeompnNE8jEyvwFJ6s/AF6jkw9ky9Op9cqfzS56AYAbrqEFuClsqB/AoRves7LDELw== - dependencies: - bn.js "^5.2.1" - web3-utils "1.10.4" - -web3-eth-personal@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.0.tgz#94d525f7a29050a0c2a12032df150ac5ea633071" - integrity sha512-anseKn98w/d703eWq52uNuZi7GhQeVjTC5/svrBWEKob0WZ5kPdo+EZoFN0sp5a5ubbrk/E0xSl1/M5yORMtpg== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-net "1.10.0" - web3-utils "1.10.0" - -web3-eth-personal@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.10.4.tgz#e2ee920f47e84848288e03442659cdbb2c4deea2" - integrity sha512-BRa/hs6jU1hKHz+AC/YkM71RP3f0Yci1dPk4paOic53R4ZZG4MgwKRkJhgt3/GPuPliwS46f/i5A7fEGBT4F9w== - dependencies: - "@types/node" "^12.12.6" - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-net "1.10.4" - web3-utils "1.10.4" - -web3-eth@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.0.tgz#38b905e2759697c9624ab080cfcf4e6c60b3a6cf" - integrity sha512-Z5vT6slNMLPKuwRyKGbqeGYC87OAy8bOblaqRTgg94CXcn/mmqU7iPIlG4506YdcdK3x6cfEDG7B6w+jRxypKA== - dependencies: - web3-core "1.10.0" - web3-core-helpers "1.10.0" - web3-core-method "1.10.0" - web3-core-subscriptions "1.10.0" - web3-eth-abi "1.10.0" - web3-eth-accounts "1.10.0" - web3-eth-contract "1.10.0" - web3-eth-ens "1.10.0" - web3-eth-iban "1.10.0" - web3-eth-personal "1.10.0" - web3-net "1.10.0" - web3-utils "1.10.0" - -web3-eth@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.10.4.tgz#3a908c635cb5d935bd30473e452f3bd7f2ee66a5" - integrity sha512-Sql2kYKmgt+T/cgvg7b9ce24uLS7xbFrxE4kuuor1zSCGrjhTJ5rRNG8gTJUkAJGKJc7KgnWmgW+cOfMBPUDSA== - dependencies: - web3-core "1.10.4" - web3-core-helpers "1.10.4" - web3-core-method "1.10.4" - web3-core-subscriptions "1.10.4" - web3-eth-abi "1.10.4" - web3-eth-accounts "1.10.4" - web3-eth-contract "1.10.4" - web3-eth-ens "1.10.4" - web3-eth-iban "1.10.4" - web3-eth-personal "1.10.4" - web3-net "1.10.4" - web3-utils "1.10.4" - -web3-net@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.0.tgz#be53e7f5dafd55e7c9013d49c505448b92c9c97b" - integrity sha512-NLH/N3IshYWASpxk4/18Ge6n60GEvWBVeM8inx2dmZJVmRI6SJIlUxbL8jySgiTn3MMZlhbdvrGo8fpUW7a1GA== - dependencies: - web3-core "1.10.0" - web3-core-method "1.10.0" - web3-utils "1.10.0" - -web3-net@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.10.4.tgz#20e12c60e4477d4298979d8d5d66b9abf8e66a09" - integrity sha512-mKINnhOOnZ4koA+yV2OT5s5ztVjIx7IY9a03w6s+yao/BUn+Luuty0/keNemZxTr1E8Ehvtn28vbOtW7Ids+Ow== - dependencies: - web3-core "1.10.4" - web3-core-method "1.10.4" - web3-utils "1.10.4" - -web3-providers-http@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.0.tgz#864fa48675e7918c9a4374e5f664b32c09d0151b" - integrity sha512-eNr965YB8a9mLiNrkjAWNAPXgmQWfpBfkkn7tpEFlghfww0u3I0tktMZiaToJVcL2+Xq+81cxbkpeWJ5XQDwOA== - dependencies: - abortcontroller-polyfill "^1.7.3" - cross-fetch "^3.1.4" - es6-promise "^4.2.8" - web3-core-helpers "1.10.0" - -web3-providers-http@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.10.4.tgz#ca7aa58aeaf8123500c24ffe0595896319f830e8" - integrity sha512-m2P5Idc8hdiO0l60O6DSCPw0kw64Zgi0pMjbEFRmxKIck2Py57RQMu4bxvkxJwkF06SlGaEQF8rFZBmuX7aagQ== - dependencies: - abortcontroller-polyfill "^1.7.5" - cross-fetch "^4.0.0" - es6-promise "^4.2.8" - web3-core-helpers "1.10.4" - -web3-providers-ipc@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.0.tgz#9747c7a6aee96a51488e32fa7c636c3460b39889" - integrity sha512-OfXG1aWN8L1OUqppshzq8YISkWrYHaATW9H8eh0p89TlWMc1KZOL9vttBuaBEi96D/n0eYDn2trzt22bqHWfXA== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.10.0" - -web3-providers-ipc@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.10.4.tgz#2e03437909e4e7771d646ff05518efae44b783c3" - integrity sha512-YRF/bpQk9z3WwjT+A6FI/GmWRCASgd+gC0si7f9zbBWLXjwzYAKG73bQBaFRAHex1hl4CVcM5WUMaQXf3Opeuw== - dependencies: - oboe "2.1.5" - web3-core-helpers "1.10.4" - -web3-providers-ws@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.0.tgz#cb0b87b94c4df965cdf486af3a8cd26daf3975e5" - integrity sha512-sK0fNcglW36yD5xjnjtSGBnEtf59cbw4vZzJ+CmOWIKGIR96mP5l684g0WD0Eo+f4NQc2anWWXG74lRc9OVMCQ== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.0" - websocket "^1.0.32" - -web3-providers-ws@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.10.4.tgz#55d0c3ba36c6a79d105f02e20a707eb3978e7f82" - integrity sha512-j3FBMifyuFFmUIPVQR4pj+t5ILhAexAui0opgcpu9R5LxQrLRUZxHSnU+YO25UycSOa/NAX8A+qkqZNpcFAlxA== - dependencies: - eventemitter3 "4.0.4" - web3-core-helpers "1.10.4" - websocket "^1.0.32" - -web3-shh@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.0.tgz#c2979b87e0f67a7fef2ce9ee853bd7bfbe9b79a8" - integrity sha512-uNUUuNsO2AjX41GJARV9zJibs11eq6HtOe6Wr0FtRUcj8SN6nHeYIzwstAvJ4fXA53gRqFMTxdntHEt9aXVjpg== - dependencies: - web3-core "1.10.0" - web3-core-method "1.10.0" - web3-core-subscriptions "1.10.0" - web3-net "1.10.0" - -web3-shh@1.10.4: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.10.4.tgz#9852d6f3d05678e31e49235a60fea10ca7a9e21d" - integrity sha512-cOH6iFFM71lCNwSQrC3niqDXagMqrdfFW85hC9PFUrAr3PUrIem8TNstTc3xna2bwZeWG6OBy99xSIhBvyIACw== - dependencies: - web3-core "1.10.4" - web3-core-method "1.10.4" - web3-core-subscriptions "1.10.4" - web3-net "1.10.4" - -web3-utils@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.0.tgz#ca4c1b431a765c14ac7f773e92e0fd9377ccf578" - integrity sha512-kSaCM0uMcZTNUSmn5vMEhlo02RObGNRRCkdX0V9UTAU0+lrvn0HSaudyCo6CQzuXUsnuY2ERJGCGPfeWmv19Rg== - dependencies: - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereumjs-util "^7.1.0" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3-utils@1.10.4, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" - integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== - dependencies: - "@ethereumjs/util" "^8.1.0" - bn.js "^5.2.1" - ethereum-bloom-filters "^1.0.6" - ethereum-cryptography "^2.1.2" - ethjs-unit "0.1.6" - number-to-bn "1.7.0" - randombytes "^2.1.0" - utf8 "3.0.0" - -web3@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.0.tgz#2fde0009f59aa756c93e07ea2a7f3ab971091274" - integrity sha512-YfKY9wSkGcM8seO+daR89oVTcbu18NsVfvOngzqMYGUU0pPSQmE57qQDvQzUeoIOHAnXEBNzrhjQJmm8ER0rng== - dependencies: - web3-bzz "1.10.0" - web3-core "1.10.0" - web3-eth "1.10.0" - web3-eth-personal "1.10.0" - web3-net "1.10.0" - web3-shh "1.10.0" - web3-utils "1.10.0" - -web3@^1.2.5: - version "1.10.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.10.4.tgz#5d5e59b976eaf758b060fe1a296da5fe87bdc79c" - integrity sha512-kgJvQZjkmjOEKimx/tJQsqWfRDPTTcBfYPa9XletxuHLpHcXdx67w8EFn5AW3eVxCutE9dTVHgGa9VYe8vgsEA== - dependencies: - web3-bzz "1.10.4" - web3-core "1.10.4" - web3-eth "1.10.4" - web3-eth-personal "1.10.4" - web3-net "1.10.4" - web3-shh "1.10.4" - web3-utils "1.10.4" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -websocket@^1.0.32: - version "1.0.34" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" - integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== - dependencies: - bufferutil "^4.0.1" - debug "^2.2.0" - es5-ext "^0.10.50" - typedarray-to-buffer "^3.1.5" - utf-8-validate "^5.0.2" - yaeti "^0.0.6" - -whatwg-mimetype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" - integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ== - -which-typed-array@^1.1.14, which-typed-array@^1.1.2: - version "1.1.14" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" - integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== - dependencies: - available-typed-arrays "^1.0.6" - call-bind "^1.0.5" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.1" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -widest-line@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" - integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== - dependencies: - string-width "^4.0.0" - -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw== - -workerpool@6.2.1: - version "6.2.1" - resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" - integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw== - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-stream@~0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/write-stream/-/write-stream-0.4.3.tgz#83cc8c0347d0af6057a93862b4e3ae01de5c81c1" - integrity sha512-IJrvkhbAnj89W/GAVdVgbnPiVw5Ntg/B4tc/MUCIEwj/g6JIww1DWJyB/yBMT3yw2/TkT6IUZ0+IYef3flEw8A== - dependencies: - readable-stream "~0.0.2" - -ws@7.4.6: - version "7.4.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -ws@8.13.0: - version "8.13.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" - integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== - -ws@^3.0.0: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" - -ws@^7.2.0, ws@^7.4.6: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -xhr-request-promise@^0.1.2: - version "0.1.3" - resolved "https://registry.yarnpkg.com/xhr-request-promise/-/xhr-request-promise-0.1.3.tgz#2d5f4b16d8c6c893be97f1a62b0ed4cf3ca5f96c" - integrity sha512-YUBytBsuwgitWtdRzXDDkWAXzhdGB8bYm0sSzMPZT7Z2MBjMSTHFsyCT1yCRATY+XC69DUrQraRAEgcoCRaIPg== - dependencies: - xhr-request "^1.1.0" - -xhr-request@^1.0.1, xhr-request@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/xhr-request/-/xhr-request-1.1.0.tgz#f4a7c1868b9f198723444d82dcae317643f2e2ed" - integrity sha512-Y7qzEaR3FDtL3fP30k9wO/e+FBnBByZeybKOhASsGP30NIkRAAkKD/sCnLvgEfAIEC1rcmK7YG8f4oEnIrrWzA== - dependencies: - buffer-to-arraybuffer "^0.0.5" - object-assign "^4.1.1" - query-string "^5.0.1" - simple-get "^2.7.0" - timed-out "^4.0.1" - url-set-query "^1.0.0" - xhr "^2.0.4" - -xhr@^2.0.4, xhr@^2.3.3: - version "2.6.0" - resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.6.0.tgz#b69d4395e792b4173d6b7df077f0fc5e4e2b249d" - integrity sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA== - dependencies: - global "~4.4.0" - is-function "^1.0.1" - parse-headers "^2.0.0" - xtend "^4.0.0" - -xmlhttprequest@1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA== - -xss@^1.0.8: - version "1.0.14" - resolved "https://registry.yarnpkg.com/xss/-/xss-1.0.14.tgz#4f3efbde75ad0d82e9921cc3c95e6590dd336694" - integrity sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw== - dependencies: - commander "^2.20.3" - cssfilter "0.0.10" - -xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -y18n@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" - integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yaeti@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" - integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug== - -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@20.2.4: - version "20.2.4" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs-parser@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" - integrity sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA== - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.0.6" - -yargs-parser@^20.2.2: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs-unparser@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" - integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== - dependencies: - camelcase "^6.0.0" - decamelize "^4.0.0" - flat "^5.0.2" - is-plain-obj "^2.1.0" - -yargs@16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yargs@^4.7.1: - version "4.8.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" - integrity sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA== - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.0.3" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.1" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^2.4.1" - -yocto-queue@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" - integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== From c569a9f35ed6e54a5ba6bc751c26bd26cf9086db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 14:41:07 +0100 Subject: [PATCH 137/149] chore: move to node v20 on ci/cd workflows --- .github/workflows/nodejs.yml | 2 +- .github/workflows/npm-publish.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 773b33401..9d8c5ab91 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - node-version: [16.x] + node-version: [20.x] steps: - uses: actions/checkout@v1 diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 12cb97dc8..941a3228f 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 registry-url: https://registry.npmjs.org/ - run: yarn install - run: yarn publish From c6d662392db6ac19e35b7e1b0138d422dfafdab3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 14:42:20 +0100 Subject: [PATCH 138/149] chore: remove unused dependencies --- package.json | 4 - pnpm-lock.yaml | 662 +------------------------------------------------ 2 files changed, 10 insertions(+), 656 deletions(-) diff --git a/package.json b/package.json index 3fc244227..8e90bc4cb 100644 --- a/package.json +++ b/package.json @@ -68,13 +68,9 @@ "custom-error-test-helper": "^1.0.6", "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", - "js-sha256": "^0.11.0", "nanoassert": "^2.0.0", "sha3-wasm": "^1.0.0", "solhint": "^4.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e04aa64c7..a31a36dd1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,16 +8,12 @@ specifiers: ado-contracts: 1.0.0 bn.js: ^4.11.0 custom-error-test-helper: ^1.0.6 - dotenv: ^16.4.1 + 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 - js-sha256: ^0.11.0 lodash.merge: ^4.6.2 nanoassert: ^2.0.0 proper-lockfile: ^4.1.2 @@ -27,7 +23,6 @@ specifiers: truffle-assertions: ^0.9.2 truffle-flattener: ^1.6.0 truffle-plugin-verify: ^0.6.7 - typescript: latest witnet-toolkit: ../witnet-utils dependencies: @@ -44,22 +39,17 @@ devDependencies: bn.js: 4.12.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 + eslint-config-standard: 17.1.0_eslint@8.56.0 eth-gas-reporter: 0.2.27 eth-helpers: 1.3.1 - hardhat: 2.19.5_typescript@5.3.3 - js-sha256: 0.11.0 + hardhat: 2.19.5 nanoassert: 2.0.0 sha3-wasm: 1.0.0 - solhint: 4.1.1_typescript@5.3.3 + solhint: 4.1.1 truffle: 5.11.5 truffle-assertions: 0.9.2 truffle-flattener: 1.6.0 truffle-plugin-verify: 0.6.7 - typescript: 5.3.3 witnet-toolkit: link:../witnet-utils packages: @@ -1107,7 +1097,7 @@ packages: cbor: 8.1.0 chalk: 2.4.2 debug: 4.3.4 - hardhat: 2.19.5_typescript@5.3.3 + hardhat: 2.19.5 lodash.clonedeep: 4.5.0 semver: 6.3.1 table: 6.8.1 @@ -2086,10 +2076,6 @@ packages: dev: true optional: true - /@types/json5/0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true - /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: @@ -2597,85 +2583,10 @@ packages: dev: true optional: true - /array-buffer-byte-length/1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - is-array-buffer: 3.0.4 - dev: true - /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true - /array-includes/3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - get-intrinsic: 1.2.4 - is-string: 1.0.7 - dev: true - - /array.prototype.filter/1.0.3: - resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-array-method-boxes-properly: 1.0.0 - is-string: 1.0.7 - dev: true - - /array.prototype.findlastindex/1.2.4: - resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-errors: 1.3.0 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flat/1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-shim-unscopables: 1.0.2 - dev: true - - /array.prototype.flatmap/1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-shim-unscopables: 1.0.2 - dev: true - - /arraybuffer.prototype.slice/1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - is-array-buffer: 3.0.4 - is-shared-array-buffer: 1.0.2 - dev: true - /asap/2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -3050,17 +2961,6 @@ packages: node-gyp-build: 4.8.0 dev: true - /builtin-modules/3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true - - /builtins/5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - dependencies: - semver: 7.6.0 - dev: true - /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3585,7 +3485,7 @@ packages: vary: 1.1.2 dev: true - /cosmiconfig/8.3.6_typescript@5.3.3: + /cosmiconfig/8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3598,7 +3498,6 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.3.3 dev: true /crc-32/1.2.2: @@ -3851,15 +3750,6 @@ packages: gopd: 1.0.1 dev: true - /define-properties/1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - has-property-descriptors: 1.0.2 - object-keys: 1.1.1 - dev: true - /delay/5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -3897,13 +3787,6 @@ packages: engines: {node: '>=0.3.1'} dev: true - /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: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -4063,57 +3946,6 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} - engines: {node: '>= 0.4'} - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.6 - call-bind: 1.0.7 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.1 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.1 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 - dev: true - - /es-array-method-boxes-properly/1.0.0: - resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} - dev: true - /es-define-property/1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -4126,30 +3958,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /es-set-tostringtag/2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - dependencies: - get-intrinsic: 1.2.4 - has-tostringtag: 1.0.2 - hasown: 2.0.1 - dev: true - - /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: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - dev: true - /es5-ext/0.10.62: resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} engines: {node: '>=0.10'} @@ -4198,16 +4006,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-compat-utils/0.1.2_eslint@8.56.0: - resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} - engines: {node: '>=12'} - peerDependencies: - eslint: '>=6.0.0' - dependencies: - eslint: 8.56.0 - dev: true - - /eslint-config-standard/17.1.0_ot4howdeavqht6h5s42eunnfxi: + /eslint-config-standard/17.1.0_eslint@8.56.0: resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4215,122 +4014,6 @@ packages: eslint-plugin-import: ^2.25.2 eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 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 - dev: true - - /eslint-import-resolver-node/0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - dev: true - - /eslint-module-utils/2.8.0_rzg3ygvhoewmy7caurhnki56y4: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true - dependencies: - debug: 3.2.7 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - transitivePeerDependencies: - - supports-color - dev: true - - /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/regexpp': 4.10.0 - 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: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.4 - array.prototype.flat: 1.3.2 - array.prototype.flatmap: 1.3.2 - debug: 3.2.7 - doctrine: 2.1.0 - eslint: 8.56.0 - eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0_rzg3ygvhoewmy7caurhnki56y4 - hasown: 2.0.1 - is-core-module: 2.13.1 - is-glob: 4.0.3 - minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.2 - object.values: 1.1.7 - semver: 6.3.1 - tsconfig-paths: 3.15.0 - transitivePeerDependencies: - - eslint-import-resolver-typescript - - eslint-import-resolver-webpack - - supports-color - dev: true - - /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 - builtins: 5.0.1 - 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 - is-builtin-module: 3.2.1 - is-core-module: 2.13.1 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 7.6.0 - dev: true - - /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: - eslint: ^7.0.0 || ^8.0.0 dependencies: eslint: 8.56.0 dev: true @@ -4993,24 +4676,10 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true - /function.prototype.name/1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - functions-have-names: 1.2.3 - dev: true - /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true - /functions-have-names/1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - /ganache/7.9.1: resolution: {integrity: sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==} hasBin: true @@ -5091,21 +4760,6 @@ packages: engines: {node: '>=10'} dev: true - /get-symbol-description/1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - dev: true - - /get-tsconfig/4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - /getpass/0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: @@ -5193,13 +4847,6 @@ packages: type-fest: 0.20.2 dev: true - /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: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -5305,7 +4952,7 @@ packages: har-schema: 2.0.0 dev: true - /hardhat/2.19.5_typescript@5.3.3: + /hardhat/2.19.5: resolution: {integrity: sha512-vx8R7zWCYVgM56vA6o0Wqx2bIIptkN4TMs9QwDqZVNGRhMzBfzqUeEYbp+69gxWp1neg2V2nYQUaaUv7aom1kw==} hasBin: true peerDependencies: @@ -5363,7 +5010,6 @@ packages: source-map-support: 0.5.21 stacktrace-parser: 0.1.10 tsort: 0.0.1 - typescript: 5.3.3 undici: 5.28.3 uuid: 8.3.2 ws: 7.5.9 @@ -5373,10 +5019,6 @@ packages: - utf-8-validate dev: true - /has-bigints/1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true - /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5623,15 +5265,6 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true - /internal-slot/1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} - dependencies: - es-errors: 1.3.0 - hasown: 2.0.1 - side-channel: 1.0.5 - dev: true - /invert-kv/1.0.0: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} @@ -5656,24 +5289,10 @@ packages: has-tostringtag: 1.0.2 dev: true - /is-array-buffer/3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - dev: true - /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true - /is-bigint/1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - dependencies: - has-bigints: 1.0.2 - dev: true - /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5681,26 +5300,11 @@ packages: binary-extensions: 2.2.0 dev: true - /is-boolean-object/1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} dev: true - /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: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -5712,13 +5316,6 @@ packages: hasown: 2.0.1 dev: true - /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: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -5770,18 +5367,6 @@ packages: lower-case: 1.1.4 dev: true - /is-negative-zero/2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - dev: true - - /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: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5802,39 +5387,11 @@ packages: engines: {node: '>=8'} dev: true - /is-regex/1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - has-tostringtag: 1.0.2 - dev: true - /is-retry-allowed/2.2.0: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} dev: true - /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-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: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - dependencies: - has-symbols: 1.0.3 - dev: true - /is-typed-array/1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} @@ -5861,12 +5418,6 @@ packages: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true - /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: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -5911,10 +5462,6 @@ packages: resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} dev: true - /js-sha256/0.11.0: - resolution: {integrity: sha512-6xNlKayMZvds9h1Y1VWc0fQHQ82BxTXizWPEtEeGvmOUYpBRy4gbWroHLpzowe6xiQhHpelCQiE7HEdznyBL9Q==} - dev: true - /js-sha3/0.5.5: resolution: {integrity: sha512-yLLwn44IVeunwjpDVTDZmQeVbB0h+dZpY2eO68B/Zik8hu6dH+rKeLxwua79GGIvW6xr8NBAcrtiUbYrTjEFTA==} dev: true @@ -5998,13 +5545,6 @@ packages: grapheme-splitter: 1.0.4 dev: true - /json5/1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true - dependencies: - minimist: 1.2.8 - dev: true - /jsonfile/2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: @@ -6903,44 +6443,6 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - has-symbols: 1.0.3 - object-keys: 1.1.1 - dev: true - - /object.fromentries/2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - - /object.groupby/1.0.2: - resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} - dependencies: - array.prototype.filter: 1.0.3 - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - es-errors: 1.3.0 - dev: true - - /object.values/1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - /obliterator/2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true @@ -7721,16 +7223,6 @@ packages: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true - /regexp.prototype.flags/1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-errors: 1.3.0 - set-function-name: 2.0.1 - dev: true - /registry-auth-token/5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -7846,10 +7338,6 @@ packages: engines: {node: '>=4'} dev: true - /resolve-pkg-maps/1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true - /resolve/1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} dependencies: @@ -7951,16 +7439,6 @@ packages: resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} dev: true - /safe-array-concat/1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 - dev: true - /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true @@ -7969,15 +7447,6 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safe-regex-test/1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-regex: 1.1.4 - dev: true - /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -8097,15 +7566,6 @@ packages: has-property-descriptors: 1.0.2 dev: true - /set-function-name/2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - dependencies: - define-data-property: 1.1.4 - functions-have-names: 1.2.3 - has-property-descriptors: 1.0.2 - dev: true - /setimmediate/1.0.4: resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} dev: true @@ -8246,7 +7706,7 @@ packages: - debug dev: true - /solhint/4.1.1_typescript@5.3.3: + /solhint/4.1.1: resolution: {integrity: sha512-7G4iF8H5hKHc0tR+/uyZesSKtfppFIMvPSW+Ku6MSL25oVRuyFeqNhOsXHfkex64wYJyXs4fe+pvhB069I19Tw==} hasBin: true dependencies: @@ -8256,7 +7716,7 @@ packages: ast-parents: 0.0.1 chalk: 4.1.2 commander: 10.0.1 - cosmiconfig: 8.3.6_typescript@5.3.3 + cosmiconfig: 8.3.6 fast-diff: 1.3.0 glob: 8.1.0 ignore: 5.3.1 @@ -8377,31 +7837,6 @@ packages: strip-ansi: 6.0.1 dev: true - /string.prototype.trim/1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - - /string.prototype.trimend/1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - - /string.prototype.trimstart/1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.22.4 - dev: true - /string_decoder/0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: true @@ -8447,11 +7882,6 @@ packages: is-utf8: 0.2.1 dev: true - /strip-bom/3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true - /strip-hex-prefix/1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -8733,15 +8163,6 @@ packages: - utf-8-validate dev: true - /tsconfig-paths/3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - dependencies: - '@types/json5': 0.0.29 - json5: 1.0.2 - minimist: 1.2.8 - strip-bom: 3.0.0 - dev: true - /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -8826,44 +8247,6 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true - /typed-array-buffer/1.0.1: - resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-length/1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.13 - dev: true - - /typed-array-byte-offset/1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - dependencies: - available-typed-arrays: 1.0.6 - call-bind: 1.0.7 - for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.13 - dev: true - - /typed-array-length/1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - is-typed-array: 1.1.13 - dev: true - /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -8890,25 +8273,10 @@ packages: typescript-compare: 0.0.2 dev: true - /typescript/5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /ultron/1.1.1: resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} dev: true - /unbox-primitive/1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - dependencies: - call-bind: 1.0.7 - has-bigints: 1.0.2 - has-symbols: 1.0.3 - which-boxed-primitive: 1.0.2 - dev: true - /undici-types/5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true @@ -9656,16 +9024,6 @@ packages: webidl-conversions: 3.0.1 dev: true - /which-boxed-primitive/1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - dependencies: - is-bigint: 1.0.4 - is-boolean-object: 1.1.2 - is-number-object: 1.0.7 - is-string: 1.0.7 - is-symbol: 1.0.4 - dev: true - /which-module/1.0.0: resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} dev: true From 2b3004e5670a8f9e94da12003ab7e5f4fed3e4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 14:43:14 +0100 Subject: [PATCH 139/149] chore: deprecate IWitnetRequest, ERC165 --- contracts/interfaces/IWitnetRequest.sol | 15 --------------- contracts/libs/Witnet.sol | 4 ++-- contracts/patterns/ERC165.sol | 3 --- 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 contracts/interfaces/IWitnetRequest.sol delete mode 100644 contracts/patterns/ERC165.sol diff --git a/contracts/interfaces/IWitnetRequest.sol b/contracts/interfaces/IWitnetRequest.sol deleted file mode 100644 index c5b5a43fb..000000000 --- a/contracts/interfaces/IWitnetRequest.sol +++ /dev/null @@ -1,15 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity >=0.7.0 <0.9.0; - -/// @title The Witnet Data Request basic interface. -/// @author The Witnet Foundation. -interface IWitnetRequest { - - /// @notice A `IWitnetRequest` is constructed around a `bytes` value containing - /// @notice a well-formed Witnet Data Request using Protocol Buffers. - function bytecode() external view returns (bytes memory); - - /// @notice Returns SHA256 hash of Witnet Data Request as CBOR-encoded bytes. - function hash() external view returns (bytes32); -} diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 876bbcf47..9f6c7f378 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -28,14 +28,14 @@ library Witnet { /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { - address addr; // Address of the IWitnetRequest contract containing Witnet data request raw bytecode. + address addr; // Address of the (deprecated) IWitnetRequest contract containing Witnet data request raw bytecode. bytes32 slaHash; // Radon SLA hash of the Witnet data request. bytes32 radHash; // Radon radHash of the Witnet data request. uint256 gasprice; // Minimum gas price the DR resolver should pay on the solving tx. uint256 reward; // Escrowed reward to be paid to the DR resolver. } - /// Data kept in EVM-storage containing Witnet-provided response metadata and result. + /// Data kept in EVM-storage containing the Witnet-provided response metadata and CBOR-encoded result. struct Response { address reporter; // Address from which the result was reported. uint256 timestamp; // Timestamp of the Witnet-provided result. diff --git a/contracts/patterns/ERC165.sol b/contracts/patterns/ERC165.sol deleted file mode 100644 index 607071bbb..000000000 --- a/contracts/patterns/ERC165.sol +++ /dev/null @@ -1,3 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; -import "@openzeppelin/contracts/utils/introspection/ERC165.sol"; From bfe6942941b64bfc9960e97a681cae8e8f618a4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 18:03:21 +0100 Subject: [PATCH 140/149] chore: optimize WRB storage footprint (1/2) --- contracts/libs/Witnet.sol | 8 +- contracts/libs/WitnetErrorsLib.sol | 18 ++-- contracts/libs/WitnetV2.sol | 134 +++++++---------------------- test/TestWitnetV2.sol | 74 ++++++++++++++++ 4 files changed, 118 insertions(+), 116 deletions(-) create mode 100644 test/TestWitnetV2.sol diff --git a/contracts/libs/Witnet.sol b/contracts/libs/Witnet.sol index 9f6c7f378..dbdb5b15a 100644 --- a/contracts/libs/Witnet.sol +++ b/contracts/libs/Witnet.sol @@ -444,13 +444,13 @@ library Witnet { /// --- 'bytes' helper methods ------------------------------------------------------------------------------------ /// @dev Transform given bytes into a Witnet.Result instance. - /// @param bytecode Raw bytes representing a CBOR-encoded value. + /// @param cborBytes Raw bytes representing a CBOR-encoded value. /// @return A `Witnet.Result` instance. - function resultFromCborBytes(bytes memory bytecode) + function toWitnetResult(bytes memory cborBytes) internal pure returns (Witnet.Result memory) { - WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(bytecode); + WitnetCBOR.CBOR memory cborValue = WitnetCBOR.fromBytes(cborBytes); return _resultFromCborValue(cborValue); } @@ -795,7 +795,7 @@ library Witnet { // }); // } - // function witnessingWitTotalReward(Witnet.RadonSLA memory sla) + // function witnessingFee(Witnet.RadonSLA memory sla) // internal pure returns (uint64) // { // return sla.witnessReward * sla.numWitnesses; diff --git a/contracts/libs/WitnetErrorsLib.sol b/contracts/libs/WitnetErrorsLib.sol index 03ef45c69..8f2eaddc3 100644 --- a/contracts/libs/WitnetErrorsLib.sol +++ b/contracts/libs/WitnetErrorsLib.sol @@ -9,6 +9,7 @@ import "./WitnetV2.sol"; /// @author The Witnet Foundation. library WitnetErrorsLib { + using Witnet for bytes; using Witnet for uint8; using Witnet for uint256; using Witnet for Witnet.ResultErrorCodes; @@ -30,24 +31,24 @@ library WitnetErrorsLib { ); } - function asResultError(WitnetV2.ResultStatus _status, bytes memory _cborBytes) + function asResultError(WitnetV2.ResponseStatus _status, bytes memory _cborBytes) public pure returns (Witnet.ResultError memory) { if ( - _status == WitnetV2.ResultStatus.Error - || _status == WitnetV2.ResultStatus.Ready + _status == WitnetV2.ResponseStatus.Error + || _status == WitnetV2.ResponseStatus.Ready ) { return resultErrorFromCborBytes(_cborBytes); } else if ( - _status == WitnetV2.ResultStatus.AwaitingError - || _status == WitnetV2.ResultStatus.AwaitingReady + _status == WitnetV2.ResponseStatus.AwaitingError + || _status == WitnetV2.ResponseStatus.AwaitingReady ) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, reason: "WitnetErrorsLib: not yet finalized" }); - } if (_status == WitnetV2.ResultStatus.Awaiting) { + } if (_status == WitnetV2.ResponseStatus.Awaiting) { return Witnet.ResultError({ code: Witnet.ResultErrorCodes.Unknown, reason: "WitnetErrorsLib: not yet solved" @@ -67,7 +68,7 @@ library WitnetErrorsLib { Witnet.ResultErrorCodes _subcode ) { - WitnetCBOR.CBOR[] memory _errors = _errorsFromResult(Witnet.resultFromCborBytes(cborBytes)); + WitnetCBOR.CBOR[] memory _errors = _errorsFromResult(cborBytes.toWitnetResult()); if (_errors.length > 1) { _code = Witnet.ResultErrorCodes(_errors[0].readUint()); if (_errors.length > 2) { @@ -98,8 +99,7 @@ library WitnetErrorsLib { private pure returns(WitnetCBOR.CBOR[] memory) { - Witnet.Result memory result = Witnet.resultFromCborBytes(cborBytes); - return _errorsFromResult(result); + return _errorsFromResult(cborBytes.toWitnetResult()); } /// @dev Extract error codes from a Witnet.Result value. diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 873b4c85d..7ae277a11 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -23,27 +23,25 @@ library WitnetV2 { /// Data kept in EVM-storage for every Request posted to the Witnet Request Board. struct Request { - bytes32 fromCallbackGas; // Packed: contains requester address in most significant bytes20, - // and max callback gas limit if a callback is required. - bytes32 SLA; // Packed: Service-Level Aggreement parameters upon which the data request - // will be solved by the Witnet blockchain. - bytes32 RAD; // Verified hash of the actual data request to be solved by the Witnet blockchain. - uint256 reserved1; // Reserved uint256 slot. - uint256 evmReward; // EVM reward to be paid to the relayer of the Witnet resolution to the data request. - bytes bytecode; // Raw bytecode of the data request to be solved by the Witnet blockchain (only if not yet verified). + address requester; // EVM address from which the request was posted. + uint24 gasCallback; // Max callback gas limit upon response, if a callback is required. + uint72 evmReward; // EVM amount in wei eventually to be paid to the legit result reporter. + bytes witnetBytecode; // Optional: Witnet Data Request bytecode to be solved by the Witnet blockchain. + bytes32 witnetRAD; // Optional: Previously verified hash of the Witnet Data Request to be solved. + WitnetV2.RadonSLA witnetSLA; // Minimum Service-Level parameters to be committed by the Witnet blockchain. } - /// Data kept in EVM-storage containing Witnet-provided response metadata and result. + /// Response metadata and result as resolved by the Witnet blockchain. struct Response { - bytes32 fromFinality; // Packed: contains address from which the result to the data request was reported, and - // the EVM block at which the provided result can be considered to be final. - uint256 timestamp; // Timestamp at which data from data sources were retrieved by the Witnet blockchain. - bytes32 tallyHash; // Hash of the Witnet commit/reveal act that solved the data request. - bytes cborBytes; // CBOR-encoded result to the data request, as resolved by the Witnet blockchain. + 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. + bytes resultCborBytes; // CBOR-encode result to the request, as resolved in the Witnet blockchain. } - /// Final query's result status from a requester's point of view. - enum ResultStatus { + /// Response status from a requester's point of view. + enum ResponseStatus { Void, Awaiting, Ready, @@ -53,113 +51,43 @@ library WitnetV2 { } struct RadonSLA { - /// @dev Number of witnessing nodes that will take part in the resolution - /// @dev of a data request within the Witnet blockchain: - uint8 witnessingCommitteeSize; + /// @notice Number of nodes in the Witnet blockchain that will take part in solving the data request. + uint8 committeeSize; - /// @dev Total reward in $nanoWIT that will be equally distributed to all nodes - /// @dev involved in the resolution of a data request in the Witnet blockchain: - uint64 witnessingWitTotalReward; - } - - /// =============================================================================================================== - /// --- 'WitnetV2.Request' helper methods ------------------------------------------------------------------------- - - function packRequesterCallbackGasLimit(address requester, uint96 callbackGasLimit) internal pure returns (bytes32) { - return bytes32(uint(bytes32(bytes20(requester))) | callbackGasLimit); - } - - function unpackRequester(Request storage self) internal view returns (address) { - return address(bytes20(self.fromCallbackGas)); - } - - function unpackCallbackGasLimit(Request storage self) internal view returns (uint96) { - return uint96(uint(self.fromCallbackGas)); - } - - function unpackRequesterAndCallbackGasLimit(Request storage self) internal view returns (address, uint96) { - bytes32 _packed = self.fromCallbackGas; - return (address(bytes20(_packed)), uint96(uint(_packed))); - } - - - /// =============================================================================================================== - /// --- 'WitnetV2.Response' helper methods ------------------------------------------------------------------------ - - function packReporterEvmFinalityBlock(address reporter, uint256 evmFinalityBlock) internal pure returns (bytes32) { - return bytes32(uint(bytes32(bytes20(reporter))) << 96 | uint96(evmFinalityBlock)); - } - - function unpackWitnetReporter(Response storage self) internal view returns (address) { - return address(bytes20(self.fromFinality)); - } - - function unpackEvmFinalityBlock(Response storage self) internal view returns (uint256) { - return uint(uint96(uint(self.fromFinality))); - } - - function unpackEvmFinalityBlock(bytes32 fromFinality) internal pure returns (uint256) { - return uint(uint96(uint(fromFinality))); - } - - function unpackWitnetReporterAndEvmFinalityBlock(Response storage self) internal view returns (address, uint256) { - bytes32 _packed = self.fromFinality; - return (address(bytes20(_packed)), uint(uint96(uint(_packed)))); + /// @notice Fee in $nanoWIT paid to every node in the Witnet blockchain involved in solving the data request. + /// @dev Witnet nodes participating as witnesses will have to stake as collateral 100x this amount. + uint64 witnessingFee; } /// =============================================================================================================== /// --- 'WitnetV2.RadonSLA' helper methods ------------------------------------------------------------------------ - function toV1(RadonSLA memory self) - internal pure - returns (Witnet.RadonSLA memory) - { - uint64 _witnessReward = self.witnessingWitTotalReward / (self.witnessingCommitteeSize + 3); - return Witnet.RadonSLA({ - numWitnesses: self.witnessingCommitteeSize, - minConsensusPercentage: 51, - witnessReward: _witnessReward, - witnessCollateral: _witnessReward * 100, - minerCommitRevealFee: _witnessReward - }); - } - function equalOrGreaterThan(RadonSLA memory a, RadonSLA memory b) internal pure returns (bool) { - return (a.witnessingCommitteeSize >= b.witnessingCommitteeSize); + return (a.committeeSize >= b.committeeSize); } function isValid(RadonSLA calldata sla) internal pure returns (bool) { return ( - sla.witnessingWitTotalReward > 0 - && sla.witnessingCommitteeSize > 0 && sla.witnessingCommitteeSize <= 127 - ); - } - - function toBytes32(RadonSLA memory sla) internal pure returns (bytes32) { - return bytes32( - uint(sla.witnessingCommitteeSize) << 248 - // | uint(sla.witnessingCollateralRatio) << 240 - // | uint(sla.witnessingNotBeforeTimestamp) << 64 - | uint(sla.witnessingWitTotalReward) + sla.witnessingFee > 0 + && sla.committeeSize > 0 && sla.committeeSize <= 127 ); } - function toRadonSLA(bytes32 _packed) - internal pure returns (RadonSLA memory) - { - return RadonSLA({ - witnessingCommitteeSize: uint8(uint(_packed) >> 248), - // witnessingCollateralRatio: uint8(uint(_packed) >> 240), - // witnessingNotBeforeTimestamp: uint64(uint(_packed) >> 64), - witnessingWitTotalReward: uint64(uint(_packed)) + function toV1(RadonSLA memory self) internal pure returns (Witnet.RadonSLA memory) { + return Witnet.RadonSLA({ + numWitnesses: self.committeeSize, + minConsensusPercentage: 51, + witnessReward: self.witnessingFee, + witnessCollateral: self.witnessingFee * 100, + minerCommitRevealFee: self.witnessingFee }); } - function witnessingWitTotalReward(bytes32 _packed) internal pure returns (uint64) { - return uint64(uint(_packed)); + function witTotalFee(RadonSLA calldata self) internal pure returns (uint64) { + return self.witnessingFee * (self.committeeSize + 3); } uint256 internal constant _WITNET_GENESIS_TIMESTAMP = 1602666045; diff --git a/test/TestWitnetV2.sol b/test/TestWitnetV2.sol new file mode 100644 index 000000000..51406b0f4 --- /dev/null +++ b/test/TestWitnetV2.sol @@ -0,0 +1,74 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "truffle/Assert.sol"; +import "../contracts/libs/WitnetV2.sol"; + +contract TestWitnetV2 { + using WitnetV2 for *; + + + WitnetV2.Request internal __request; + WitnetV2.Response internal __response; + + uint256 internal __finalityBlock; + + function testNOP() external {} + + function testSSTORE() external { + __finalityBlock = block.number; + } + + function testWitnetRequestPackingWithBytecode() external { + __request = WitnetV2.Request({ + requester: msg.sender, + gasCallback: 500000, + evmReward: 10 ** 18, + witnetBytecode: hex"0aab0412520801123268747470733a2f2f6170692e62696e616e63652e55532f6170692f76332f7469636b65723f73796d626f6c3d4254435553441a1a841877821864696c61737450726963658218571a000f4240185b124d0801122c68747470733a2f2f6170692e62697466696e65782e636f6d2f76312f7075627469636b65722f6274637573641a1b8418778218646a6c6173745f70726963658218571a000f4240185b12480801122d68747470733a2f2f7777772e6269747374616d702e6e65742f6170692f76322f7469636b65722f6274637573641a15841877821864646c6173748218571a000f4240185b12550801123168747470733a2f2f6170692e626974747265782e636f6d2f76332f6d61726b6574732f4254432d5553442f7469636b65721a1e8418778218646d6c6173745472616465526174658218571a000f4240185b12620801123768747470733a2f2f6170692e636f696e626173652e636f6d2f76322f65786368616e67652d72617465733f63757272656e63793d4254431a258618778218666464617461821866657261746573821864635553448218571a000f4240185b12630801123268747470733a2f2f6170692e6b72616b656e2e636f6d2f302f7075626c69632f5469636b65723f706169723d4254435553441a2b87187782186666726573756c7482186668585842545a55534482186161618216008218571a000f4240185b1a0d0a0908051205fa3fc000001003220d0a0908051205fa4020000010031080a3c347180a2080ade20428333080acc7f037", + witnetRAD: bytes32(0), + witnetSLA: WitnetV2.RadonSLA({ + committeeSize: 7, + witnessingFee: 10 ** 9 + }) + }); + } + + function testWitnetRequestUnpackingWithBytecode() external returns (WitnetV2.Request memory) { + return __request; + } + + function testWitnetRequestPackingWithRadHash() external { + __request = WitnetV2.Request({ + requester: msg.sender, + gasCallback: 500000, + evmReward: 10 ** 18, + witnetBytecode: hex"", + witnetRAD: bytes32(bytes2(0x1234)), + witnetSLA: WitnetV2.RadonSLA({ + committeeSize: 7, + witnessingFee: 10 ** 9 + }) + }); + } + + function testWitnetRequestUnpackingWithRadHash() external returns (WitnetV2.Request memory) { + return __request; + } + + function testWitnetResponsePacking() external { + __response = WitnetV2.Response({ + reporter: msg.sender, + finality: uint64(block.number), + resultTimestamp: uint32(block.timestamp), + resultTallyHash: blockhash(block.number - 1), + resultCborBytes: hex"010203040506" + }); + } + + function testWitnetResponseUnpacking() external returns (WitnetV2.Response memory) { + return __response; + } + +} From e782ac15d05a3495650621bb25ce9ae47dbe9ec5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 18:45:26 +0100 Subject: [PATCH 141/149] chore: chore: optimize WRB storage footprint (2/2) --- contracts/apps/UsingWitnet.sol | 37 +- contracts/apps/UsingWitnetRandomness.sol | 8 +- contracts/apps/UsingWitnetRequest.sol | 13 +- contracts/apps/UsingWitnetRequestTemplate.sol | 13 +- contracts/apps/WitnetConsumer.sol | 8 +- contracts/apps/WitnetRequestConsumer.sol | 6 +- .../apps/WitnetRequestTemplateConsumer.sol | 8 +- .../WitnetRequestBoardTrustableObscuro.sol | 11 +- .../WitnetRequestBoardTrustableOvm2.sol | 2 +- .../WitnetRequestBoardTrustableReef.sol | 2 +- .../core/defaults/WitnetPriceFeedsDefault.sol | 162 +++---- .../WitnetRequestBoardTrustableBase.sol | 400 ++++++++---------- .../WitnetRequestBoardTrustableDefault.sol | 2 +- .../WitnetRequestBytecodesDefault.sol | 16 +- .../defaults/WitnetRequestFactoryDefault.sol | 14 +- contracts/data/WitnetPriceFeedsData.sol | 2 +- contracts/data/WitnetRequestBoardData.sol | 18 +- contracts/interfaces/IWitnetFeeds.sol | 40 +- contracts/interfaces/IWitnetOracle.sol | 47 +- contracts/interfaces/IWitnetOracleEvents.sol | 2 +- contracts/interfaces/IWitnetPriceSolver.sol | 2 +- .../IWitnetRequestBoardReporter.sol | 26 +- 22 files changed, 386 insertions(+), 453 deletions(-) diff --git a/contracts/apps/UsingWitnet.sol b/contracts/apps/UsingWitnet.sol index dd3e41a33..c8c789b3b 100644 --- a/contracts/apps/UsingWitnet.sol +++ b/contracts/apps/UsingWitnet.sol @@ -17,7 +17,7 @@ abstract contract UsingWitnet /// @dev Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain /// @dev when solving a data request. - bytes32 private __witnetDefaultPackedSLA; + WitnetV2.RadonSLA internal __witnetDefaultSLA; /// @dev Percentage over base fee to pay on every data request, /// @dev as to deal with volatility of evmGasPrice and evmWitPrice during the live time of @@ -32,10 +32,12 @@ abstract contract UsingWitnet "UsingWitnet: uncompliant WitnetOracle" ); __witnet = _wrb; - __witnetDefaultPackedSLA = WitnetV2.toBytes32(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 10, // up to 127 - witnessingWitTotalReward: 10 ** 9 // 1.0 $WIT - })); + __witnetDefaultSLA = WitnetV2.RadonSLA({ + // Number of nodes in the Witnet blockchain that will take part in solving the data request: + committeeSize: 7, + // Fee in $nanoWIT paid to every node in the Witnet blockchain involved in solving the data request: + witnessingFee: 10 ** 9 + }); __witnetBaseFeeOverheadPercentage = 10; // defaults to 10% } @@ -74,22 +76,11 @@ abstract contract UsingWitnet ) / 100; } - function _witnetCheckQueryResultAuditTrail(uint256 _witnetQueryId) + function _witnetCheckQueryResponseStatus(uint256 _witnetQueryId) internal view - returns ( - uint256 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - uint256 _witnetEvmFinalityBlock - ) + returns (WitnetV2.ResponseStatus) { - return __witnet.getQueryResultAuditTrail(_witnetQueryId); - } - - function _witnetCheckQueryResultStatus(uint256 _witnetQueryId) - internal view - returns (WitnetV2.ResultStatus) - { - return __witnet.getQueryResultStatus(_witnetQueryId); + return __witnet.getQueryResponseStatus(_witnetQueryId); } function _witnetCheckQueryResultError(uint256 _witnetQueryId) @@ -99,18 +90,10 @@ abstract contract UsingWitnet return __witnet.getQueryResultError(_witnetQueryId); } - function _witnetDefaultSLA() virtual internal view returns (WitnetV2.RadonSLA memory) { - return WitnetV2.toRadonSLA(__witnetDefaultPackedSLA); - } - function _witnetBaseFeeOverheadPercentage() virtual internal view returns (uint16) { return __witnetBaseFeeOverheadPercentage; } - function __witnetSetDefaultSLA(WitnetV2.RadonSLA memory _defaultSLA) virtual internal { - __witnetDefaultPackedSLA = WitnetV2.toBytes32(_defaultSLA); - } - function __witnetSetBaseFeeOverheadPercentage(uint16 _baseFeeOverheadPercentage) virtual internal { __witnetBaseFeeOverheadPercentage = _baseFeeOverheadPercentage; } diff --git a/contracts/apps/UsingWitnetRandomness.sol b/contracts/apps/UsingWitnetRandomness.sol index b7c97b95c..61e20d0b1 100644 --- a/contracts/apps/UsingWitnetRandomness.sol +++ b/contracts/apps/UsingWitnetRandomness.sol @@ -20,12 +20,10 @@ abstract contract UsingWitnetRandomness /// @param _wrb Address of the WitnetOracle contract. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. - /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( WitnetOracle _wrb, uint16 _baseFeeOverheadPercentage, - uint96 _callbackGasLimit, - WitnetV2.RadonSLA memory _defaultSLA + uint24 _callbackGasLimit ) UsingWitnet(_wrb) WitnetConsumer(_callbackGasLimit) @@ -62,8 +60,6 @@ abstract contract UsingWitnetRandomness _template.buildRequest(new string[][](_retrievals.length)) ).radHash(); } - // Settle default randomize SLA: - __witnetSetDefaultSLA(_defaultSLA); __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } @@ -85,7 +81,7 @@ abstract contract UsingWitnetRandomness } function __witnetRandomize(uint256 _witnetEvmReward) virtual internal returns (uint256) { - return __witnetRandomize(_witnetEvmReward, _witnetDefaultSLA()); + return __witnetRandomize(_witnetEvmReward, __witnetDefaultSLA); } function __witnetRandomize( diff --git a/contracts/apps/UsingWitnetRequest.sol b/contracts/apps/UsingWitnetRequest.sol index fa5cbec20..70a2c20ea 100644 --- a/contracts/apps/UsingWitnetRequest.sol +++ b/contracts/apps/UsingWitnetRequest.sol @@ -10,15 +10,13 @@ abstract contract UsingWitnetRequest WitnetRequest immutable public dataRequest; bytes32 immutable internal __witnetRequestRadHash; - uint16 immutable internal __witnetResultMaxSize; + uint16 immutable internal __witnetQueryResultMaxSize; /// @param _witnetRequest Address of the WitnetRequest contract containing the actual data request. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. - /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor ( WitnetRequest _witnetRequest, - uint16 _baseFeeOverheadPercentage, - WitnetV2.RadonSLA memory _defaultSLA + uint16 _baseFeeOverheadPercentage ) UsingWitnet(_witnetRequest.witnet()) { @@ -27,9 +25,8 @@ abstract contract UsingWitnetRequest "UsingWitnetRequest: uncompliant WitnetRequest" ); dataRequest = _witnetRequest; - __witnetResultMaxSize = _witnetRequest.resultDataMaxSize(); + __witnetQueryResultMaxSize = _witnetRequest.resultDataMaxSize(); __witnetRequestRadHash = _witnetRequest.radHash(); - __witnetSetDefaultSLA(_defaultSLA); __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } @@ -37,13 +34,13 @@ abstract contract UsingWitnetRequest virtual internal view returns (uint256) { - return _witnetEstimateEvmReward(__witnetResultMaxSize); + return _witnetEstimateEvmReward(__witnetQueryResultMaxSize); } function __witnetRequestData(uint256 _witnetEvmReward) virtual internal returns (uint256) { - return __witnetRequestData(_witnetEvmReward, _witnetDefaultSLA()); + return __witnetRequestData(_witnetEvmReward, __witnetDefaultSLA); } function __witnetRequestData( diff --git a/contracts/apps/UsingWitnetRequestTemplate.sol b/contracts/apps/UsingWitnetRequestTemplate.sol index d3ad0a172..5785e8e30 100644 --- a/contracts/apps/UsingWitnetRequestTemplate.sol +++ b/contracts/apps/UsingWitnetRequestTemplate.sol @@ -9,15 +9,13 @@ abstract contract UsingWitnetRequestTemplate { WitnetRequestTemplate immutable public dataRequestTemplate; - uint16 immutable internal __witnetResultMaxSize; + uint16 immutable internal __witnetQueryResultMaxSize; /// @param _witnetRequestTemplate Address of the WitnetRequestTemplate from which actual data requests will get built. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. - /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor ( WitnetRequestTemplate _witnetRequestTemplate, - uint16 _baseFeeOverheadPercentage, - WitnetV2.RadonSLA memory _defaultSLA + uint16 _baseFeeOverheadPercentage ) UsingWitnet(_witnetRequestTemplate.witnet()) { @@ -26,8 +24,7 @@ abstract contract UsingWitnetRequestTemplate "UsingWitnetRequestTemplate: uncompliant WitnetRequestTemplate" ); dataRequestTemplate = _witnetRequestTemplate; - __witnetResultMaxSize = _witnetRequestTemplate.resultDataMaxSize(); - __witnetSetDefaultSLA(_defaultSLA); + __witnetQueryResultMaxSize = _witnetRequestTemplate.resultDataMaxSize(); __witnetSetBaseFeeOverheadPercentage(_baseFeeOverheadPercentage); } @@ -47,7 +44,7 @@ abstract contract UsingWitnetRequestTemplate virtual internal view returns (uint256) { - return _witnetEstimateEvmReward(__witnetResultMaxSize); + return _witnetEstimateEvmReward(__witnetQueryResultMaxSize); } function __witnetRequestData( @@ -56,7 +53,7 @@ abstract contract UsingWitnetRequestTemplate ) virtual internal returns (uint256) { - return __witnetRequestData(_witnetEvmReward, _witnetRequestArgs, _witnetDefaultSLA()); + return __witnetRequestData(_witnetEvmReward, _witnetRequestArgs, __witnetDefaultSLA); } function __witnetRequestData( diff --git a/contracts/apps/WitnetConsumer.sol b/contracts/apps/WitnetConsumer.sol index 32250928f..60c8b30c1 100644 --- a/contracts/apps/WitnetConsumer.sol +++ b/contracts/apps/WitnetConsumer.sol @@ -10,7 +10,7 @@ abstract contract WitnetConsumer UsingWitnet { /// @dev Maximum gas to be spent by the IWitnetConsumer's callback methods. - uint96 private immutable __witnetCallbackGasLimit; + uint24 private immutable __witnetCallbackGasLimit; modifier onlyFromWitnet { require(msg.sender == address(__witnet), "WitnetConsumer: unauthorized"); @@ -18,7 +18,7 @@ abstract contract WitnetConsumer } /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. - constructor (uint96 _callbackGasLimit) { + constructor (uint24 _callbackGasLimit) { __witnetCallbackGasLimit = _callbackGasLimit; } @@ -36,7 +36,7 @@ abstract contract WitnetConsumer function _witnetCallbackGasLimit() virtual internal view - returns (uint96) + returns (uint24) { return __witnetCallbackGasLimit; } @@ -62,7 +62,7 @@ abstract contract WitnetConsumer /// @notice Estimate the minimum reward required for posting a data request, using `tx.gasprice` as a reference. /// @dev Underestimates if the size of returned data is greater than `_resultMaxSize`. /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. - function _witnetEstimateEvmRewardWithCallback(uint96 _callbackGasLimit) + function _witnetEstimateEvmRewardWithCallback(uint24 _callbackGasLimit) virtual internal view returns (uint256) { diff --git a/contracts/apps/WitnetRequestConsumer.sol b/contracts/apps/WitnetRequestConsumer.sol index e93b66dfb..629fee37a 100644 --- a/contracts/apps/WitnetRequestConsumer.sol +++ b/contracts/apps/WitnetRequestConsumer.sol @@ -15,14 +15,12 @@ abstract contract WitnetRequestConsumer /// @param _witnetRequest Address of the WitnetRequest contract containing the actual data request. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. - /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( WitnetRequest _witnetRequest, uint16 _baseFeeOverheadPercentage, - uint96 _callbackGasLimit, - WitnetV2.RadonSLA memory _defaultSLA + uint24 _callbackGasLimit ) - UsingWitnetRequest(_witnetRequest, _baseFeeOverheadPercentage, _defaultSLA) + UsingWitnetRequest(_witnetRequest, _baseFeeOverheadPercentage) WitnetConsumer(_callbackGasLimit) {} diff --git a/contracts/apps/WitnetRequestTemplateConsumer.sol b/contracts/apps/WitnetRequestTemplateConsumer.sol index dc00a9c11..e728c4bbb 100644 --- a/contracts/apps/WitnetRequestTemplateConsumer.sol +++ b/contracts/apps/WitnetRequestTemplateConsumer.sol @@ -15,14 +15,12 @@ abstract contract WitnetRequestTemplateConsumer /// @param _witnetRequestTemplate Address of the WitnetRequestTemplate from which actual data requests will get built. /// @param _baseFeeOverheadPercentage Percentage over base fee to pay as on every data request. /// @param _callbackGasLimit Maximum gas to be spent by the IWitnetConsumer's callback methods. - /// @param _defaultSLA Default Security-Level Agreement parameters to be fulfilled by the Witnet blockchain. constructor( WitnetRequestTemplate _witnetRequestTemplate, uint16 _baseFeeOverheadPercentage, - uint96 _callbackGasLimit, - WitnetV2.RadonSLA memory _defaultSLA + uint24 _callbackGasLimit ) - UsingWitnetRequestTemplate(_witnetRequestTemplate, _baseFeeOverheadPercentage, _defaultSLA) + UsingWitnetRequestTemplate(_witnetRequestTemplate, _baseFeeOverheadPercentage) WitnetConsumer(_callbackGasLimit) {} @@ -31,7 +29,7 @@ abstract contract WitnetRequestTemplateConsumer internal view returns (uint256) { - return WitnetConsumer._witnetEstimateEvmReward(__witnetResultMaxSize); + return WitnetConsumer._witnetEstimateEvmReward(__witnetQueryResultMaxSize); } function _witnetEstimateEvmReward(uint16) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol index 09026970c..add5c2a0b 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableObscuro.sol @@ -69,16 +69,15 @@ contract WitnetRequestBoardTrustableObscuro return WitnetRequestBoardTrustableBase.getQueryResponse(_queryId); } - /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. - /// @dev Fails if the `_queryId` is not in 'Reported' status, or if `msg.sender` is not the actual requester. - /// @param _queryId The unique query identifier - function getQueryResult(uint256 _queryId) + /// @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) public view virtual override onlyRequester(_queryId) - returns (Witnet.Result memory) + returns (Witnet.ResultError memory) { - return WitnetRequestBoardTrustableBase.getQueryResult(_queryId); + return WitnetRequestBoardTrustableBase.getQueryResultError(_queryId); } } diff --git a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol index 311bc4933..b050875a8 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableOvm2.sol @@ -74,7 +74,7 @@ contract WitnetRequestBoardTrustableOvm2 /// @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, uint96 _callbackGasLimit) + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint24 _callbackGasLimit) public view virtual override returns (uint256) diff --git a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol index b45b517d0..88f8e1795 100644 --- a/contracts/core/customs/WitnetRequestBoardTrustableReef.sol +++ b/contracts/core/customs/WitnetRequestBoardTrustableReef.sol @@ -59,7 +59,7 @@ contract WitnetOracleTrustableReef /// @notice Estimate the minimum reward required for posting a data request with a callback. /// @param _callbackGasLimit Maximum gas to be spent when reporting the data request result. - function estimateBaseFeeWithCallback(uint256, uint96 _callbackGasLimit) + function estimateBaseFeeWithCallback(uint256, uint24 _callbackGasLimit) public view virtual override returns (uint256) diff --git a/contracts/core/defaults/WitnetPriceFeedsDefault.sol b/contracts/core/defaults/WitnetPriceFeedsDefault.sol index 8f5c2f503..901a160ce 100644 --- a/contracts/core/defaults/WitnetPriceFeedsDefault.sol +++ b/contracts/core/defaults/WitnetPriceFeedsDefault.sol @@ -11,7 +11,7 @@ import "../../data/WitnetPriceFeedsData.sol"; import "../../libs/WitnetPriceFeedsLib.sol"; import "../../patterns/Ownable2Step.sol"; -/// @title WitnetPriceFeedsDefault: Price Feeds live repository reliant on the Witnet Oracle blockchain. +/// @title WitnetPriceFeeds: Price Feeds live repository reliant on the Witnet Oracle blockchain. /// @author Guillermo Díaz contract WitnetPriceFeedsDefault @@ -22,6 +22,7 @@ contract WitnetPriceFeedsDefault WitnetUpgradableBase { + using Witnet for bytes; using Witnet for Witnet.Result; using WitnetV2 for WitnetV2.Response; using WitnetV2 for WitnetV2.RadonSLA; @@ -32,6 +33,8 @@ contract WitnetPriceFeedsDefault bytes4 immutable public override specs = type(IWitnetPriceFeeds).interfaceId; WitnetOracle immutable public override witnet; + + WitnetV2.RadonSLA private __defaultRadonSLA; constructor( WitnetOracle _wrb, @@ -57,7 +60,7 @@ contract WitnetPriceFeedsDefault address _solver = __records_(bytes4(bytes8(msg.data) << 32)).solver; require( _solver != address(0), - "WitnetPriceFeedsDefault: unsettled solver" + "WitnetPriceFeeds: unsettled solver" ); assembly { let ptr := mload(0x40) @@ -70,7 +73,7 @@ contract WitnetPriceFeedsDefault default { return(ptr, size) } } } else { - revert("WitnetPriceFeedsDefault: not implemented"); + revert("WitnetPriceFeeds: not implemented"); } } @@ -90,15 +93,15 @@ contract WitnetPriceFeedsDefault _owner = abi.decode(_initData, (address)); _transferOwnership(_owner); // settle default Radon SLA upon first initialization - __settleDefaultRadonSLA(WitnetV2.RadonSLA({ - witnessingCommitteeSize: 7, - witnessingWitTotalReward: (2 * (7 + 3)) * 10 ** 8 - })); + __defaultRadonSLA = WitnetV2.RadonSLA({ + committeeSize: 10, + witnessingFee: 2 ** 8 // 0.2 $WIT + }); } else { // only the owner can initialize: require( msg.sender == _owner, - "WitnetPriceFeedsDefault: not the owner" + "WitnetPriceFeeds: not the owner" ); } @@ -106,17 +109,17 @@ contract WitnetPriceFeedsDefault __proxiable().codehash != bytes32(0) && __proxiable().codehash == codehash() ) { - revert("WitnetPriceFeedsDefault: already upgraded"); + revert("WitnetPriceFeeds: already upgraded"); } __proxiable().codehash = codehash(); require( address(witnet).code.length > 0, - "WitnetPriceFeedsDefault: inexistent oracle" + "WitnetPriceFeeds: inexistent oracle" ); require( witnet.specs() == type(IWitnetOracle).interfaceId, - "WitnetPriceFeedsDefault: uncompliant oracle" + "WitnetPriceFeeds: uncompliant oracle" ); emit Upgraded(_owner, base(), codehash(), version()); } @@ -192,7 +195,7 @@ contract WitnetPriceFeedsDefault public view returns (Witnet.RadonSLA memory) { - return WitnetV2.toRadonSLA(__storage().packedDefaultSLA).toV1(); + return __defaultRadonSLA.toV1(); } function estimateUpdateBaseFee(uint256 _evmGasPrice) @@ -203,20 +206,14 @@ contract WitnetPriceFeedsDefault return witnet.estimateBaseFee(_evmGasPrice, 32); } - function latestResponse(bytes4 feedId) + function lastValidResponse(bytes4 feedId) override public view returns (WitnetV2.Response memory) { - return witnet.getQueryResponse(_latestValidQueryId(feedId)); - } - - function latestResult(bytes4 feedId) - override external view - returns (Witnet.Result memory) - { - return witnet.getQueryResult(_latestValidQueryId(feedId)); + return witnet.getQueryResponse(_lastValidQueryId(feedId)); } + function latestUpdateQueryId(bytes4 feedId) override public view returns (uint256) @@ -226,7 +223,7 @@ contract WitnetPriceFeedsDefault function latestUpdateRequest(bytes4 feedId) override external view - returns (bytes32, Witnet.RadonSLA memory) + returns (WitnetV2.Request memory) { return witnet.getQueryRequest(latestUpdateQueryId(feedId)); } @@ -245,37 +242,37 @@ contract WitnetPriceFeedsDefault return witnet.getQueryResultError(latestUpdateQueryId(feedId)); } - function latestUpdateResultStatus(bytes4 feedId) + function latestUpdateResponseStatus(bytes4 feedId) override public view - returns (WitnetV2.ResultStatus) + returns (WitnetV2.ResponseStatus) { - return _checkQueryResultStatus(latestUpdateQueryId(feedId)); + return _checkQueryResponseStatus(latestUpdateQueryId(feedId)); } - function lookupBytecode(bytes4 feedId) + function lookupWitnetBytecode(bytes4 feedId) override external view returns (bytes memory) { Record storage __record = __records_(feedId); require( __record.radHash != 0, - "WitnetPriceFeedsDefault: no RAD hash" + "WitnetPriceFeeds: no RAD hash" ); return registry().bytecodeOf(__record.radHash); } - function lookupRadHash(bytes4 feedId) + function lookupWitnetRadHash(bytes4 feedId) override public view returns (bytes32) { return __records_(feedId).radHash; } - function lookupRetrievals(bytes4 feedId) + function lookupWitnetRetrievals(bytes4 feedId) override external view returns (Witnet.RadonRetrieval[] memory _retrievals) { - bytes32[] memory _hashes = registry().lookupRadonRequestSources(lookupRadHash(feedId)); + bytes32[] memory _hashes = registry().lookupRadonRequestSources(lookupWitnetRadHash(feedId)); _retrievals = new Witnet.RadonRetrieval[](_hashes.length); for (uint _ix = 0; _ix < _retrievals.length; _ix ++) { _retrievals[_ix] = registry().lookupRadonRetrieval(_hashes[_ix]); @@ -291,10 +288,7 @@ contract WitnetPriceFeedsDefault virtual override returns (uint256) { - return __requestUpdate( - feedId, - WitnetV2.toRadonSLA(__storage().packedDefaultSLA) - ); + return __requestUpdate(feedId, __defaultRadonSLA); } function requestUpdate(bytes4 feedId, WitnetV2.RadonSLA calldata updateSLA) @@ -303,8 +297,8 @@ contract WitnetPriceFeedsDefault returns (uint256 _usedFunds) { require( - updateSLA.equalOrGreaterThan(WitnetV2.toRadonSLA(__storage().packedDefaultSLA)), - "WitnetPriceFeedsDefault: unsecure update" + updateSLA.equalOrGreaterThan(__defaultRadonSLA), + "WitnetPriceFeeds: unsecure update" ); return __requestUpdate(feedId, updateSLA); } @@ -353,7 +347,7 @@ contract WitnetPriceFeedsDefault bytes4[] storage __ids = __storage().ids; Record storage __record = __records_(feedId); uint _index = __record.index; - require(_index != 0, "WitnetPriceFeedsDefault: unknown feed"); + require(_index != 0, "WitnetPriceFeeds: unknown feed"); { bytes4 _lastFeedId = __ids[__ids.length - 1]; __ids[_index - 1] = _lastFeedId; @@ -363,11 +357,12 @@ contract WitnetPriceFeedsDefault emit DeletedFeed(msg.sender, feedId, caption); } - function settleDefaultRadonSLA(WitnetV2.RadonSLA memory defaultSLA) + function settleDefaultRadonSLA(WitnetV2.RadonSLA calldata defaultSLA) override public onlyOwner { - __settleDefaultRadonSLA(defaultSLA); + require(defaultSLA.isValid(), "WitnetPriceFeeds: invalid SLA"); + __defaultRadonSLA = defaultSLA; } function settleFeedRequest(string calldata caption, bytes32 radHash) @@ -376,7 +371,7 @@ contract WitnetPriceFeedsDefault { require( registry().lookupRadonRequestResultDataType(radHash) == dataType, - "WitnetPriceFeedsDefault: bad result data type" + "WitnetPriceFeeds: bad result data type" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -423,7 +418,7 @@ contract WitnetPriceFeedsDefault { require( solver != address(0), - "WitnetPriceFeedsDefault: no solver address" + "WitnetPriceFeeds: no solver address" ); bytes4 feedId = hash(caption); Record storage __record = __records_(feedId); @@ -469,7 +464,7 @@ contract WitnetPriceFeedsDefault _reason := add(_reason, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeedsDefault: smoke-test failed: ", + "WitnetPriceFeeds: smoke-test failed: ", string(abi.decode(_reason,(string))) ))); } @@ -507,15 +502,15 @@ contract WitnetPriceFeedsDefault public view returns (IWitnetPriceSolver.Price memory) { - uint _queryId = _latestValidQueryId(feedId); + uint _queryId = _lastValidQueryId(feedId); if (_queryId > 0) { - WitnetV2.Response memory _latestResponse = latestResponse(feedId); - Witnet.Result memory _latestResult = Witnet.resultFromCborBytes(_latestResponse.cborBytes); + WitnetV2.Response memory _lastValidResponse = lastValidResponse(feedId); + Witnet.Result memory _latestResult = _lastValidResponse.resultCborBytes.toWitnetResult(); return IWitnetPriceSolver.Price({ value: _latestResult.asUint(), - timestamp: _latestResponse.timestamp, - tallyHash: _latestResponse.tallyHash, - status: latestUpdateResultStatus(feedId) + timestamp: _lastValidResponse.resultTimestamp, + tallyHash: _lastValidResponse.resultTallyHash, + status: latestUpdateResponseStatus(feedId) }); } else { address _solver = __records_(feedId).solver; @@ -530,7 +525,7 @@ contract WitnetPriceFeedsDefault _result := add(_result, 4) } revert(string(abi.encodePacked( - "WitnetPriceFeedsDefault: ", + "WitnetPriceFeeds: ", string(abi.decode(_result, (string))) ))); } else { @@ -541,7 +536,7 @@ contract WitnetPriceFeedsDefault value: 0, timestamp: 0, tallyHash: 0, - status: latestUpdateResultStatus(feedId) + status: latestUpdateResponseStatus(feedId) }); } } @@ -598,12 +593,12 @@ contract WitnetPriceFeedsDefault return ( int(_latestPrice.value), _latestPrice.timestamp, - _latestPrice.status == WitnetV2.ResultStatus.Ready + _latestPrice.status == WitnetV2.ResponseStatus.Ready ? 200 : ( - _latestPrice.status == WitnetV2.ResultStatus.Awaiting - || _latestPrice.status == WitnetV2.ResultStatus.AwaitingReady - || _latestPrice.status == WitnetV2.ResultStatus.AwaitingError + _latestPrice.status == WitnetV2.ResponseStatus.Awaiting + || _latestPrice.status == WitnetV2.ResponseStatus.AwaitingReady + || _latestPrice.status == WitnetV2.ResponseStatus.AwaitingError ) ? 404 : 400 ); } @@ -612,29 +607,29 @@ contract WitnetPriceFeedsDefault // ================================================================================================================ // --- Internal methods ------------------------------------------------------------------------------------------- - function _checkQueryResultStatus(uint _queryId) + function _checkQueryResponseStatus(uint _queryId) internal view - returns (WitnetV2.ResultStatus) + returns (WitnetV2.ResponseStatus) { if (_queryId > 0) { - return witnet.getQueryResultStatus(_queryId); + return witnet.getQueryResponseStatus(_queryId); } else { - return WitnetV2.ResultStatus.Ready; + return WitnetV2.ResponseStatus.Ready; } } - function _latestValidQueryId(bytes4 feedId) + function _lastValidQueryId(bytes4 feedId) virtual internal view returns (uint256) { uint _latestUpdateQueryId = latestUpdateQueryId(feedId); if ( _latestUpdateQueryId > 0 - && witnet.getQueryResultStatus(_latestUpdateQueryId) == WitnetV2.ResultStatus.Ready + && witnet.getQueryResponseStatus(_latestUpdateQueryId) == WitnetV2.ResponseStatus.Ready ) { return _latestUpdateQueryId; } else { - return __records_(feedId).latestValidQueryId; + return __records_(feedId).lastValidQueryId; } } @@ -645,7 +640,7 @@ contract WitnetPriceFeedsDefault return _decimals; } catch Error(string memory reason) { revert(string(abi.encodePacked( - "WitnetPriceFeedsDefault: ", + "WitnetPriceFeeds: ", reason ))); } @@ -670,29 +665,35 @@ contract WitnetPriceFeedsDefault _usedFunds = estimateUpdateBaseFee(tx.gasprice); require( msg.value >= _usedFunds, - "WitnetPriceFeedsDefault: insufficient reward" + "WitnetPriceFeeds: insufficient reward" ); uint _latestId = __feed.latestUpdateQueryId; - WitnetV2.ResultStatus _latestStatus = _checkQueryResultStatus(_latestId); - if (_latestStatus == WitnetV2.ResultStatus.Awaiting) { + WitnetV2.ResponseStatus _latestStatus = _checkQueryResponseStatus(_latestId); + if (_latestStatus == WitnetV2.ResponseStatus.Awaiting) { // latest update is still pending, so just increase the reward // accordingly to current tx gasprice: - int _deltaReward = int(witnet.getQueryReward(_latestId)) - int(_usedFunds); + int _deltaReward = int(witnet.getQueryEvmReward(_latestId)) - int(_usedFunds); if (_deltaReward > 0) { _usedFunds = uint(_deltaReward); - witnet.upgradeQueryReward{value: _usedFunds}(_latestId); - emit UpdatingFeedReward(msg.sender, feedId, _usedFunds); + witnet.upgradeQueryEvmReward{value: _usedFunds}(_latestId); + // solhint-disable avoid-tx-origin + emit UpdateRequestReward( + tx.origin, + feedId, + _latestId, + _usedFunds + ); } else { _usedFunds = 0; } } else { // Check if latest update ended successfully: - if (_latestStatus == WitnetV2.ResultStatus.Ready) { + if (_latestStatus == WitnetV2.ResponseStatus.Ready) { // If so, remove previous last valid query from the WRB: - if (__feed.latestValidQueryId > 0) { - witnet.fetchQueryResponse(__feed.latestValidQueryId); + if (__feed.lastValidQueryId > 0) { + witnet.fetchQueryResponse(__feed.lastValidQueryId); } - __feed.latestValidQueryId = _latestId; + __feed.lastValidQueryId = _latestId; } else { // Otherwise, try to delete latest query, as it was faulty // and we are about to post a new update request: @@ -705,11 +706,13 @@ contract WitnetPriceFeedsDefault ); // Update latest query id: __feed.latestUpdateQueryId = _latestId; - emit UpdatingFeed( - msg.sender, - feedId, - querySLA.toBytes32(), - _usedFunds + // solhint-disable avoid-tx-origin: + emit UpdateRequest( + tx.origin, + feedId, + _latestId, + _usedFunds, + querySLA ); } } else if (__feed.solver != address(0)) { @@ -718,7 +721,7 @@ contract WitnetPriceFeedsDefault querySLA ); } else { - revert("WitnetPriceFeedsDefault: unknown feed"); + revert("WitnetPriceFeeds: unknown feed"); } if (_usedFunds < msg.value) { // transfer back unused funds: @@ -726,7 +729,4 @@ contract WitnetPriceFeedsDefault } } - function __settleDefaultRadonSLA(WitnetV2.RadonSLA memory sla) internal { - __storage().packedDefaultSLA = WitnetV2.toBytes32(sla); - } } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol index 46e6dc747..209a5f1a2 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableBase.sol @@ -8,7 +8,6 @@ import "../../WitnetOracle.sol"; import "../../WitnetRequestFactory.sol"; import "../../data/WitnetRequestBoardDataACLs.sol"; -import "../../interfaces/IWitnetRequest.sol"; import "../../interfaces/IWitnetRequestBoardAdminACLs.sol"; import "../../interfaces/IWitnetRequestBoardReporter.sol"; import "../../interfaces/IWitnetConsumer.sol"; @@ -41,24 +40,24 @@ abstract contract WitnetRequestBoardTrustableBase WitnetRequestFactory immutable private __factory; - modifier checkCallbackRecipient(address _addr, uint96 _callbackGasLimit) { + modifier checkCallbackRecipient(address _addr, uint24 _callbackGasLimit) { require( _addr.code.length > 0 && IWitnetConsumer(_addr).reportableFrom(address(this)) && _callbackGasLimit > 0, - "WitnetRequestBoardTrustableBase: invalid callback" + "WitnetOracle: invalid callback" ); _; } modifier checkReward(uint256 _baseFee) { require( _getMsgValue() >= _baseFee, - "WitnetRequestBoardTrustableBase: insufficient reward" + "WitnetOracle: insufficient reward" ); _; } modifier checkSLA(WitnetV2.RadonSLA calldata sla) { require( WitnetV2.isValid(sla), - "WitnetRequestBoardTrustableBase: invalid SLA" + "WitnetOracle: invalid SLA" ); _; } @@ -82,7 +81,7 @@ abstract contract WitnetRequestBoardTrustableBase } receive() external payable { - revert("WitnetRequestBoardTrustableBase: no transfers accepted"); + revert("WitnetOracle: no transfers accepted"); } /// @dev Provide backwards compatibility for dapps bound to versions <= 0.6.1 @@ -92,7 +91,7 @@ abstract contract WitnetRequestBoardTrustableBase /* solhint-disable no-complex-fallback */ fallback() override external { revert(string(abi.encodePacked( - "WitnetRequestBoardTrustableBase: not implemented: 0x", + "WitnetOracle: not implemented: 0x", Witnet.toHexString(uint8(bytes1(msg.sig))), Witnet.toHexString(uint8(bytes1(msg.sig << 8))), Witnet.toHexString(uint8(bytes1(msg.sig << 16))), @@ -121,7 +120,7 @@ abstract contract WitnetRequestBoardTrustableBase /// @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, uint96 _callbackGasLimit) virtual public view returns (uint256); + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint24 _callbackGasLimit) virtual public view returns (uint256); // ================================================================================================================ @@ -146,7 +145,7 @@ abstract contract WitnetRequestBoardTrustableBase // only owner can initialize: require( msg.sender == _owner, - "WitnetRequestBoardTrustableBase: not the owner" + "WitnetOracle: not the owner" ); // get reporters from _initData _reporters = abi.decode(_initData, (address[])); @@ -156,23 +155,23 @@ abstract contract WitnetRequestBoardTrustableBase // current implementation cannot be initialized more than once: require( __storage().base != base(), - "WitnetRequestBoardTrustableBase: already upgraded" + "WitnetOracle: already upgraded" ); } __storage().base = base(); require( address(__factory).code.length > 0, - "WitnetRequestBoardTrustableBase: inexistent factory" + "WitnetOracle: inexistent factory" ); require( __factory.specs() == type(IWitnetRequestFactory).interfaceId, - "WitnetRequestBoardTrustableBase: uncompliant factory" + "WitnetOracle: uncompliant factory" ); require( address(__factory.witnet()) == address(this) && address(__factory.registry()) == address(registry), - "WitnetRequestBoardTrustableBase: discordant factory" + "WitnetOracle: discordant factory" ); // Set reporters @@ -238,39 +237,29 @@ abstract contract WitnetRequestBoardTrustableBase { return __storage().queries[_witnetQueryId]; } - - /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the query does not exist. - /// @param _witnetQueryId The unique query identifier. - function getQueryBytecode(uint256 _witnetQueryId) + + /// Retrieves the reward currently set for the given query. + /// @dev Fails if the `_witnetQueryId` is not valid or, if it has already been + /// @dev reported, or deleted. + /// @param _witnetQueryId The unique query identifier + function getQueryEvmReward(uint256 _witnetQueryId) + override external view - virtual override - returns (bytes memory) + inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) + returns (uint256) { - require( - _statusOf(_witnetQueryId) != WitnetV2.QueryStatus.Unknown, - "WitnetRequestBoardTrustableBase: unknown query" - ); - WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - if (__request.RAD != bytes32(0)) { - return registry.bytecodeOf(__request.RAD); - } else { - return __request.bytecode; - } + return __seekQueryRequest(_witnetQueryId).evmReward; } + /// @notice Retrieves the RAD hash and SLA parameters of the given query. /// @param _witnetQueryId The unique query identifier. function getQueryRequest(uint256 _witnetQueryId) external view override - returns (bytes32, Witnet.RadonSLA memory) + returns (WitnetV2.Request memory) { - WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - return ( - __request.RAD == bytes32(0) ? registry.hashOf(__request.bytecode) : __request.RAD, - WitnetV2.toRadonSLA(__request.SLA).toV1() - ); + return __seekQueryRequest(_witnetQueryId); } /// Retrieves the Witnet-provable result, and metadata, to a previously posted request. @@ -284,113 +273,67 @@ abstract contract WitnetRequestBoardTrustableBase return __seekQueryResponse(_witnetQueryId); } - /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. - /// @param _witnetQueryId The unique query identifier. - function getQueryResult(uint256 _witnetQueryId) - public view - virtual override - returns (Witnet.Result memory) - { - // todo: fail if not in finalized status ? - WitnetV2.Response storage _response = __seekQueryResponse(_witnetQueryId); - return _response.cborBytes.resultFromCborBytes(); - } - - /// @notice Returns reference to the commit/reveal act that took place on the Witnet blockchain. - /// @param _witnetQueryId The unique query identifier. - /// @return _witnetTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return _witnetTallyHash Hash of the commit/reveal act that solved the query on the Witnet blockchain. - /// @return _witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. - function getQueryResultAuditTrail(uint256 _witnetQueryId) - external view - override - returns ( - uint256 _witnetTimestamp, - bytes32 _witnetTallyHash, - uint256 _witnetEvmFinalityBlock - ) - { - WitnetV2.Response storage __response = __seekQueryResponse(_witnetQueryId); - return ( - __response.timestamp, - __response.tallyHash, - __response.unpackEvmFinalityBlock() - ); - } - - /// @notice Gets error code identifying some possible failure on the resolution of the given query. - /// @param _witnetQueryId The unique query identifier. - function getQueryResultError(uint256 _witnetQueryId) - override external view - returns (Witnet.ResultError memory) - { - WitnetV2.ResultStatus _status = getQueryResultStatus(_witnetQueryId); - try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_witnetQueryId).cborBytes) - returns (Witnet.ResultError memory _resultError) - { - return _resultError; - } - catch Error(string memory _reason) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) - }); - } - catch (bytes memory) { - return Witnet.ResultError({ - code: Witnet.ResultErrorCodes.Unknown, - reason: "WitnetErrorsLib: assertion failed" - }); - } - } - /// @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 _witnetQueryId The unique query identifier. - function getQueryResultStatus(uint256 _witnetQueryId) + function getQueryResponseStatus(uint256 _witnetQueryId) virtual public view - returns (WitnetV2.ResultStatus) + returns (WitnetV2.ResponseStatus) { WitnetV2.QueryStatus _queryStatus = _statusOf(_witnetQueryId); if ( _queryStatus == WitnetV2.QueryStatus.Finalized || _queryStatus == WitnetV2.QueryStatus.Reported ) { - bytes storage __cborValues = __seekQueryResponse(_witnetQueryId).cborBytes; + bytes storage __cborValues = __seekQueryResponse(_witnetQueryId).resultCborBytes; // determine whether reported result is an error by peeking the first byte return (__cborValues[0] == bytes1(0xd8) ? (_queryStatus == WitnetV2.QueryStatus.Finalized - ? WitnetV2.ResultStatus.Error - : WitnetV2.ResultStatus.AwaitingError + ? WitnetV2.ResponseStatus.Error + : WitnetV2.ResponseStatus.AwaitingError ) : (_queryStatus == WitnetV2.QueryStatus.Finalized - ? WitnetV2.ResultStatus.Ready - : WitnetV2.ResultStatus.AwaitingReady + ? WitnetV2.ResponseStatus.Ready + : WitnetV2.ResponseStatus.AwaitingReady ) ); } else if ( _queryStatus == WitnetV2.QueryStatus.Posted || _queryStatus == WitnetV2.QueryStatus.Undeliverable ) { - return WitnetV2.ResultStatus.Awaiting; + return WitnetV2.ResponseStatus.Awaiting; } else { - return WitnetV2.ResultStatus.Void; + return WitnetV2.ResponseStatus.Void; } } - /// Retrieves the reward currently set for a previously posted request. - /// @dev Fails if the `_witnetQueryId` is not valid or, if it has already been - /// @dev reported, or deleted. - /// @param _witnetQueryId The unique query identifier - function getQueryReward(uint256 _witnetQueryId) - override - external view - inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) - returns (uint256) + /// @notice Gets error code identifying some possible failure on the resolution of the given query. + /// @param _witnetQueryId The unique query identifier. + function getQueryResultError(uint256 _witnetQueryId) + virtual override + public view + returns (Witnet.ResultError memory) { - return __seekQueryRequest(_witnetQueryId).evmReward; + WitnetV2.ResponseStatus _status = getQueryResponseStatus(_witnetQueryId); + try WitnetErrorsLib.asResultError(_status, __seekQueryResponse(_witnetQueryId).resultCborBytes) + returns (Witnet.ResultError memory _resultError) + { + return _resultError; + } + catch Error(string memory _reason) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: string(abi.encodePacked("WitnetErrorsLib: ", _reason)) + }); + } + catch (bytes memory) { + return Witnet.ResultError({ + code: Witnet.ResultErrorCodes.Unknown, + reason: "WitnetErrorsLib: assertion failed" + }); + } } /// Gets current status of given query. @@ -402,6 +345,27 @@ abstract contract WitnetRequestBoardTrustableBase return _statusOf(_witnetQueryId); } + /// @notice Retrieves the Witnet Data Request bytecode of a previously posted query. + /// @dev Fails if the query does not exist. + /// @param _witnetQueryId The unique query identifier. + function getQueryWitnetBytecode(uint256 _witnetQueryId) + external view + virtual override + returns (bytes memory) + { + require( + _statusOf(_witnetQueryId) != WitnetV2.QueryStatus.Unknown, + "WitnetOracle: unknown query" + ); + WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); + if (__request.witnetRAD != bytes32(0)) { + return registry.bytecodeOf(__request.witnetRAD); + } else { + return __request.witnetBytecode; + } + } + + /// @notice Returns next query id to be generated by the Witnet Request Board. function getNextQueryId() external view override @@ -431,12 +395,12 @@ abstract contract WitnetRequestBoardTrustableBase checkSLA(_querySLA) returns (uint256 _witnetQueryId) { - _witnetQueryId = __postRequest(_queryRAD, _querySLA.toBytes32(), 0); + _witnetQueryId = __postRequest(_queryRAD, _querySLA, 0); // Let Web3 observers know that a new request has been posted emit WitnetQuery( _witnetQueryId, - _querySLA.witnessingWitTotalReward, - _getMsgValue() + _getMsgValue(), + _querySLA.witTotalFee() ); } @@ -458,7 +422,7 @@ abstract contract WitnetRequestBoardTrustableBase function postRequestWithCallback( bytes32 _queryRAD, WitnetV2.RadonSLA calldata _querySLA, - uint96 _queryCallbackGasLimit + uint24 _queryCallbackGasLimit ) virtual override external payable @@ -469,13 +433,13 @@ abstract contract WitnetRequestBoardTrustableBase { _witnetQueryId = __postRequest( _queryRAD, - _querySLA.toBytes32(), + _querySLA, _queryCallbackGasLimit ); emit WitnetQuery( _witnetQueryId, - _querySLA.witnessingWitTotalReward, - _getMsgValue() + _getMsgValue(), + _querySLA.witTotalFee() ); } @@ -497,7 +461,7 @@ abstract contract WitnetRequestBoardTrustableBase function postRequestWithCallback( bytes calldata _queryUnverifiedBytecode, WitnetV2.RadonSLA calldata _querySLA, - uint96 _queryCallbackGasLimit + uint24 _queryCallbackGasLimit ) virtual override external payable @@ -508,27 +472,27 @@ abstract contract WitnetRequestBoardTrustableBase { _witnetQueryId = __postRequest( bytes32(0), - _querySLA.toBytes32(), + _querySLA, _queryCallbackGasLimit ); - __seekQueryRequest(_witnetQueryId).bytecode = _queryUnverifiedBytecode; + __seekQueryRequest(_witnetQueryId).witnetBytecode = _queryUnverifiedBytecode; emit WitnetQuery( _witnetQueryId, - _querySLA.witnessingWitTotalReward, - _getMsgValue() + _getMsgValue(), + _querySLA.witTotalFee() ); } /// Increments the reward of a previously posted request by adding the transaction value to it. /// @dev Fails if the `_witnetQueryId` is not in 'Posted' status. /// @param _witnetQueryId The unique query identifier. - function upgradeQueryReward(uint256 _witnetQueryId) + function upgradeQueryEvmReward(uint256 _witnetQueryId) external payable virtual override inStatus(_witnetQueryId, WitnetV2.QueryStatus.Posted) { WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - __request.evmReward += _getMsgValue(); + __request.evmReward += uint72(_getMsgValue()); emit WitnetQueryRewardUpgraded(_witnetQueryId, __request.evmReward); } @@ -550,7 +514,7 @@ abstract contract WitnetRequestBoardTrustableBase if (_statusOf(_witnetQueryIds[_ix]) == WitnetV2.QueryStatus.Posted) { WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryIds[_ix]); _revenues += __request.evmReward; - _expenses += _gasPrice * __request.unpackCallbackGasLimit(); + _expenses += _gasPrice * __request.gasCallback; } } return int256(_revenues) - int256(_expenses); @@ -560,15 +524,15 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Will assume `block.timestamp` as the timestamp at which the request was solved. /// @dev Fails if: /// @dev - the `_witnetQueryId` is not in 'Posted' status. - /// @dev - provided `_witnetResultTallyHash` is zero; + /// @dev - provided `_witnetQueryResultTallyHash` is zero; /// @dev - length of provided `_result` is zero. /// @param _witnetQueryId The unique identifier of the data request. - /// @param _witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _witnetResultCborBytes The result itself as bytes. + /// @param _witnetQueryResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _witnetQueryResultCborBytes The result itself as bytes. function reportResult( uint256 _witnetQueryId, - bytes32 _witnetResultTallyHash, - bytes calldata _witnetResultCborBytes + bytes32 _witnetQueryResultTallyHash, + bytes calldata _witnetQueryResultCborBytes ) external override @@ -577,22 +541,22 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256) { require( - _witnetResultTallyHash != 0, + _witnetQueryResultTallyHash != 0, "WitnetRequestBoardTrustableDefault: tally has cannot be zero" ); // Ensures the result bytes do not have zero length // This would not be a valid encoding with CBOR and could trigger a reentrancy attack require( - _witnetResultCborBytes.length != 0, + _witnetQueryResultCborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); // Do actual report: // solhint-disable not-rely-on-time return __reportResultAndReward( _witnetQueryId, - uint64(block.timestamp), - _witnetResultTallyHash, - _witnetResultCborBytes + uint32(block.timestamp), + _witnetQueryResultTallyHash, + _witnetQueryResultCborBytes ); } @@ -600,17 +564,17 @@ abstract contract WitnetRequestBoardTrustableBase /// @dev Fails if: /// @dev - called from unauthorized address; /// @dev - the `_witnetQueryId` is not in 'Posted' status. - /// @dev - provided `_witnetResultTallyHash` is zero; - /// @dev - length of provided `_witnetResultCborBytes` is zero. + /// @dev - provided `_witnetQueryResultTallyHash` is zero; + /// @dev - length of provided `_witnetQueryResultCborBytes` is zero. /// @param _witnetQueryId The unique query identifier - /// @param _witnetResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. - /// @param _witnetResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. - /// @param _witnetResultCborBytes The result itself as bytes. + /// @param _witnetQueryResultTimestamp Timestamp at which the reported value was captured by the Witnet blockchain. + /// @param _witnetQueryResultTallyHash Hash of the commit/reveal witnessing act that took place in the Witnet blockahin. + /// @param _witnetQueryResultCborBytes The result itself as bytes. function reportResult( uint256 _witnetQueryId, - uint64 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - bytes calldata _witnetResultCborBytes + uint32 _witnetQueryResultTimestamp, + bytes32 _witnetQueryResultTallyHash, + bytes calldata _witnetQueryResultCborBytes ) external override @@ -619,25 +583,25 @@ abstract contract WitnetRequestBoardTrustableBase returns (uint256) { require( - _witnetResultTimestamp <= block.timestamp, + _witnetQueryResultTimestamp <= block.timestamp, "WitnetRequestBoardTrustableDefault: bad timestamp" ); require( - _witnetResultTallyHash != 0, + _witnetQueryResultTallyHash != 0, "WitnetRequestBoardTrustableDefault: Witnet tallyHash cannot be zero" ); // Ensures the result bytes do not have zero length (this would not be a valid CBOR encoding // and could trigger a reentrancy attack) require( - _witnetResultCborBytes.length != 0, + _witnetQueryResultCborBytes.length != 0, "WitnetRequestBoardTrustableDefault: result cannot be empty" ); // Do actual report and return reward transfered to the reproter: return __reportResultAndReward( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, - _witnetResultCborBytes + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, + _witnetQueryResultCborBytes ); } @@ -664,36 +628,42 @@ abstract contract WitnetRequestBoardTrustableBase if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad queryId" + "WitnetOracle: bad queryId" ); } - } else if (_batchResults[_i].tallyHash == 0) { + } else if (_batchResults[_i].queryResultTallyHash == 0) { if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad tallyHash" + "WitnetOracle: bad tallyHash" ); } - } else if (_batchResults[_i].cborBytes.length == 0) { + } else if (_batchResults[_i].queryResultCborBytes.length == 0) { if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad cborBytes" + "WitnetOracle: bad cborBytes" ); } - } else if (_batchResults[_i].timestamp > 0 && _batchResults[_i].timestamp > block.timestamp) { + } else if ( + _batchResults[_i].queryResultTimestamp > 0 + && uint256(_batchResults[_i].queryResultTimestamp) > block.timestamp + ) { if (_verbose) { emit BatchReportError( _batchResults[_i].queryId, - "WitnetRequestBoardTrustableBase: bad timestamp" + "WitnetOracle: bad timestamp" ); } } else { _batchReward += __reportResult( _batchResults[_i].queryId, - _batchResults[_i].timestamp == 0 ? uint64(block.timestamp) : _batchResults[_i].timestamp, - _batchResults[_i].tallyHash, - _batchResults[_i].cborBytes + _batchResults[_i].queryResultTimestamp == uint32(0) + ? uint32(block.timestamp) + : _batchResults[_i].queryResultTimestamp + , + _batchResults[_i].queryResultTallyHash, + _batchResults[_i].queryResultCborBytes ); } } @@ -787,36 +757,33 @@ abstract contract WitnetRequestBoardTrustableBase ))); } - function __postRequest(bytes32 _radHash, bytes32 _packedSLA, uint96 _callbackGasLimit) + function __postRequest(bytes32 _radHash, WitnetV2.RadonSLA calldata _sla, uint24 _callbackGasLimit) virtual internal returns (uint256 _witnetQueryId) { _witnetQueryId = ++ __storage().nonce; //__newQueryId(_radHash, _packedSLA); WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - require( - __request.fromCallbackGas == bytes32(0), - "WitnetRequestBoardTrustableBase: already posted" - ); + require(__request.requester != address(0), "WitnetOracle: already posted"); { - __request.fromCallbackGas = WitnetV2.packRequesterCallbackGasLimit(msg.sender, _callbackGasLimit); - __request.RAD = _radHash; - __request.SLA = _packedSLA; - __request.evmReward = _getMsgValue(); + __request.requester = msg.sender; + __request.gasCallback = _callbackGasLimit; + __request.evmReward = uint72(_getMsgValue()); + __request.witnetRAD = _radHash; + __request.witnetSLA = _sla; } } function __reportResult( uint256 _witnetQueryId, - uint64 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - bytes calldata _witnetResultCborBytes + uint32 _witnetQueryResultTimestamp, + bytes32 _witnetQueryResultTallyHash, + bytes calldata _witnetQueryResultCborBytes ) virtual internal returns (uint256 _evmReward) { // read requester address and whether a callback was requested: WitnetV2.Request storage __request = __seekQueryRequest(_witnetQueryId); - (address _evmRequester, uint96 _evmCallbackGasLimit) = __request.unpackRequesterAndCallbackGasLimit(); // read query EVM reward: _evmReward = __request.evmReward; @@ -825,18 +792,18 @@ abstract contract WitnetRequestBoardTrustableBase __request.evmReward = 0; // determine whether a callback is required - if (_evmCallbackGasLimit > 0) { + if (__request.gasCallback > 0) { ( uint256 _evmCallbackActualGas, bool _evmCallbackSuccess, string memory _evmCallbackRevertMessage ) = __reportResultCallback( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, - _witnetResultCborBytes, - _evmRequester, - _evmCallbackGasLimit + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, + _witnetQueryResultCborBytes, + __request.requester, + __request.gasCallback ); if (_evmCallbackSuccess) { // => the callback run successfully @@ -849,20 +816,20 @@ abstract contract WitnetRequestBoardTrustableBase // as it was already passed over to the requester: __writeQueryResponse( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, hex"" ); } else { // => the callback reverted emit WitnetResponseDeliveryFailed( _witnetQueryId, - _witnetResultCborBytes, + _witnetQueryResultCborBytes, _getGasPrice(), _evmCallbackActualGas, bytes(_evmCallbackRevertMessage).length > 0 ? _evmCallbackRevertMessage - : "WitnetRequestBoardTrustableBase: callback exceeded gas limit" + : "WitnetOracle: callback exceeded gas limit" ); // upon failing delivery, only the witnet result tally hash is saved into storage, // as to distinguish Reported vs Undelivered status. The query result is not saved @@ -870,7 +837,7 @@ abstract contract WitnetRequestBoardTrustableBase __writeQueryResponse( _witnetQueryId, 0, - _witnetResultTallyHash, + _witnetQueryResultTallyHash, hex"" ); } @@ -883,27 +850,27 @@ abstract contract WitnetRequestBoardTrustableBase // write query result and audit trail data into storage __writeQueryResponse( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, - _witnetResultCborBytes + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, + _witnetQueryResultCborBytes ); } } function __reportResultAndReward( uint256 _witnetQueryId, - uint64 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - bytes calldata _witnetResultCborBytes + uint32 _witnetQueryResultTimestamp, + bytes32 _witnetQueryResultTallyHash, + bytes calldata _witnetQueryResultCborBytes ) virtual internal returns (uint256 _evmReward) { _evmReward = __reportResult( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, - _witnetResultCborBytes + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, + _witnetQueryResultCborBytes ); // transfer reward to reporter __safeTransferTo( @@ -914,9 +881,9 @@ abstract contract WitnetRequestBoardTrustableBase function __reportResultCallback( uint256 _witnetQueryId, - uint64 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - bytes calldata _witnetResultCborBytes, + uint64 _witnetQueryResultTimestamp, + bytes32 _witnetQueryResultTallyHash, + bytes calldata _witnetQueryResultCborBytes, address _evmRequester, uint256 _evmCallbackGasLimit ) @@ -928,14 +895,14 @@ abstract contract WitnetRequestBoardTrustableBase ) { _evmCallbackActualGas = gasleft(); - if (_witnetResultCborBytes[0] == bytes1(0xd8)) { - WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_witnetResultCborBytes).readArray(); + if (_witnetQueryResultCborBytes[0] == bytes1(0xd8)) { + WitnetCBOR.CBOR[] memory _errors = WitnetCBOR.fromBytes(_witnetQueryResultCborBytes).readArray(); if (_errors.length < 2) { // try to report result with unknown error: try IWitnetConsumer(_evmRequester).reportWitnetQueryError{gas: _evmCallbackGasLimit}( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, block.number, Witnet.ResultErrorCodes.Unknown, WitnetCBOR.CBOR({ @@ -955,8 +922,8 @@ abstract contract WitnetRequestBoardTrustableBase // try to report result with parsable error: try IWitnetConsumer(_evmRequester).reportWitnetQueryError{gas: _evmCallbackGasLimit}( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, block.number, Witnet.ResultErrorCodes(_errors[0].readUint()), _errors[0] @@ -970,10 +937,10 @@ abstract contract WitnetRequestBoardTrustableBase // try to report result result with no error : try IWitnetConsumer(_evmRequester).reportWitnetQueryResult{gas: _evmCallbackGasLimit}( _witnetQueryId, - _witnetResultTimestamp, - _witnetResultTallyHash, + _witnetQueryResultTimestamp, + _witnetQueryResultTallyHash, block.number, - WitnetCBOR.fromBytes(_witnetResultCborBytes) + WitnetCBOR.fromBytes(_witnetQueryResultCborBytes) ) { _evmCallbackSuccess = true; } catch Error(string memory err) { @@ -995,17 +962,18 @@ abstract contract WitnetRequestBoardTrustableBase function __writeQueryResponse( uint256 _witnetQueryId, - uint64 _witnetResultTimestamp, - bytes32 _witnetResultTallyHash, - bytes memory _witnetResultCborBytes + uint32 _witnetQueryResultTimestamp, + bytes32 _witnetQueryResultTallyHash, + bytes memory _witnetQueryResultCborBytes ) virtual internal { __seekQuery(_witnetQueryId).response = WitnetV2.Response({ - fromFinality: WitnetV2.packReporterEvmFinalityBlock(msg.sender, block.number), - timestamp: _witnetResultTimestamp, - tallyHash: _witnetResultTallyHash, - cborBytes: _witnetResultCborBytes + reporter: msg.sender, + finality: uint64(block.number), + resultTimestamp: _witnetQueryResultTimestamp, + resultTallyHash: _witnetQueryResultTallyHash, + resultCborBytes: _witnetQueryResultCborBytes }); } diff --git a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol index ce9024c93..27c709d92 100644 --- a/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol +++ b/contracts/core/defaults/WitnetRequestBoardTrustableDefault.sol @@ -73,7 +73,7 @@ contract WitnetRequestBoardTrustableDefault /// @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, uint96 _callbackGasLimit) + function estimateBaseFeeWithCallback(uint256 _gasPrice, uint24 _callbackGasLimit) public view virtual override returns (uint256) diff --git a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol index 4b1be23b4..6d109404b 100644 --- a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol @@ -44,7 +44,7 @@ contract WitnetRequestBytecodesDefault {} receive() external payable { - revert("WitnetRequestBytecodesDefault: no transfers"); + revert("WitnetRequestBytecodes: no transfers"); } @@ -112,14 +112,14 @@ contract WitnetRequestBytecodesDefault } else { // only owner can initialize: if (msg.sender != _owner) { - revert("WitnetRequestBytecodesDefault: not the owner"); + revert("WitnetRequestBytecodes: not the owner"); } } if (__bytecodes().base != address(0)) { // current implementation cannot be initialized more than once: if(__bytecodes().base == base()) { - revert("WitnetRequestBytecodesDefault: already initialized"); + revert("WitnetRequestBytecodes: already initialized"); } } __bytecodes().base = base(); @@ -418,12 +418,12 @@ contract WitnetRequestBytecodesDefault // Check that at least one source is provided; if (_retrievalsIds.length == 0) { - revert("WitnetRequestBytecodesDefault: no retrievals"); + revert("WitnetRequestBytecodes: no retrievals"); } // Check that number of args arrays matches the number of sources: if ( _retrievalsIds.length != _args.length) { - revert("WitnetRequestBytecodesDefault: args mismatch"); + revert("WitnetRequestBytecodes: args mismatch"); } // Check sources and tally reducers: @@ -439,11 +439,11 @@ contract WitnetRequestBytecodesDefault if (_ix == 0) { _resultDataType = _retrievals[0].resultDataType; } else if (_retrievals[_ix].resultDataType != _resultDataType) { - revert("WitnetRequestBytecodesDefault: mismatching retrievals"); + revert("WitnetRequestBytecodes: mismatching retrievals"); } // check enough args are provided for each source if (_args[_ix].length < uint(_retrievals[_ix].argsCount)) { - revert("WitnetRequestBytecodesDefault: missing args"); + revert("WitnetRequestBytecodes: missing args"); } } @@ -458,7 +458,7 @@ contract WitnetRequestBytecodesDefault _resultMaxSize ); if (_bytecode.length > 65535) { - revert("WitnetRequestBytecodesDefault: too heavy request"); + revert("WitnetRequestBytecodes: too heavy request"); } // Calculate radhash and add request metadata and rad bytecode to storage: diff --git a/contracts/core/defaults/WitnetRequestFactoryDefault.sol b/contracts/core/defaults/WitnetRequestFactoryDefault.sol index d81a3cc9a..e6f48d033 100644 --- a/contracts/core/defaults/WitnetRequestFactoryDefault.sol +++ b/contracts/core/defaults/WitnetRequestFactoryDefault.sol @@ -26,7 +26,7 @@ contract WitnetRequestFactoryDefault modifier onlyDelegateCalls override(Clonable, Upgradeable) { require( address(this) != _BASE, - "WitnetRequestFactoryDefault: not a delegate call" + "WitnetRequestFactory: not a delegate call" ); _; } @@ -35,7 +35,7 @@ contract WitnetRequestFactoryDefault require( address(this) == __proxy() || address(this) == base(), - "WitnetRequestFactoryDefault: not the factory" + "WitnetRequestFactory: not the factory" ); _; } @@ -43,7 +43,7 @@ contract WitnetRequestFactoryDefault modifier onlyOnTemplates { require( __witnetRequestTemplate().tally != bytes32(0), - "WitnetRequestFactoryDefault: not a WitnetRequestTemplate" + "WitnetRequestFactory: not a WitnetRequestTemplate" ); _; } @@ -290,7 +290,7 @@ contract WitnetRequestFactoryDefault } else { // only owner can initialize the proxy if (msg.sender != _owner) { - revert("WitnetRequestFactoryDefault: not the owner"); + revert("WitnetRequestFactory: not the owner"); } } @@ -302,13 +302,13 @@ contract WitnetRequestFactoryDefault if (__proxiable().implementation != address(0)) { // same implementation cannot be initialized more than once: if(__proxiable().implementation == base()) { - revert("WitnetRequestFactoryDefault: already initialized"); + revert("WitnetRequestFactory: already initialized"); } } __proxiable().implementation = base(); - require(address(registry).code.length > 0, "WitnetRequestFactoryDefault: inexistent requests registry"); - require(registry.specs() == type(IWitnetRequestBytecodes).interfaceId, "WitnetRequestFactoryDefault: uncompliant requests registry"); + require(address(registry).code.length > 0, "WitnetRequestFactory: inexistent requests registry"); + require(registry.specs() == type(IWitnetRequestBytecodes).interfaceId, "WitnetRequestFactory: uncompliant requests registry"); emit Upgraded(msg.sender, base(), codehash(), version()); } diff --git a/contracts/data/WitnetPriceFeedsData.sol b/contracts/data/WitnetPriceFeedsData.sol index e1fc4b4ed..b7b419512 100644 --- a/contracts/data/WitnetPriceFeedsData.sol +++ b/contracts/data/WitnetPriceFeedsData.sol @@ -20,7 +20,7 @@ abstract contract WitnetPriceFeedsData { string caption; uint8 decimals; uint256 index; - uint256 latestValidQueryId; + uint256 lastValidQueryId; uint256 latestUpdateQueryId; bytes32 radHash; address solver; // logic contract address for reducing values on routed feeds. diff --git a/contracts/data/WitnetRequestBoardData.sol b/contracts/data/WitnetRequestBoardData.sol index e6850ee9c..26591d217 100644 --- a/contracts/data/WitnetRequestBoardData.sol +++ b/contracts/data/WitnetRequestBoardData.sol @@ -36,7 +36,7 @@ abstract contract WitnetRequestBoardData { /// Asserts the caller actually posted the referred query. modifier onlyRequester(uint256 _queryId) { require( - msg.sender == __seekQueryRequest(_queryId).unpackRequester(), + msg.sender == __seekQueryRequest(_queryId).requester, "WitnetRequestBoardBase: not the requester" ); _; } @@ -82,9 +82,9 @@ abstract contract WitnetRequestBoardData { returns (WitnetV2.QueryStatus) { WitnetV2.Query storage __query = __storage().queries[_queryId]; - if (__query.response.tallyHash != bytes32(0)) { - if (__query.response.timestamp != 0) { - if (block.number >= WitnetV2.unpackEvmFinalityBlock(__query.response.fromFinality)) { + if (__query.response.resultTallyHash != bytes32(0)) { + if (__query.response.resultTimestamp != 0) { + if (block.number >= __query.response.finality) { return WitnetV2.QueryStatus.Finalized; } else { return WitnetV2.QueryStatus.Reported; @@ -92,7 +92,7 @@ abstract contract WitnetRequestBoardData { } else { return WitnetV2.QueryStatus.Undeliverable; } - } else if (__query.request.fromCallbackGas != bytes32(0)) { + } else if (__query.request.requester != address(0)) { return WitnetV2.QueryStatus.Posted; } else { return WitnetV2.QueryStatus.Unknown; @@ -104,13 +104,13 @@ abstract contract WitnetRequestBoardData { returns (string memory) { if (_status == WitnetV2.QueryStatus.Posted) { - return "WitnetOracle: not in Posted status"; + return "WitnetOracle: query not in Posted status"; } else if (_status == WitnetV2.QueryStatus.Reported) { - return "WitnetOracle: not in Reported status"; + return "WitnetOracle: query not in Reported status"; } else if (_status == WitnetV2.QueryStatus.Finalized) { - return "WitnetOracle: not in Finalized status"; + return "WitnetOracle: query not in Finalized status"; } else if (_status == WitnetV2.QueryStatus.Undeliverable) { - return "WitnetOracle: not in Undeliverable status"; + return "WitnetOracle: query not in Undeliverable status"; } else { return "WitnetOracle: bad mood"; } diff --git a/contracts/interfaces/IWitnetFeeds.sol b/contracts/interfaces/IWitnetFeeds.sol index e5e42ba27..2e4487642 100644 --- a/contracts/interfaces/IWitnetFeeds.sol +++ b/contracts/interfaces/IWitnetFeeds.sol @@ -7,12 +7,25 @@ import "../WitnetRequestBytecodes.sol"; interface IWitnetFeeds { - event DeletedFeed(address indexed from, bytes4 indexed feedId, string caption); - event SettledFeed(address indexed from, bytes4 indexed feedId, string caption, bytes32 radHash); - event SettledFeedSolver(address indexed from, bytes4 indexed feedId, string caption, address solver); - event SettledRadonSLA(address indexed from, bytes32 slaHash); - event UpdatingFeed(address indexed from, bytes4 indexed feedId, bytes32 slaHash, uint256 value); - event UpdatingFeedReward(address indexed from, bytes4 indexed feedId, uint256 value); + event DeletedFeed (address indexed from, bytes4 indexed feedId, string caption); + event SettledFeed (address indexed from, bytes4 indexed feedId, string caption, bytes32 radHash); + event SettledFeedSolver (address indexed from, bytes4 indexed feedId, string caption, address solver); + event SettledRadonSLA (address indexed from, WitnetV2.RadonSLA sla); + + event UpdateRequest( + address indexed origin, + bytes4 indexed feedId, + uint256 witnetQueryId, + uint256 witnetQueryEvmReward, + WitnetV2.RadonSLA witnetQuerySLA + ); + + event UpdateRequestReward( + address indexed origin, + bytes4 indexed feedId, + uint256 witnetQueryId, + uint256 witnetQueryReward + ); function dataType() external view returns (Witnet.RadonDataTypes); function prefix() external view returns (string memory); @@ -22,18 +35,17 @@ interface IWitnetFeeds { function defaultRadonSLA() external view returns (Witnet.RadonSLA memory); function estimateUpdateBaseFee(uint256 evmGasPrice) external view returns (uint); - function latestResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); - function latestResult(bytes4 feedId) external view returns (Witnet.Result memory); + function lastValidResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); function latestUpdateQueryId(bytes4 feedId) external view returns (uint256); - function latestUpdateRequest(bytes4 feedId) external view returns (bytes32, Witnet.RadonSLA memory); + function latestUpdateRequest(bytes4 feedId) external view returns (WitnetV2.Request memory); function latestUpdateResponse(bytes4 feedId) external view returns (WitnetV2.Response memory); + function latestUpdateResponseStatus(bytes4 feedId) external view returns (WitnetV2.ResponseStatus); function latestUpdateResultError(bytes4 feedId) external view returns (Witnet.ResultError memory); - function latestUpdateResultStatus(bytes4 feedId) external view returns (WitnetV2.ResultStatus); - - function lookupBytecode(bytes4 feedId) external view returns (bytes memory); - function lookupRadHash(bytes4 feedId) external view returns (bytes32); - function lookupRetrievals(bytes4 feedId) external view returns (Witnet.RadonRetrieval[] memory); + + function lookupWitnetBytecode(bytes4 feedId) external view returns (bytes memory); + function lookupWitnetRadHash(bytes4 feedId) external view returns (bytes32); + function lookupWitnetRetrievals(bytes4 feedId) external view returns (Witnet.RadonRetrieval[] memory); function requestUpdate(bytes4 feedId) external payable returns (uint256 usedFunds); function requestUpdate(bytes4 feedId, WitnetV2.RadonSLA calldata updateSLA) external payable returns (uint256 usedFunds); diff --git a/contracts/interfaces/IWitnetOracle.sol b/contracts/interfaces/IWitnetOracle.sol index 2478bd3d6..f749e7ae3 100644 --- a/contracts/interfaces/IWitnetOracle.sol +++ b/contracts/interfaces/IWitnetOracle.sol @@ -20,7 +20,7 @@ interface IWitnetOracle { /// @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, uint96 callbackGasLimit) external view returns (uint256); + function estimateBaseFeeWithCallback(uint256 gasPrice, uint24 callbackGasLimit) external view returns (uint256); /// @notice Retrieves a copy of all Witnet-provable data related to a previously posted request, /// removing the whole query from the WRB storage. @@ -32,54 +32,39 @@ interface IWitnetOracle { /// @notice Gets the whole Query data contents, if any, no matter its current status. function getQuery(uint256 queryId) external view returns (WitnetV2.Query memory); - /// @notice Retrieves the serialized bytecode of a previously posted Witnet Data Request. - /// @dev Fails if the query does not exist. + /// @notice Retrieves the reward currently set for the given query. + /// @dev Fails if the `queryId` is not valid or, if it has already been reported, delivered, or deleted. /// @param queryId The unique query identifier. - function getQueryBytecode(uint256 queryId) external view returns (bytes memory); + function getQueryEvmReward(uint256 queryId) external view returns (uint256); /// @notice Retrieves the RAD hash and SLA parameters of the given query. /// @param queryId The unique query identifier. - function getQueryRequest(uint256 queryId) external view returns (bytes32, Witnet.RadonSLA memory); + function getQueryRequest(uint256 queryId) external view returns (WitnetV2.Request memory); /// @notice Retrieves the whole `Witnet.Response` record referred to a previously posted Witnet Data Request. /// @param queryId The unique query identifier. function getQueryResponse(uint256 queryId) external view returns (WitnetV2.Response memory); - /// @notice Retrieves the Witnet-provable CBOR-bytes result of a previously posted request. - /// @param queryId The unique query identifier. - function getQueryResult(uint256 queryId) external view returns (Witnet.Result memory); - - /// @notice Returns reference to the commit/reveal act that took place on the Witnet blockchain. - /// @param queryId The unique query identifier. - /// @return witnetTimestamp Timestamp at which the query was solved by the Witnet blockchain. - /// @return witnetTallyHash Hash of the commit/reveal act that solved the query on the Witnet blockchain. - /// @return witnetEvmFinalityBlock EVM block at which the provided data can be considered to be final. - function getQueryResultAuditTrail(uint256 queryId) external view returns ( - uint256 witnetTimestamp, - bytes32 witnetTallyHash, - uint256 witnetEvmFinalityBlock - ); - - /// @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) external view returns (Witnet.ResultError memory); - /// @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 response was finalized, and contains a result with no erros. /// @notice - 3 => Error: the query response was finalized, and contains a result with errors. /// @param queryId The unique query identifier. - function getQueryResultStatus(uint256 queryId) external view returns (WitnetV2.ResultStatus); + function getQueryResponseStatus(uint256 queryId) external view returns (WitnetV2.ResponseStatus); - /// @notice Retrieves the reward currently set for the referred query. - /// @dev Fails if the `queryId` is not valid or, if it has already been reported, delivered, or deleted. + /// @notice Gets error code identifying some possible failure on the resolution of the given query. /// @param queryId The unique query identifier. - function getQueryReward(uint256 queryId) external view returns (uint256); + function getQueryResultError(uint256 queryId) external view returns (Witnet.ResultError memory); /// @notice Gets current status of given query. function getQueryStatus(uint256 queryId) external view returns (WitnetV2.QueryStatus); + /// @notice Retrieves the Witnet Data Request bytecode of a previously posted query. + /// @dev Fails if the query does not exist. + /// @param queryId The unique query identifier. + function getQueryWitnetBytecode(uint256 queryId) external view returns (bytes memory); + /// @notice Returns next query id to be generated by the Witnet Request Board. function getNextQueryId() external view returns (uint256); @@ -115,7 +100,7 @@ interface IWitnetOracle { function postRequestWithCallback( bytes32 queryRAD, WitnetV2.RadonSLA calldata querySLA, - uint96 queryCallbackGasLimit + uint24 queryCallbackGasLimit ) external payable returns (uint256 queryId); /// @notice Requests the execution of the given Witnet Data Request, in expectation that it will be relayed and solved by @@ -135,11 +120,11 @@ interface IWitnetOracle { function postRequestWithCallback( bytes calldata queryUnverifiedBytecode, WitnetV2.RadonSLA calldata querySLA, - uint96 queryCallbackGasLimit + uint24 queryCallbackGasLimit ) external payable returns (uint256 queryId); /// @notice Increments the reward of a previously posted request by adding the transaction value to it. /// @param queryId The unique query identifier. - function upgradeQueryReward(uint256 queryId) external payable; + function upgradeQueryEvmReward(uint256 queryId) external payable; } diff --git a/contracts/interfaces/IWitnetOracleEvents.sol b/contracts/interfaces/IWitnetOracleEvents.sol index 7f3148df6..44ca0475a 100644 --- a/contracts/interfaces/IWitnetOracleEvents.sol +++ b/contracts/interfaces/IWitnetOracleEvents.sol @@ -6,7 +6,7 @@ import "../libs/WitnetV2.sol"; interface IWitnetOracleEvents { /// Emitted every time a new query containing some verified data request is posted to the WRB. - event WitnetQuery(uint256 indexed id, uint64 witReward, uint256 evmReward); + event WitnetQuery(uint256 indexed id, uint256 evmReward, uint64 witTotalFee); /// Emitted when a query with no callback gets reported into the WRB. event WitnetQueryReported(uint256 indexed id, uint256 evmGasPrice); diff --git a/contracts/interfaces/IWitnetPriceSolver.sol b/contracts/interfaces/IWitnetPriceSolver.sol index 294f3cd8d..b495cd735 100644 --- a/contracts/interfaces/IWitnetPriceSolver.sol +++ b/contracts/interfaces/IWitnetPriceSolver.sol @@ -9,7 +9,7 @@ interface IWitnetPriceSolver { uint value; uint timestamp; bytes32 tallyHash; - WitnetV2.ResultStatus status; + WitnetV2.ResponseStatus status; } function class() external pure returns (string memory); function delegator() external view returns (address); diff --git a/contracts/interfaces/IWitnetRequestBoardReporter.sol b/contracts/interfaces/IWitnetRequestBoardReporter.sol index 3be90abd4..ed679d34e 100644 --- a/contracts/interfaces/IWitnetRequestBoardReporter.sol +++ b/contracts/interfaces/IWitnetRequestBoardReporter.sol @@ -19,12 +19,12 @@ interface IWitnetRequestBoardReporter { /// @dev - provided `_tallyHash` is zero; /// @dev - length of provided `_result` is zero. /// @param witnetQueryId The unique identifier of the data request. - /// @param witnetResultTallyHash The hash of the corresponding data request transaction in Witnet. - /// @param witnetResultCborBytes The result itself as bytes. + /// @param witnetQueryResultTallyHash The hash of the corresponding data request transaction in Witnet. + /// @param witnetQueryResultCborBytes The result itself as bytes. function reportResult( uint256 witnetQueryId, - bytes32 witnetResultTallyHash, - bytes calldata witnetResultCborBytes + bytes32 witnetQueryResultTallyHash, + bytes calldata witnetQueryResultCborBytes ) external returns (uint256); /// @notice Reports the Witnet-provided result to a previously posted request. @@ -34,14 +34,14 @@ interface IWitnetRequestBoardReporter { /// @dev - provided `_tallyHash` is zero; /// @dev - length of provided `_result` is zero. /// @param witnetQueryId The unique query identifier - /// @param witnetResultTimestamp The timestamp of the solving tally transaction in Witnet. - /// @param witnetResultTallyHash The hash of the corresponding data request transaction in Witnet. - /// @param witnetResultCborBytes The result itself as bytes. + /// @param witnetQueryResultTimestamp The timestamp of the solving tally transaction in Witnet. + /// @param witnetQueryResultTallyHash The hash of the corresponding data request transaction in Witnet. + /// @param witnetQueryResultCborBytes The result itself as bytes. function reportResult( uint256 witnetQueryId, - uint64 witnetResultTimestamp, - bytes32 witnetResultTallyHash, - bytes calldata witnetResultCborBytes + uint32 witnetQueryResultTimestamp, + bytes32 witnetQueryResultTallyHash, + bytes calldata witnetQueryResultCborBytes ) external returns (uint256); /// @notice Reports Witnet-provided results to multiple requests within a single EVM tx. @@ -56,9 +56,9 @@ interface IWitnetRequestBoardReporter { struct BatchResult { uint256 queryId; - uint64 timestamp; - bytes32 tallyHash; - bytes cborBytes; + uint32 queryResultTimestamp; + bytes32 queryResultTallyHash; + bytes queryResultCborBytes; } event BatchReportError(uint256 queryId, string reason); From cbf46f65a3dd52595202acd6f7ae94b764017046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 18:46:22 +0100 Subject: [PATCH 142/149] fix: avoid queries w/ SLA collateral <20wit --- contracts/libs/WitnetV2.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contracts/libs/WitnetV2.sol b/contracts/libs/WitnetV2.sol index 7ae277a11..0f18811ae 100644 --- a/contracts/libs/WitnetV2.sol +++ b/contracts/libs/WitnetV2.sol @@ -73,6 +73,8 @@ library WitnetV2 { return ( sla.witnessingFee > 0 && sla.committeeSize > 0 && sla.committeeSize <= 127 + // v1.7.x requires witnessing collateral to be greater or equal to 20 WIT: + && sla.witnessingFee * 100 >= 20 * 10 ** 9 ); } From ace3cc8197732041dc8ecab137fccf5f86ed99bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 18:47:24 +0100 Subject: [PATCH 143/149] chore: attend pr review comments --- README.md | 2 +- contracts/mocks/MyDapp.sol | 89 ++++++++++++++++++++++++++++++++ migrations/scripts/1_deployer.js | 1 + migrations/scripts/2_libs.js | 1 + migrations/scripts/3_core.js | 1 + migrations/scripts/4_proxies.js | 1 + package.json | 2 +- 7 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 contracts/mocks/MyDapp.sol diff --git a/README.md b/README.md index 075d71bd7..21ffe194e 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Should any artifact require customized contract implementations: - Add a new network configuration to `settings/networks`. The network name should follow the pattern `:`. -- Make sure you run an ETH/RPC provider running at the specified `host` and `port`, capable of intercepting `eth_sendTransaction` calls (e.g. [web3-ethrpc-gateway](https://github.io/witnet/web3-jsonrpc-gateway)). +- Make sure you run an ETH/RPC provider for the specified `host` and `port`, capable of intercepting `eth_sendTransaction` calls (e.g. [web3-ethrpc-gateway](https://github.io/witnet/web3-jsonrpc-gateway)). ### Run the script diff --git a/contracts/mocks/MyDapp.sol b/contracts/mocks/MyDapp.sol new file mode 100644 index 000000000..ff779d195 --- /dev/null +++ b/contracts/mocks/MyDapp.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: MIT + +pragma solidity >=0.7.0 <0.9.0; +pragma experimental ABIEncoderV2; + +import "../apps/UsingWitnetRandomness.sol"; + +contract MyDapp + is + UsingWitnetRandomness +{ + using WitnetCBOR for WitnetCBOR.CBOR; + + event Randomizing(uint256 queryId); + event Randomized(uint256 queryId, bytes32 randomness); + event Error(uint256 queryId, Witnet.ResultErrorCodes errorCode); + + bytes32 public randomness; + bytes32 public witnetRandomnessRadHash; + uint64 public immutable callbackGasLimit; + bytes public witnetRandomnessBytecode; + struct Rubbish { + bytes32 slot1; + bytes32 slot2; + bytes32 slot3; + } + Rubbish public rubbish; + + uint256 private immutable __randomizeValue; + + constructor(WitnetOracle _wrb, uint16 _baseFeeOverheadPercentage, uint24 _callbackGasLimit) + UsingWitnetRandomness( + _wrb, + _baseFeeOverheadPercentage, + _callbackGasLimit + ) + { + callbackGasLimit = _callbackGasLimit; + rubbish.slot1 = blockhash(block.number - 1); + rubbish.slot2 = blockhash(block.number - 2); + rubbish.slot3 = blockhash(block.number - 3); + witnetRandomnessRadHash = __witnetRandomnessRadHash; + witnetRandomnessBytecode = witnet().registry().bytecodeOf(__witnetRandomnessRadHash); + __randomizeValue = _witnetEstimateEvmReward(); + } + + function getRandomizeValue() external view returns (uint256) { + return __randomizeValue; + } + + function randomize() external payable returns (uint256 _randomizeId) { + _randomizeId = __witnetRandomize(__randomizeValue); + if (__randomizeValue < msg.value) { + payable(msg.sender).transfer(msg.value - __randomizeValue); + } + } + + /// @notice Method to be called from the WitnetOracle contract as soon as the given Witnet `queryId` + /// @notice gets reported, if reported with no errors. + /// @dev It should revert if called from any other address different to the WitnetOracle being used + /// @dev by the WitnetConsumer contract. Within the implementation of this method, the WitnetConsumer + /// @dev can call to the WRB as to retrieve the Witnet tracking information (i.e. the `witnetDrTxHash` + /// @dev and `witnetDrCommitTxTimestamp`), or the finality status, of the result being reported. + function reportWitnetQueryResult( + uint256 _witnetQueryId, uint64, bytes32, uint256, + WitnetCBOR.CBOR calldata witnetResultCborValue + ) + override external + onlyFromWitnet + { + // randomness = _witnetReadRandomizeFromResultValue(witnetResultCborValue); + // delete rubbish; + // witnet.burnQuery(_witnetQueryId); + // emit Result(queryId, _witnetReadRandomizeFromResultValue(cborValue)); + } + + function reportWitnetQueryError( + uint256 witnetQueryId, + uint64, bytes32, uint256, + Witnet.ResultErrorCodes errorCode, WitnetCBOR.CBOR calldata + ) + virtual external + onlyFromWitnet + { + emit Error(witnetQueryId, errorCode); + } + + +} diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index 5e419e172..1bf86284c 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -3,6 +3,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (deployer, network, [,,, master]) { + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {} diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 859fe8aa9..47e0020a7 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,6 +4,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { + const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {} diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 5a4288433..41d656a69 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -10,6 +10,7 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { + const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 411205ec5..6162a7acd 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -13,6 +13,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) diff --git a/package.json b/package.json index 8e90bc4cb..afc436f8c 100644 --- a/package.json +++ b/package.json @@ -54,7 +54,7 @@ "test": "npm run clean && npx truffle test" }, "dependencies": { - "dotenv": "^16.4.1", + "dotenv": "^16.4.4", "lodash.merge": "^4.6.2", "proper-lockfile": "^4.1.2" }, From 320486fc5eb645a3e8c08688f5f31503696d580d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Fri, 16 Feb 2024 18:48:39 +0100 Subject: [PATCH 144/149] chore: rearrange singleton addresses --- settings/specs.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/settings/specs.js b/settings/specs.js index cc2a04951..b16c847a1 100644 --- a/settings/specs.js +++ b/settings/specs.js @@ -11,19 +11,19 @@ module.exports = { ], }, libs: ["WitnetErrorsLib"], - vanity: 3648098779, // 0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000 + vanity: 899032812, // 0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000 }, WitnetPriceFeeds: { from: "0xF121b71715E71DDeD592F1125a06D4ED06F0694D", libs: ["WitnetPriceFeedsLib"], - vanity: 6099024547, // 0x11111c2cC3f1af92bA0f1f554f2651cEfb858111 + vanity: 1865150170, // 0x1111AbA2164AcdC6D291b08DfB374280035E1111 }, WitnetRequestBytecodes: { libs: ["WitnetEncodingLib"], - vanity: 2561527884, // 0x0000B677d4a6d20C3B087c52A36E4Bed558De000 + vanity: 6765579443, // 0x000B61Fe075F545fd37767f40391658275900000 }, WitnetRequestFactory: { - vanity: 7945530998, // 0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000 + vanity: 2294036679, // 0x000F4cCF726c5445626DBD6f2258482f61377000 }, }, avalanche: { From 82d37142624941ab19f49d8b17805a78f14e1153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 19 Feb 2024 09:25:15 +0100 Subject: [PATCH 145/149] chore: fully deprecate SLA refs in bytecodes registry --- .../WitnetRequestBytecodesDefault.sol | 25 ------------------- contracts/data/WitnetRequestBytecodesData.sol | 3 --- .../interfaces/IWitnetRequestBytecodes.sol | 12 ++------- 3 files changed, 2 insertions(+), 38 deletions(-) diff --git a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol index 6d109404b..091c25a41 100644 --- a/contracts/core/defaults/WitnetRequestBytecodesDefault.sol +++ b/contracts/core/defaults/WitnetRequestBytecodesDefault.sol @@ -295,31 +295,6 @@ contract WitnetRequestBytecodesDefault ]; } - function lookupRadonRAD(bytes32 _radHash) - external view - override - returns (Witnet.RadonRAD memory rad) - { - DataRequest storage __request = __requests(_radHash); - rad.retrieve = new Witnet.RadonRetrieval[](__request.retrievals.length); - for (uint _ix = 0; _ix < rad.retrieve.length; _ix ++) { - rad.retrieve[_ix] = __database().retrievals[__request.retrievals[_ix]]; - } - rad.aggregate = __database().reducers[__request.aggregator]; - rad.tally = __database().reducers[__request.tally]; - } - - // function lookupRadonSLA(bytes32 _slaHash) - // external view - // override - // returns (Witnet.RadonSLA memory sla) - // { - // sla = __database().slas[_slaHash]; - // if (sla.numWitnesses == 0) { - // revert UnknownRadonSLA(_slaHash); - // } - // } - function verifyRadonRetrieval( Witnet.RadonDataRequestMethods _requestMethod, string calldata _requestURL, diff --git a/contracts/data/WitnetRequestBytecodesData.sol b/contracts/data/WitnetRequestBytecodesData.sol index a2703d933..0fa8d36f4 100644 --- a/contracts/data/WitnetRequestBytecodesData.sol +++ b/contracts/data/WitnetRequestBytecodesData.sol @@ -44,11 +44,8 @@ abstract contract WitnetRequestBytecodesData { mapping (bytes32 => Witnet.RadonReducer) reducers; mapping (bytes32 => Witnet.RadonRetrieval) retrievals; - mapping (bytes32 => Witnet.RadonSLA) _slas; - mapping (bytes32 => DataRequest) requests; mapping (bytes32 => bytes32) rads; - mapping (bytes32 => bytes) radsBytecode; mapping (bytes32 => bytes) _slasBytecode; } diff --git a/contracts/interfaces/IWitnetRequestBytecodes.sol b/contracts/interfaces/IWitnetRequestBytecodes.sol index e4be2f24a..f93b9f7b6 100644 --- a/contracts/interfaces/IWitnetRequestBytecodes.sol +++ b/contracts/interfaces/IWitnetRequestBytecodes.sol @@ -33,9 +33,7 @@ interface IWitnetRequestBytecodes { function lookupRadonRequestSources(bytes32 radHash) external view returns (bytes32[] memory); function lookupRadonRequestSourcesCount(bytes32 radHash) external view returns (uint); function lookupRadonRequestTally(bytes32 radHash) external view returns (Witnet.RadonReducer memory); - - function lookupRadonRAD(bytes32 radHash) external view returns (Witnet.RadonRAD memory); - + function verifyRadonRetrieval( Witnet.RadonDataRequestMethods requestMethod, string calldata requestURL, @@ -56,10 +54,4 @@ interface IWitnetRequestBytecodes { ) external returns (bytes32 radHash); function totalDataProviders() external view returns (uint); - - /// =============================================================================================================== - /// --- Deprecating methods --------------------------------------------------------------------------------------- - - // function lookupRadonSLA(bytes32 slaHash) external view returns (Witnet.RadonSLA memory); - -} \ No newline at end of file +} From 962c89dfd888d8152c87e03d7c48351f6f9a1b10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 19 Feb 2024 09:26:37 +0100 Subject: [PATCH 146/149] feat: contracts verification scripts --- migrations/addresses.json | 32 ++++++++++++-------------------- migrations/constructorArgs.json | 14 ++++---------- migrations/scripts/1_deployer.js | 9 +++++++++ migrations/scripts/3_core.js | 6 ++++++ package.json | 23 +++++++++++++---------- scripts/verify-core.js | 29 +++++++++++++++++++++++++++++ scripts/verify-impls.js | 32 ++++++++++++++++++++++++++++++++ scripts/verify-libs.js | 28 ++++++++++++++++++++++++++++ src/utils.js | 20 ++++++++++++++------ 9 files changed, 147 insertions(+), 46 deletions(-) create mode 100644 scripts/verify-core.js create mode 100644 scripts/verify-impls.js create mode 100644 scripts/verify-libs.js diff --git a/migrations/addresses.json b/migrations/addresses.json index 2f815dcb3..1a3e2bc2c 100644 --- a/migrations/addresses.json +++ b/migrations/addresses.json @@ -1,27 +1,19 @@ { "default": { "WitnetDeployer": "0x03232aBE800D1638B30432FeEF300581De323a4E", - "WitnetOracle": "0x00000eBcBDD5B6A1B4f102b165ED2C4d8B6B1000", - "WitnetRequestBytecodes": "0x0000B677d4a6d20C3B087c52A36E4Bed558De000", - "WitnetRequestFactory": "0x0000f7Eb1d08E68C361b8A0c4a36f442c58f1000", - "WitnetPriceFeeds": "0x11111c2cC3f1af92bA0f1f554f2651cEfb858111" + "WitnetOracle": "0x000071F0c823bD30D2Bf4CD1E829Eba5A6070000", + "WitnetPriceFeeds": "0x1111AbA2164AcdC6D291b08DfB374280035E1111", + "WitnetRequestBytecodes": "0x000B61Fe075F545fd37767f40391658275900000", + "WitnetRequestFactory": "0x000F4cCF726c5445626DBD6f2258482f61377000" }, "ethereum:sepolia": { - "WitnetErrorsLib": "0x6A7Db21C42053E5F15aF564fAdfC8E04e5eA5152", - "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", - "WitnetPriceFeedsLib": "0xd7E19CFd2488B6FE666b1CaE6a93110b78c744B6", - "WitnetRequestBytecodesDefault": "0x93DaB12D00117C3d805fF1042dF31bdA25a06A3B", - "WitnetRequestFactoryDefault": "0x3F654127135E7548a171506Ecc1dfCad70356435", - "WitnetRequestBoardTrustableDefault": "0xbdb6D793CC16d4518ED404D08C133251C877a531", - "WitnetPriceFeedsDefault": "0x075e226222eB03F83Bc36ed9A3cAaeb6d4873660" - }, - "ten:testnet": { - "WitnetErrorsLib": "0x6A7Db21C42053E5F15aF564fAdfC8E04e5eA5152", - "WitnetEncodingLib": "0x85350c3738864554993EE45b57e9B46d08b80Eec", - "WitnetPriceFeedsLib": "0xd7E19CFd2488B6FE666b1CaE6a93110b78c744B6", - "WitnetPriceFeedsDefault": "0x2693977d2fE01542034BE415184d2022250E9B7f", - "WitnetRequestBytecodesDefault": "0xbD8560E02ACd634A0895f340D2EAC3996297630f", - "WitnetRequestFactoryDefault": "0xCcF97F809a4d1b8aC2bF87a2fdfafDFEf576406c", - "WitnetRequestBoardTrustableObscuro": "0x55d78D1fEd850790aDAfFB9BD54A42B9382D7739" + "WitnetErrorsLib": "0x77aac367a921DD2a92dfd0351456839663af248F", + "WitnetEncodingLib": "0x967cfE0Edfc52e027849012E5dA706A9e5e62345", + "WitnetPriceFeedsLib": "0x96013096b1305c4009bfa2C2D3e34fEcB3dD4927", + "WitnetRequestBoardTrustableDefault": "0x8C6F4a0DAa1e3Ea1fAcE58031e76187E61620845", + "WitnetRequestBytecodesDefault": "0x8CE5EF0ab67cdC00D32e09f34f74daFb0d049314", + "WitnetRequestFactoryDefault": "0xdd118b23a2199Bf902e149dE407E205e67932bcb", + "WitnetPriceFeedsDefault": "0x9453CE5217a8688B2318455E82A9Fb4E89eD47b6", + "WitnetProxy": "0x21ac85A6c320E6fC89774A98732eAE733032651C" } } \ No newline at end of file diff --git a/migrations/constructorArgs.json b/migrations/constructorArgs.json index 829039d20..a685248aa 100644 --- a/migrations/constructorArgs.json +++ b/migrations/constructorArgs.json @@ -1,14 +1,8 @@ { - "ten:testnet": { - "WitnetPriceFeedsDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000000000000000000000000000000000000001322e302e312d3434373063396100000000000000000000000000000000000000", - "WitnetRequestBytecodesDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000", - "WitnetRequestFactoryDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000", - "WitnetRequestBoardTrustableObscuro": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3339366564343400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" - }, "ethereum:sepolia": { - "WitnetPriceFeedsDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", - "WitnetRequestBytecodesDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", - "WitnetRequestFactoryDefault": "00000000000000000000000000000ebcbdd5b6a1b4f102b165ed2c4d8b6b10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000", - "WitnetRequestBoardTrustableDefault": "0000000000000000000000000000f7eb1d08e68c361b8a0c4a36f442c58f10000000000000000000000000000000b677d4a6d20c3b087c52a36e4bed558de0000000000000000000000000000000000000000000000000000000000000000001322e302e312d3433663030303800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20" + "WitnetRequestBytecodesDefault": "0000000000000000000000000000000000000000000000000000000000000001322e302e312d3137303438343900000000000000000000000000000000000000", + "WitnetRequestFactoryDefault": "000000000000000000000000000071f0c823bd30d2bf4cd1e829eba5a6070000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e312d3332303438366600000000000000000000000000000000000000", + "WitnetRequestBoardTrustableDefault": "000000000000000000000000000f4ccf726c5445626dbd6f2258482f61377000000000000000000000000000000b61fe075f545fd37767f403916582759000000000000000000000000000000000000000000000000000000000000000000001322e302e312d3332303438366600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3aa000000000000000000000000000000000000000000000000000000000000fef90000000000000000000000000000000000000000000000000000000000010faa0000000000000000000000000000000000000000000000000000000000004e20", + "WitnetPriceFeedsDefault": "000000000000000000000000000071f0c823bd30d2bf4cd1e829eba5a60700000000000000000000000000000000000000000000000000000000000000000001322e302e312d3332303438366600000000000000000000000000000000000000" } } \ No newline at end of file diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index 1bf86284c..fef038839 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -1,6 +1,7 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") +const WitnetProxy = artifacts.require("WitnetProxy") module.exports = async function (deployer, network, [,,, master]) { @@ -25,4 +26,12 @@ module.exports = async function (deployer, network, [,,, master]) { console.info(" > Contract address:", factory.address) console.info() } + + if (utils.isNullAddress(addresses[network]?.WitnetProxy)) { + await deployer.deploy(WitnetProxy, { from: master }) + addresses[network].WitnetProxy = WitnetProxy.address + if (!utils.isDryRun(network)) { + await utils.overwriteJsonFile("./migrations/addresses.json", addresses) + } + } } diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index 41d656a69..ea5208091 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -143,6 +143,12 @@ async function deploy (specs) { 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() diff --git a/package.json b/package.json index afc436f8c..b457285de 100644 --- a/package.json +++ b/package.json @@ -29,29 +29,32 @@ ], "scripts": { "addresses": "node ./scripts/addresses.js 2>&1", - "clean": "npm run clean:build && npm run clean:flattened", + "clean": "pnpm run clean:build && pnpm run clean:flattened", "clean:build": "node ./scripts/clean.js build", "clean:flattened": "node ./scripts/clean.js flattened", "compile": "npx truffle compile --all", "console": "npx truffle console", "coverage": "solidity-coverage", "flatten": "node ./scripts/flatten.js 2>&1", - "flatten:all": "npm run clean && npm run flatten:core && npm run flatten:apps && npm run flatten:libs && npm run flatten:proxy", - "flatten:apps": "npm run flatten contracts/core/apps/", - "flatten:core": "npm run flatten contracts/core/core/", - "flatten:libs": "npm run flatten contracts/libs/WitnetErrorsLib.sol && npm run flatten contracts/libs/WitnetEncodingLib.sol && npm run flatten contracts/libs/WitnetPriceFeedsLib.sol", - "flatten:proxy": "npm run flatten contracts/core/WitnetProxy.sol", + "flatten:all": "pnpm run clean && pnpm run flatten:core && pnpm run flatten:apps && pnpm run flatten:libs && pnpm run flatten:proxy", + "flatten:apps": "pnpm run flatten contracts/core/apps/", + "flatten:core": "pnpm run flatten contracts/core/core/", + "flatten:libs": "pnpm run flatten contracts/libs/WitnetErrorsLib.sol && pnpm run flatten contracts/libs/WitnetEncodingLib.sol && pnpm run flatten contracts/libs/WitnetPriceFeedsLib.sol", + "flatten:proxy": "pnpm run flatten contracts/core/WitnetProxy.sol", "fmt:js": "eslint \"**/*.js\"", "fmt:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\" && solhint \"test/**/*.sol\" && solhint \"flattened/**/*.sol\"", "fmt!:js": "eslint \"**/*.js\" --fix", "fmt!:sol": "solhint --max-warnings 0 \"contracts/**/*.sol\" --fix && solhint \"test/**/*.sol\" --fix && solhint \"flattened/**/*.sol\"", - "fmt!": "npm run fmt!:js && npm run fmt!:sol", - "fmt": "npm run fmt:js && npm run fmt:sol", + "fmt!": "pnpm run fmt!:js && pnpm run fmt!:sol", + "fmt": "pnpm run fmt:js && pnpm run fmt:sol", "migrate": "npx truffle migrate --network", "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 && node ./scripts/prepare.js", - "test": "npm run clean && npx truffle test" + "test": "pnpm run clean && npx truffle test", + "verify:core": "node ./scripts/verify-core.js 2>&1", + "verify:libs": "node ./scripts/verify-libs.js 2>&1", + "verify:impls": "node ./scripts/verify-impls.js 2>&1" }, "dependencies": { "dotenv": "^16.4.4", @@ -77,6 +80,6 @@ "truffle": "^5.11.5", "truffle-assertions": "^0.9.2", "truffle-flattener": "^1.6.0", - "typescript": "latest" + "truffle-plugin-verify": "^0.6.7" } } diff --git a/scripts/verify-core.js b/scripts/verify-core.js new file mode 100644 index 000000000..5bb1df42b --- /dev/null +++ b/scripts/verify-core.js @@ -0,0 +1,29 @@ +#!/usr/bin/env node + +const utils = require("../src/utils") + +if (process.argv.length < 3) { + console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) + process.exit(0) +} + +const network = process.argv[2].toLowerCase().replaceAll(".", ":") + +const header = network.toUpperCase() + " CORE"; +console.info() +console.info(header) +console.info("=".repeat(header.length)) +console.info() + +utils.traceVerify(network, "WitnetDeployer"); +utils.traceVerify(network, "WitnetProxy"); + +const singletons = [ + "WitnetOracle", + "WitnetPriceFeeds", + "WitnetRequestBytecodes", + "witnetRequestFactory" +]; +for (const index in singletons) { + utils.traceVerify(network, `${singletons[index]} --custom-proxy WitnetProxy`); +} diff --git a/scripts/verify-impls.js b/scripts/verify-impls.js new file mode 100644 index 000000000..ce1a6f11e --- /dev/null +++ b/scripts/verify-impls.js @@ -0,0 +1,32 @@ +#!/usr/bin/env node + +const settings = require("../settings") +const utils = require("../src/utils") + +if (process.argv.length < 3) { + console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) + process.exit(0) +} + +const network = process.argv[2].toLowerCase().replaceAll(".", ":") + +const header = network.toUpperCase(); +console.info() +console.info(header) +console.info("=".repeat(header.length)) +console.info() + +const artifacts = settings.getArtifacts(network) +const impls = [ + artifacts["WitnetOracle"], + artifacts["WitnetPriceFeeds"], + artifacts["WitnetRequestBytecodes"], + artifacts["WitnetRequestFactory"], +]; +const constructorArgs = require("../migrations/constructorArgs.json") +for (const index in impls) { + utils.traceVerify(network, `${impls[index]} --forceConstructorArgs string:${ + constructorArgs[network][impls[index]] + } --verifiers etherscan`); +} + diff --git a/scripts/verify-libs.js b/scripts/verify-libs.js new file mode 100644 index 000000000..333353dee --- /dev/null +++ b/scripts/verify-libs.js @@ -0,0 +1,28 @@ +#!/usr/bin/env node + +const settings = require("../settings") +const utils = require("../src/utils") + +if (process.argv.length < 3) { + console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) + process.exit(0) +} + +const network = process.argv[2].toLowerCase().replaceAll(".", ":") + +const header = network.toUpperCase()+ " LIBS"; +console.info() +console.info(header) +console.info("=".repeat(header.length)) +console.info() + +const artifacts = settings.getArtifacts(network) +const libs = [ + artifacts["WitnetEncodingLib"], + artifacts["WitnetErrorsLib"], + artifacts["WitnetPriceFeedsLib"], +]; +for (const index in libs) { + utils.traceVerify(network, `${libs[index]}`); +} + diff --git a/src/utils.js b/src/utils.js index 4cd0c5d0c..9fc258643 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,3 +1,4 @@ +const execSync = require("child_process").execSync const fs = require("fs") require("dotenv").config() const lockfile = require("proper-lockfile") @@ -17,6 +18,7 @@ module.exports = { overwriteJsonFile, traceHeader, traceTx, + traceVerify, } function fromAscii (str) { @@ -29,7 +31,7 @@ function fromAscii (str) { } function getRealmNetworkFromArgs () { - let networkString = process.argv.includes("test") ? "test" : "development" + let networkString = process.env.WSB_DEFAULT_CHAIN || process.argv.includes("test") ? "test" : "development" // If a `--network` argument is provided, use that instead const args = process.argv.join("=").split("=") const networkIndex = args.indexOf("--network") @@ -136,9 +138,15 @@ 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(" ", "> gas price: ", tx.receipt.effectiveGasPrice / 10 ** 9, "gwei") - // console.info(" ", "> total cost: ", web3.utils.fromWei( - // BigInt(tx.receipt.gasUsed * tx.receipt.effectiveGasPrice).toString(), - // "ether" - // ), "ETH" - // ) + console.info(" ", "> total cost: ", parseFloat(BigInt(tx.receipt.gasUsed) * BigInt(tx.receipt.effectiveGasPrice) / BigInt(10 ** 18)).toString(), "ETH") +} + +function traceVerify(network, verifyArgs) { + console.log( + execSync( + `npx truffle run verify --network ${network} ${verifyArgs} ${process.argv.slice(3)}`, + { stdout: 'inherit' } + ).toString().split("\n") + .join("\n") + ); } From c034491c9650119c6a7930cdd2285a0a68b77f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 19 Feb 2024 10:15:35 +0100 Subject: [PATCH 147/149] fix: package prepare script --- scripts/prepare.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/prepare.js b/scripts/prepare.js index 4d7b78449..6fda7a862 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -6,7 +6,7 @@ if (fs.existsSync("./artifacts")) { if (os.type() === "Windows_NT") { exec("del /s /q artifacts\\*.dbg.json") } else { - exec("find ./artifacts -name *.dbg.json -exec rm -r {} \\;") + exec('find ./artifacts -name "*.dbg.json" -exec rm -r {} \\;') } } From f2f9e5382954a68fa20115464bedfdb2b1ac4e50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 19 Feb 2024 10:30:30 +0100 Subject: [PATCH 148/149] chore: update ci/cd actions to use pnpm instead of npm/yarn --- .github/workflows/nodejs.yml | 11 +- .github/workflows/npm-publish.yml | 7 +- package.json | 3 + pnpm-lock.yaml | 631 +++++++++++++++++++++++++++++- 4 files changed, 644 insertions(+), 8 deletions(-) diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 9d8c5ab91..985c380a4 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -20,15 +20,18 @@ jobs: uses: actions/setup-node@v1 with: node-version: ${{ matrix.node-version }} + - uses: pnpm/action-setup@v3 + with: + version: 8 - name: Install dependencies run: | - npm install + pnpm install - name: Check format run: | - npm run fmt + pnpm run fmt - name: Compile solidity contracts run: | - npm run compile + pnpm run compile - name: Run tests run: | - npm run test + pnpm run test diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 941a3228f..65ab18dd5 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -16,7 +16,10 @@ jobs: with: node-version: 20 registry-url: https://registry.npmjs.org/ - - run: yarn install - - run: yarn publish + - uses: pnpm/action-setup@v3 + with: + version: 8 + - run: pnpm install + - run: pnpm publish env: NODE_AUTH_TOKEN: ${{SECRETS.NPM_TOKEN}} \ No newline at end of file diff --git a/package.json b/package.json index b457285de..c64107d70 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,9 @@ "custom-error-test-helper": "^1.0.6", "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", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a31a36dd1..ae3089b63 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ specifiers: 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 @@ -39,7 +42,10 @@ devDependencies: bn.js: 4.12.0 custom-error-test-helper: 1.0.6 eslint: 8.56.0 - eslint-config-standard: 17.1.0_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 @@ -2076,6 +2082,10 @@ packages: dev: true optional: true + /@types/json5/0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + /@types/keyv/3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: @@ -2583,10 +2593,85 @@ packages: dev: true optional: true + /array-buffer-byte-length/1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + /array-flatten/1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} dev: true + /array-includes/3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true + + /array.prototype.filter/1.0.3: + resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /array.prototype.findlastindex/1.2.4: + resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat/1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap/1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice/1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.2 + dev: true + /asap/2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} dev: true @@ -2961,6 +3046,17 @@ packages: node-gyp-build: 4.8.0 dev: true + /builtin-modules/3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /builtins/5.0.1: + resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + dependencies: + semver: 7.6.0 + dev: true + /bytes/3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -3750,6 +3846,15 @@ packages: gopd: 1.0.1 dev: true + /define-properties/1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + /delay/5.0.0: resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} engines: {node: '>=10'} @@ -3787,6 +3892,13 @@ packages: engines: {node: '>=0.3.1'} dev: true + /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: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -3946,6 +4058,57 @@ packages: is-arrayish: 0.2.1 dev: true + /es-abstract/1.22.4: + resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.6 + call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.2 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.1 + has-symbols: 1.0.3 + hasown: 2.0.1 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-negative-zero: 2.0.2 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.2 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.8 + string.prototype.trimend: 1.0.7 + string.prototype.trimstart: 1.0.7 + typed-array-buffer: 1.0.1 + typed-array-byte-length: 1.0.0 + typed-array-byte-offset: 1.0.1 + typed-array-length: 1.0.4 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.14 + dev: true + + /es-array-method-boxes-properly/1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + /es-define-property/1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} @@ -3958,6 +4121,30 @@ packages: engines: {node: '>= 0.4'} dev: true + /es-set-tostringtag/2.0.2: + resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.1 + dev: true + + /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: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /es5-ext/0.10.62: resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} engines: {node: '>=0.10'} @@ -4006,7 +4193,16 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-standard/17.1.0_eslint@8.56.0: + /eslint-compat-utils/0.1.2_eslint@8.56.0: + resolution: {integrity: sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + dev: true + + /eslint-config-standard/17.1.0_ot4howdeavqht6h5s42eunnfxi: resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4014,6 +4210,122 @@ packages: eslint-plugin-import: ^2.25.2 eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 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 + dev: true + + /eslint-import-resolver-node/0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils/2.8.0_rzg3ygvhoewmy7caurhnki56y4: + resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + debug: 3.2.7 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /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/regexpp': 4.10.0 + 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: + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.4 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.56.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.0_rzg3ygvhoewmy7caurhnki56y4 + hasown: 2.0.1 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.2 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /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 + builtins: 5.0.1 + 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 + is-builtin-module: 3.2.1 + is-core-module: 2.13.1 + minimatch: 3.1.2 + resolve: 1.22.8 + semver: 7.6.0 + dev: true + + /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: + eslint: ^7.0.0 || ^8.0.0 dependencies: eslint: 8.56.0 dev: true @@ -4676,10 +4988,24 @@ packages: resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} dev: true + /function.prototype.name/1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + functions-have-names: 1.2.3 + dev: true + /functional-red-black-tree/1.0.1: resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} dev: true + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + /ganache/7.9.1: resolution: {integrity: sha512-Tqhd4J3cpiLeYTD6ek/zlchSB107IVPMIm4ypyg+xz1sdkeALUnYYZnmY4Bdjqj3i6QwtlZPCu7U4qKy7HlWTA==} hasBin: true @@ -4760,6 +5086,21 @@ packages: engines: {node: '>=10'} dev: true + /get-symbol-description/1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /get-tsconfig/4.7.2: + resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} + dependencies: + resolve-pkg-maps: 1.0.0 + dev: true + /getpass/0.1.7: resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} dependencies: @@ -4847,6 +5188,13 @@ packages: type-fest: 0.20.2 dev: true + /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: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: @@ -5019,6 +5367,10 @@ packages: - utf-8-validate dev: true + /has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + /has-flag/3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -5265,6 +5617,15 @@ packages: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} dev: true + /internal-slot/1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.1 + side-channel: 1.0.5 + dev: true + /invert-kv/1.0.0: resolution: {integrity: sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==} engines: {node: '>=0.10.0'} @@ -5289,10 +5650,24 @@ packages: has-tostringtag: 1.0.2 dev: true + /is-array-buffer/3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true + /is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + /is-binary-path/2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -5300,11 +5675,26 @@ packages: binary-extensions: 2.2.0 dev: true + /is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + /is-buffer/2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} dev: true + /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: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} @@ -5316,6 +5706,13 @@ packages: hasown: 2.0.1 dev: true + /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: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} @@ -5367,6 +5764,18 @@ packages: lower-case: 1.1.4 dev: true + /is-negative-zero/2.0.2: + resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + engines: {node: '>= 0.4'} + dev: true + + /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: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -5387,11 +5796,39 @@ packages: engines: {node: '>=8'} dev: true + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + /is-retry-allowed/2.2.0: resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} engines: {node: '>=10'} dev: true + /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-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: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + /is-typed-array/1.1.13: resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} @@ -5418,6 +5855,12 @@ packages: resolution: {integrity: sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==} dev: true + /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: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -5545,6 +5988,13 @@ packages: grapheme-splitter: 1.0.4 dev: true + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + /jsonfile/2.4.0: resolution: {integrity: sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==} optionalDependencies: @@ -6443,6 +6893,44 @@ packages: engines: {node: '>= 0.4'} dev: true + /object.assign/4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.fromentries/2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + dev: true + + /object.groupby/1.0.2: + resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} + dependencies: + array.prototype.filter: 1.0.3 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + es-errors: 1.3.0 + dev: true + + /object.values/1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + dev: true + /obliterator/2.0.4: resolution: {integrity: sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==} dev: true @@ -7223,6 +7711,16 @@ packages: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: true + /regexp.prototype.flags/1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.1 + dev: true + /registry-auth-token/5.0.2: resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} engines: {node: '>=14'} @@ -7338,6 +7836,10 @@ packages: engines: {node: '>=4'} dev: true + /resolve-pkg-maps/1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true + /resolve/1.17.0: resolution: {integrity: sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==} dependencies: @@ -7439,6 +7941,16 @@ packages: resolution: {integrity: sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==} dev: true + /safe-array-concat/1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} dev: true @@ -7447,6 +7959,15 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /safe-regex-test/1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + /safer-buffer/2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} dev: true @@ -7566,6 +8087,15 @@ packages: has-property-descriptors: 1.0.2 dev: true + /set-function-name/2.0.1: + resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + /setimmediate/1.0.4: resolution: {integrity: sha512-/TjEmXQVEzdod/FFskf3o7oOAsGhHf2j1dZqRFbDzq4F3mvvxflIIi4Hd3bLQE9y/CpwqfSQam5JakI/mi3Pog==} dev: true @@ -7837,6 +8367,31 @@ packages: strip-ansi: 6.0.1 dev: true + /string.prototype.trim/1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + dev: true + + /string.prototype.trimend/1.0.7: + resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + dev: true + + /string.prototype.trimstart/1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.4 + dev: true + /string_decoder/0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} dev: true @@ -7882,6 +8437,11 @@ packages: is-utf8: 0.2.1 dev: true + /strip-bom/3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + /strip-hex-prefix/1.0.0: resolution: {integrity: sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -8163,6 +8723,15 @@ packages: - utf-8-validate dev: true + /tsconfig-paths/3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib/1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true @@ -8247,6 +8816,45 @@ packages: resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} dev: true + /typed-array-buffer/1.0.1: + resolution: {integrity: sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length/1.0.0: + resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset/1.0.1: + resolution: {integrity: sha512-tcqKMrTRXjqvHN9S3553NPCaGL0VPgFI92lXszmrE8DMhiDPLBYLlvo8Uu4WZAAX/aGqp/T1sbA4ph8EWjDF9Q==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.6 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.1 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + is-typed-array: 1.1.13 + dev: true + /typedarray-to-buffer/3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: @@ -8277,6 +8885,15 @@ packages: resolution: {integrity: sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==} dev: true + /unbox-primitive/1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + call-bind: 1.0.7 + has-bigints: 1.0.2 + has-symbols: 1.0.3 + which-boxed-primitive: 1.0.2 + dev: true + /undici-types/5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true @@ -9024,6 +9641,16 @@ packages: webidl-conversions: 3.0.1 dev: true + /which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + /which-module/1.0.0: resolution: {integrity: sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==} dev: true From 8224cb0a8152a24f9f42e288a237bc15da33b43b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Guillermo=20D=C3=ADaz?= Date: Mon, 19 Feb 2024 10:31:55 +0100 Subject: [PATCH 149/149] chore: fmt! --- hardhat.config.js | 4 ++-- migrations/scripts/1_deployer.js | 1 - migrations/scripts/2_libs.js | 1 - migrations/scripts/3_core.js | 5 ++--- migrations/scripts/4_proxies.js | 3 +-- package.json | 2 +- scripts/prepare.js | 2 +- scripts/verify-core.js | 22 +++++++++++----------- scripts/verify-impls.js | 23 +++++++++++------------ scripts/verify-libs.js | 17 ++++++++--------- src/index.js | 2 +- src/utils.js | 20 +++++++++++++------- 12 files changed, 51 insertions(+), 51 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index 24f45c38f..677130bbb 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -32,8 +32,8 @@ module.exports = { .map(([network, config]) => { const [ecosystem] = utils.getRealmNetworkFromString(network) const envar = `ETHERSCAN_${ecosystem.toUpperCase()}_API_KEY` - return [network, - config?.verify?.apiKey || process.env[envar] || process.env.ETHERSCAN_API_KEY || "MY_API_KEY" + return [network, + config?.verify?.apiKey || process.env[envar] || process.env.ETHERSCAN_API_KEY || "MY_API_KEY", ] }), ), diff --git a/migrations/scripts/1_deployer.js b/migrations/scripts/1_deployer.js index fef038839..77b526539 100644 --- a/migrations/scripts/1_deployer.js +++ b/migrations/scripts/1_deployer.js @@ -4,7 +4,6 @@ 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] = {} diff --git a/migrations/scripts/2_libs.js b/migrations/scripts/2_libs.js index 47e0020a7..859fe8aa9 100644 --- a/migrations/scripts/2_libs.js +++ b/migrations/scripts/2_libs.js @@ -4,7 +4,6 @@ const utils = require("../../src/utils") const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const addresses = await utils.readJsonFromFile("./migrations/addresses.json") if (!addresses[network]) addresses[network] = {} diff --git a/migrations/scripts/3_core.js b/migrations/scripts/3_core.js index ea5208091..b2d001c7e 100644 --- a/migrations/scripts/3_core.js +++ b/migrations/scripts/3_core.js @@ -10,7 +10,6 @@ const version = `${ const WitnetDeployer = artifacts.require("WitnetDeployer") module.exports = async function (_, network, [, from]) { - const specs = settings.getSpecs(network) const targets = settings.getArtifacts(network) @@ -134,7 +133,7 @@ async function deploy (specs) { // save addresses file if required if (!utils.isDryRun(network)) { await utils.overwriteJsonFile("./migrations/addresses.json", addresses) - const args = await utils.readJsonFromFile("./migrations/constructorArgs.json"); + const args = await utils.readJsonFromFile("./migrations/constructorArgs.json") if (!args[network]) args[network] = {} args[network][key] = constructorArgs.slice(2) await utils.overwriteJsonFile("./migrations/constructorArgs.json", args) @@ -148,7 +147,7 @@ async function deploy (specs) { 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() diff --git a/migrations/scripts/4_proxies.js b/migrations/scripts/4_proxies.js index 6162a7acd..173fddc7a 100644 --- a/migrations/scripts/4_proxies.js +++ b/migrations/scripts/4_proxies.js @@ -13,7 +13,6 @@ 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) @@ -120,7 +119,7 @@ async function deploy (target) { const tx = await upgradeProxyTo(from, proxyAddr, newImpl.address, initdata) utils.traceTx(tx) } catch (ex) { - console.error(" ", "> Exception:\n",ex) + console.error(" ", "> Exception:\n", ex) } } } else { diff --git a/package.json b/package.json index c64107d70..4e22037ff 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "migrate": "npx truffle migrate --network", "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 && node ./scripts/prepare.js", + "prepare": "npx truffle compile --all && npx hardhat compile --force && node ./scripts/prepare.js", "test": "pnpm run clean && npx truffle test", "verify:core": "node ./scripts/verify-core.js 2>&1", "verify:libs": "node ./scripts/verify-libs.js 2>&1", diff --git a/scripts/prepare.js b/scripts/prepare.js index 6fda7a862..d82ff282a 100644 --- a/scripts/prepare.js +++ b/scripts/prepare.js @@ -6,7 +6,7 @@ if (fs.existsSync("./artifacts")) { if (os.type() === "Windows_NT") { exec("del /s /q artifacts\\*.dbg.json") } else { - exec('find ./artifacts -name "*.dbg.json" -exec rm -r {} \\;') + exec("find ./artifacts -name \"*.dbg.json\" -exec rm -r {} \\;") } } diff --git a/scripts/verify-core.js b/scripts/verify-core.js index 5bb1df42b..797a8509f 100644 --- a/scripts/verify-core.js +++ b/scripts/verify-core.js @@ -3,27 +3,27 @@ const utils = require("../src/utils") if (process.argv.length < 3) { - console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) - process.exit(0) + console.error("\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n") + process.exit(0) } const network = process.argv[2].toLowerCase().replaceAll(".", ":") -const header = network.toUpperCase() + " CORE"; +const header = network.toUpperCase() + " CORE" console.info() console.info(header) console.info("=".repeat(header.length)) console.info() -utils.traceVerify(network, "WitnetDeployer"); -utils.traceVerify(network, "WitnetProxy"); +utils.traceVerify(network, "WitnetDeployer") +utils.traceVerify(network, "WitnetProxy") const singletons = [ - "WitnetOracle", - "WitnetPriceFeeds", - "WitnetRequestBytecodes", - "witnetRequestFactory" -]; + "WitnetOracle", + "WitnetPriceFeeds", + "WitnetRequestBytecodes", + "witnetRequestFactory", +] for (const index in singletons) { - utils.traceVerify(network, `${singletons[index]} --custom-proxy WitnetProxy`); + utils.traceVerify(network, `${singletons[index]} --custom-proxy WitnetProxy`) } diff --git a/scripts/verify-impls.js b/scripts/verify-impls.js index ce1a6f11e..c888ea612 100644 --- a/scripts/verify-impls.js +++ b/scripts/verify-impls.js @@ -4,13 +4,13 @@ const settings = require("../settings") const utils = require("../src/utils") if (process.argv.length < 3) { - console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) - process.exit(0) + console.error("\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n") + process.exit(0) } const network = process.argv[2].toLowerCase().replaceAll(".", ":") -const header = network.toUpperCase(); +const header = network.toUpperCase() console.info() console.info(header) console.info("=".repeat(header.length)) @@ -18,15 +18,14 @@ console.info() const artifacts = settings.getArtifacts(network) const impls = [ - artifacts["WitnetOracle"], - artifacts["WitnetPriceFeeds"], - artifacts["WitnetRequestBytecodes"], - artifacts["WitnetRequestFactory"], -]; + artifacts.WitnetOracle, + artifacts.WitnetPriceFeeds, + artifacts.WitnetRequestBytecodes, + artifacts.WitnetRequestFactory, +] const constructorArgs = require("../migrations/constructorArgs.json") for (const index in impls) { - utils.traceVerify(network, `${impls[index]} --forceConstructorArgs string:${ - constructorArgs[network][impls[index]] - } --verifiers etherscan`); + utils.traceVerify(network, `${impls[index]} --forceConstructorArgs string:${ + constructorArgs[network][impls[index]] + } --verifiers etherscan`) } - diff --git a/scripts/verify-libs.js b/scripts/verify-libs.js index 333353dee..ff123b661 100644 --- a/scripts/verify-libs.js +++ b/scripts/verify-libs.js @@ -4,13 +4,13 @@ const settings = require("../settings") const utils = require("../src/utils") if (process.argv.length < 3) { - console.error(`\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n`) - process.exit(0) + console.error("\nUsage:\n\n$ node ./scripts/verify-proxies.js : ...OPTIONAL_ARGS\n") + process.exit(0) } const network = process.argv[2].toLowerCase().replaceAll(".", ":") -const header = network.toUpperCase()+ " LIBS"; +const header = network.toUpperCase() + " LIBS" console.info() console.info(header) console.info("=".repeat(header.length)) @@ -18,11 +18,10 @@ console.info() const artifacts = settings.getArtifacts(network) const libs = [ - artifacts["WitnetEncodingLib"], - artifacts["WitnetErrorsLib"], - artifacts["WitnetPriceFeedsLib"], -]; + artifacts.WitnetEncodingLib, + artifacts.WitnetErrorsLib, + artifacts.WitnetPriceFeedsLib, +] for (const index in libs) { - utils.traceVerify(network, `${libs[index]}`); + utils.traceVerify(network, `${libs[index]}`) } - diff --git a/src/index.js b/src/index.js index 40f67d5fd..1f475f7d4 100644 --- a/src/index.js +++ b/src/index.js @@ -37,7 +37,7 @@ module.exports = { WitnetRequestBytecodes: require("../artifacts/contracts/WitnetRequestBytecodes.sol/WitnetRequestBytecodes.json"), WitnetRequestFactory: require("../artifacts/contracts/WitnetRequestFactory.sol/WitnetRequestFactory.json"), WitnetRequestTemplate: require("../artifacts/contracts/WitnetRequestTemplate.sol/WitnetRequestTemplate.json"), - WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json") + WitnetUpgradableBase: require("../artifacts/contracts/core/WitnetUpgradableBase.sol/WitnetUpgradableBase.json"), }, settings: require("../settings"), utils, diff --git a/src/utils.js b/src/utils.js index 9fc258643..dc74e7672 100644 --- a/src/utils.js +++ b/src/utils.js @@ -138,15 +138,21 @@ 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(" ", "> 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(" ", "> total cost: ", parseFloat( + BigInt(tx.receipt.gasUsed) * + BigInt(tx.receipt.effectiveGasPrice) / + BigInt(10 ** 18) + ).toString(), + "ETH" + ) } -function traceVerify(network, verifyArgs) { +function traceVerify (network, verifyArgs) { console.log( - execSync( - `npx truffle run verify --network ${network} ${verifyArgs} ${process.argv.slice(3)}`, - { stdout: 'inherit' } - ).toString().split("\n") + execSync( + `npx truffle run verify --network ${network} ${verifyArgs} ${process.argv.slice(3)}`, + { stdout: "inherit" } + ).toString().split("\n") .join("\n") - ); + ) }